diff --git a/docs/lists/models.rst b/docs/lists/models.rst index de9c37a..bf70146 100644 --- a/docs/lists/models.rst +++ b/docs/lists/models.rst @@ -226,15 +226,9 @@ :doc:`../modules/TroughPhysical` Physical trough applications -:doc:`../modules/TroughPhysicalCspSolver` (HD) - Physical trough using CSP Solver - :doc:`../modules/TroughPhysicalIph` (HD) Physical trough iph applications -:doc:`../modules/TroughPhysicalProcessHeat` - Physical trough process heat applications - :doc:`../modules/UiTesCalcs` (HD) Calculates values for all calculated values on UI TES page(s) @@ -369,9 +363,7 @@ ../modules/TidalFileReader.rst ../modules/Timeseq.rst ../modules/TroughPhysical.rst - ../modules/TroughPhysicalCspSolver.rst ../modules/TroughPhysicalIph.rst - ../modules/TroughPhysicalProcessHeat.rst ../modules/UiTesCalcs.rst ../modules/UiUdpcChecks.rst ../modules/UserHtfComparison.rst diff --git a/docs/modules/FresnelPhysical.rst b/docs/modules/FresnelPhysical.rst index f5201c2..528585a 100644 --- a/docs/modules/FresnelPhysical.rst +++ b/docs/modules/FresnelPhysical.rst @@ -86,6 +86,12 @@ SystemDesign Group SolarField Group ----------------- +.. autoclass:: PySAM.FresnelPhysical.FresnelPhysical.SolarField + :members: + +SolarField Group +----------------- + .. autoclass:: PySAM.FresnelPhysical.FresnelPhysical.SolarField :members: diff --git a/docs/modules/FresnelPhysicalIph.rst b/docs/modules/FresnelPhysicalIph.rst index d58690f..d294181 100644 --- a/docs/modules/FresnelPhysicalIph.rst +++ b/docs/modules/FresnelPhysicalIph.rst @@ -44,6 +44,12 @@ SystemDesign Group SolarField Group ----------------- +.. autoclass:: PySAM.FresnelPhysicalIph.FresnelPhysicalIph.SolarField + :members: + +SolarField Group +----------------- + .. autoclass:: PySAM.FresnelPhysicalIph.FresnelPhysicalIph.SolarField :members: diff --git a/docs/modules/TroughPhysical.rst b/docs/modules/TroughPhysical.rst index 5d85481..5552ae5 100644 --- a/docs/modules/TroughPhysical.rst +++ b/docs/modules/TroughPhysical.rst @@ -98,12 +98,6 @@ TowerAndReceiver Group .. autoclass:: PySAM.TroughPhysical.TroughPhysical.TowerAndReceiver :members: -SolarResourceData Group ------------------------- - -.. autoclass:: PySAM.TroughPhysical.TroughPhysical.SolarResourceData - :members: - CapitalCosts Group ------------------- diff --git a/docs/modules/TroughPhysicalCspSolver.rst b/docs/modules/TroughPhysicalCspSolver.rst deleted file mode 100644 index 6ef95ee..0000000 --- a/docs/modules/TroughPhysicalCspSolver.rst +++ /dev/null @@ -1,90 +0,0 @@ -.. _TroughPhysicalCspSolver: - -TroughPhysicalCspSolver -======================== - -.. automodule:: PySAM.TroughPhysicalCspSolver - :members: - -TroughPhysicalCspSolver is a wrapper for the SSC compute module `cmod_trough_physical_csp_solver.cpp `_ - -Interdependent Variables --------------------------- - -The variables listed below are interdependent with other variables. If you change the value of one of these variables, you may need to change values of other variables. The SAM user interface manages these interdependent variables, but in PySAM, it is up to you change the value of all interdependent variables so they are consistent. See :doc:`../interdependent-variables` for examples and details. - -- None - -Functions ------------ - -.. autoclass:: PySAM.TroughPhysicalCspSolver.TroughPhysicalCspSolver - :members: - -Weather Group --------------- - -.. autoclass:: PySAM.TroughPhysicalCspSolver.TroughPhysicalCspSolver.Weather - :members: - -Trough Group -------------- - -.. autoclass:: PySAM.TroughPhysicalCspSolver.TroughPhysicalCspSolver.Trough - :members: - -TimeOfDelivery Group ---------------------- - -.. autoclass:: PySAM.TroughPhysicalCspSolver.TroughPhysicalCspSolver.TimeOfDelivery - :members: - -SolarField Group ------------------ - -.. autoclass:: PySAM.TroughPhysicalCspSolver.TroughPhysicalCspSolver.SolarField - :members: - -Controller Group ------------------ - -.. autoclass:: PySAM.TroughPhysicalCspSolver.TroughPhysicalCspSolver.Controller - :members: - -TouTranslator Group --------------------- - -.. autoclass:: PySAM.TroughPhysicalCspSolver.TroughPhysicalCspSolver.TouTranslator - :members: - -Powerblock Group ------------------ - -.. autoclass:: PySAM.TroughPhysicalCspSolver.TroughPhysicalCspSolver.Powerblock - :members: - -UserDefinedPC Group --------------------- - -.. autoclass:: PySAM.TroughPhysicalCspSolver.TroughPhysicalCspSolver.UserDefinedPC - :members: - -Enet Group ------------ - -.. autoclass:: PySAM.TroughPhysicalCspSolver.TroughPhysicalCspSolver.Enet - :members: - -AdjustmentFactors Group ------------------------- - -.. autoclass:: PySAM.AdjustmentFactors.AdjustmentFactors - :members: - :noindex: - -Outputs Group --------------- - -.. autoclass:: PySAM.TroughPhysicalCspSolver.TroughPhysicalCspSolver.Outputs - :members: - diff --git a/docs/modules/TroughPhysicalIph.rst b/docs/modules/TroughPhysicalIph.rst index 1cbb3c9..b90c6b8 100644 --- a/docs/modules/TroughPhysicalIph.rst +++ b/docs/modules/TroughPhysicalIph.rst @@ -117,12 +117,6 @@ TowerAndReceiver Group .. autoclass:: PySAM.TroughPhysicalIph.TroughPhysicalIph.TowerAndReceiver :members: -SolarResourceData Group ------------------------- - -.. autoclass:: PySAM.TroughPhysicalIph.TroughPhysicalIph.SolarResourceData - :members: - CapitalCosts Group ------------------- diff --git a/docs/modules/TroughPhysicalProcessHeat.rst b/docs/modules/TroughPhysicalProcessHeat.rst deleted file mode 100644 index 7a6eec6..0000000 --- a/docs/modules/TroughPhysicalProcessHeat.rst +++ /dev/null @@ -1,95 +0,0 @@ -.. _TroughPhysicalProcessHeat: - -TroughPhysicalProcessHeat -========================== - -.. automodule:: PySAM.TroughPhysicalProcessHeat - :members: - -TroughPhysicalProcessHeat is a wrapper for the SSC compute module `cmod_trough_physical_process_heat.cpp `_ - -Functions ------------ - -.. autoclass:: PySAM.TroughPhysicalProcessHeat.TroughPhysicalProcessHeat - :members: - -Weather Group --------------- - -.. autoclass:: PySAM.TroughPhysicalProcessHeat.TroughPhysicalProcessHeat.Weather - :members: - -SolarField Group ------------------ - -.. autoclass:: PySAM.TroughPhysicalProcessHeat.TroughPhysicalProcessHeat.SolarField - :members: - -Controller Group ------------------ - -.. autoclass:: PySAM.TroughPhysicalProcessHeat.TroughPhysicalProcessHeat.Controller - :members: - -SystemDesign Group -------------------- - -.. autoclass:: PySAM.TroughPhysicalProcessHeat.TroughPhysicalProcessHeat.SystemDesign - :members: - -TES Group ----------- - -.. autoclass:: PySAM.TroughPhysicalProcessHeat.TroughPhysicalProcessHeat.TES - :members: - -TES2tank Group ---------------- - -.. autoclass:: PySAM.TroughPhysicalProcessHeat.TroughPhysicalProcessHeat.TES2tank - :members: - -Tou Group ----------- - -.. autoclass:: PySAM.TroughPhysicalProcessHeat.TroughPhysicalProcessHeat.Tou - :members: - -SystemControl Group --------------------- - -.. autoclass:: PySAM.TroughPhysicalProcessHeat.TroughPhysicalProcessHeat.SystemControl - :members: - -TimeOfDeliveryFactors Group ----------------------------- - -.. autoclass:: PySAM.TroughPhysicalProcessHeat.TroughPhysicalProcessHeat.TimeOfDeliveryFactors - :members: - -System Group -------------- - -.. autoclass:: PySAM.TroughPhysicalProcessHeat.TroughPhysicalProcessHeat.System - :members: - -Powerblock Group ------------------ - -.. autoclass:: PySAM.TroughPhysicalProcessHeat.TroughPhysicalProcessHeat.Powerblock - :members: - -AdjustmentFactors Group ------------------------- - -.. autoclass:: PySAM.AdjustmentFactors.AdjustmentFactors - :members: - :noindex: - -Outputs Group --------------- - -.. autoclass:: PySAM.TroughPhysicalProcessHeat.TroughPhysicalProcessHeat.Outputs - :members: - diff --git a/modules/FresnelPhysical.c b/modules/FresnelPhysical.c index 30c34e7..ea861cb 100644 --- a/modules/FresnelPhysical.c +++ b/modules/FresnelPhysical.c @@ -506,13 +506,13 @@ static PyGetSetDef SystemDesign_getset[] = { PyDoc_STR("*float*: Estimated gross to net conversion factor\n\n**Required:**\nTrue"), NULL}, {"solar_mult_in", (getter)SystemDesign_get_solar_mult_in,(setter)SystemDesign_set_solar_mult_in, - PyDoc_STR("*float*: Solar multiple Input"), + PyDoc_STR("*float*: Solar multiple Input\n\n**Required:**\nTrue"), NULL}, {"solar_mult_or_Ap", (getter)SystemDesign_get_solar_mult_or_Ap,(setter)SystemDesign_set_solar_mult_or_Ap, - PyDoc_STR("*float*: Design using specified solar mult or field aperture [m3]"), + PyDoc_STR("*float*: Design using specified solar mult or field aperture [m3]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"total_Ap_in", (getter)SystemDesign_get_total_Ap_in,(setter)SystemDesign_set_total_Ap_in, - PyDoc_STR("*float*: Field aperture Input [m3]"), + PyDoc_STR("*float*: Field aperture Input [m3]\n\n**Required:**\nTrue"), NULL}, {"tshours", (getter)SystemDesign_get_tshours,(setter)SystemDesign_set_tshours, PyDoc_STR("*float*: Equivalent full-load thermal storage hours [hr]\n\n**Required:**\nTrue"), @@ -818,30 +818,6 @@ SolarField_set_land_mult(VarGroupObject *self, PyObject *value, void *closure) return PySAM_double_setter(value, SAM_FresnelPhysical_SolarField_land_mult_nset, self->data_ptr); } -static PyObject * -SolarField_get_m_dot_htfmax(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_FresnelPhysical_SolarField_m_dot_htfmax_nget, self->data_ptr); -} - -static int -SolarField_set_m_dot_htfmax(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_FresnelPhysical_SolarField_m_dot_htfmax_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_m_dot_htfmin(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_FresnelPhysical_SolarField_m_dot_htfmin_nget, self->data_ptr); -} - -static int -SolarField_set_m_dot_htfmin(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_FresnelPhysical_SolarField_m_dot_htfmin_nset, self->data_ptr); -} - static PyObject * SolarField_get_mc_bal_cold(VarGroupObject *self, void *closure) { @@ -1032,12 +1008,6 @@ static PyGetSetDef SolarField_getset[] = { {"land_mult", (getter)SolarField_get_land_mult,(setter)SolarField_set_land_mult, PyDoc_STR("*float*: Non-solar field land area multiplier [-]\n\n**Required:**\nTrue"), NULL}, -{"m_dot_htfmax", (getter)SolarField_get_m_dot_htfmax,(setter)SolarField_set_m_dot_htfmax, - PyDoc_STR("*float*: Maximum loop HTF flow rate [kg/s]\n\n**Required:**\nTrue"), - NULL}, -{"m_dot_htfmin", (getter)SolarField_get_m_dot_htfmin,(setter)SolarField_set_m_dot_htfmin, - PyDoc_STR("*float*: Minimum loop HTF flow rate [kg/s]\n\n**Required:**\nTrue"), - NULL}, {"mc_bal_cold", (getter)SolarField_get_mc_bal_cold,(setter)SolarField_set_mc_bal_cold, PyDoc_STR("*float*: The heat capacity of the balance of plant on the cold side [kWht/K-MWt]\n\n**Required:**\nTrue"), NULL}, @@ -1124,6 +1094,203 @@ static PyTypeObject SolarField_Type = { }; +/* + * SolarField Group + */ + +static PyTypeObject SolarField_Type; + +static PyObject * +SolarField_new(SAM_FresnelPhysical data_ptr) +{ + PyObject* new_obj = SolarField_Type.tp_alloc(&SolarField_Type,0); + + VarGroupObject* SolarField_obj = (VarGroupObject*)new_obj; + + SolarField_obj->data_ptr = (SAM_table)data_ptr; + + return new_obj; +} + +/* SolarField methods */ + +static PyObject * +SolarField_assign(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + + if (!PySAM_assign_from_dict(self->data_ptr, dict, "FresnelPhysical", "SolarField")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +SolarField_replace(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + PyTypeObject* tp = &SolarField_Type; + + if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "FresnelPhysical", "SolarField")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +SolarField_export(VarGroupObject *self, PyObject *args) +{ + PyTypeObject* tp = &SolarField_Type; + PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); + return dict; +} + +static PyMethodDef SolarField_methods[] = { + {"assign", (PyCFunction)SolarField_assign, METH_VARARGS, + PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``SolarField_vals = { var: val, ...}``")}, + {"replace", (PyCFunction)SolarField_replace, METH_VARARGS, + PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``SolarField_vals = { var: val, ...}``")}, + {"export", (PyCFunction)SolarField_export, METH_VARARGS, + PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, + {NULL, NULL} /* sentinel */ +}; + +static PyObject * +SolarField_get_f_htfmax(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysical_SolarField_f_htfmax_nget, self->data_ptr); +} + +static int +SolarField_set_f_htfmax(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_FresnelPhysical_SolarField_f_htfmax_nset, self->data_ptr); +} + +static PyObject * +SolarField_get_f_htfmin(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysical_SolarField_f_htfmin_nget, self->data_ptr); +} + +static int +SolarField_set_f_htfmin(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_FresnelPhysical_SolarField_f_htfmin_nset, self->data_ptr); +} + +static PyObject * +SolarField_get_m_dot_htfmax(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysical_SolarField_m_dot_htfmax_nget, self->data_ptr); +} + +static int +SolarField_set_m_dot_htfmax(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_FresnelPhysical_SolarField_m_dot_htfmax_nset, self->data_ptr); +} + +static PyObject * +SolarField_get_m_dot_htfmin(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysical_SolarField_m_dot_htfmin_nget, self->data_ptr); +} + +static int +SolarField_set_m_dot_htfmin(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_FresnelPhysical_SolarField_m_dot_htfmin_nset, self->data_ptr); +} + +static PyObject * +SolarField_get_use_abs_or_rel_mdot_limit(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysical_SolarField_use_abs_or_rel_mdot_limit_nget, self->data_ptr); +} + +static int +SolarField_set_use_abs_or_rel_mdot_limit(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_FresnelPhysical_SolarField_use_abs_or_rel_mdot_limit_nset, self->data_ptr); +} + +static PyGetSetDef SolarField_getset[] = { +{"f_htfmax", (getter)SolarField_get_f_htfmax,(setter)SolarField_set_f_htfmax, + PyDoc_STR("*float*: Maximum loop mass flow rate fraction of design\n\n**Required:**\nRequired if use_abs_or_rel_mdot_limit=1"), + NULL}, +{"f_htfmin", (getter)SolarField_get_f_htfmin,(setter)SolarField_set_f_htfmin, + PyDoc_STR("*float*: Minimum loop mass flow rate fraction of design\n\n**Required:**\nRequired if use_abs_or_rel_mdot_limit=1"), + NULL}, +{"m_dot_htfmax", (getter)SolarField_get_m_dot_htfmax,(setter)SolarField_set_m_dot_htfmax, + PyDoc_STR("*float*: Maximum loop HTF flow rate [kg/s]\n\n**Required:**\nRequired if use_abs_or_rel_mdot_limit=0"), + NULL}, +{"m_dot_htfmin", (getter)SolarField_get_m_dot_htfmin,(setter)SolarField_set_m_dot_htfmin, + PyDoc_STR("*float*: Minimum loop HTF flow rate [kg/s]\n\n**Required:**\nRequired if use_abs_or_rel_mdot_limit=0"), + NULL}, +{"use_abs_or_rel_mdot_limit", (getter)SolarField_get_use_abs_or_rel_mdot_limit,(setter)SolarField_set_use_abs_or_rel_mdot_limit, + PyDoc_STR("*float*: Use mass flow abs (0) or relative (1) limits\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject SolarField_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyVarObject_HEAD_INIT(NULL, 0) + "FresnelPhysical.SolarField", /*tp_name*/ + sizeof(VarGroupObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistofnset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + SolarField_methods, /*tp_methods*/ + 0, /*tp_members*/ + SolarField_getset, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictofnset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ +}; + + /* * ColRec Group */ @@ -2234,7 +2401,7 @@ static PyGetSetDef Powerblock_getset[] = { PyDoc_STR("*float*: Pumping power to move 1kg of HTF through PB loop [kW/kg]\n\n**Required:**\nTrue"), NULL}, {"pc_config", (getter)Powerblock_get_pc_config,(setter)Powerblock_set_pc_config, - PyDoc_STR("*float*: 0: Steam Rankine (224), 1: user defined [-]\n\n**Constraints:**\nINTEGER"), + PyDoc_STR("*float*: 0: Steam Rankine (224), 1: user defined [-]\n\n**Constraints:**\nINTEGER\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"q_sby_frac", (getter)Powerblock_get_q_sby_frac,(setter)Powerblock_set_q_sby_frac, PyDoc_STR("*float*: Fraction of thermal power required for standby mode [none]\n\n**Required:**\nTrue"), @@ -3054,18 +3221,6 @@ SysControl_set_is_dispatch(VarGroupObject *self, PyObject *value, void *closure) return PySAM_double_setter(value, SAM_FresnelPhysical_SysControl_is_dispatch_nset, self->data_ptr); } -static PyObject * -SysControl_get_is_dispatch_series(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_FresnelPhysical_SysControl_is_dispatch_series_nget, self->data_ptr); -} - -static int -SysControl_set_is_dispatch_series(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_FresnelPhysical_SysControl_is_dispatch_series_nset, self->data_ptr); -} - static PyObject * SysControl_get_pb_fixed_par(VarGroupObject *self, void *closure) { @@ -3142,9 +3297,6 @@ static PyGetSetDef SysControl_getset[] = { {"is_dispatch", (getter)SysControl_get_is_dispatch,(setter)SysControl_set_is_dispatch, PyDoc_STR("*float*: Allow dispatch optimization? [-]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, -{"is_dispatch_series", (getter)SysControl_get_is_dispatch_series,(setter)SysControl_set_is_dispatch_series, - PyDoc_STR("*float*: Use time-series dispatch factors\n\n**Required:**\nFalse. Automatically set to 1 if not assigned explicitly or loaded from defaults."), - NULL}, {"pb_fixed_par", (getter)SysControl_get_pb_fixed_par,(setter)SysControl_set_pb_fixed_par, PyDoc_STR("*float*: Fixed parasitic load - runs at all times\n\n**Required:**\nTrue"), NULL}, @@ -5778,6 +5930,18 @@ Outputs_get_eta_optical_des_SS(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_FresnelPhysical_Outputs_eta_optical_des_SS_nget, self->data_ptr); } +static PyObject * +Outputs_get_f_htfmax_actual(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysical_Outputs_f_htfmax_actual_nget, self->data_ptr); +} + +static PyObject * +Outputs_get_f_htfmin_actual(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysical_Outputs_f_htfmin_actual_nget, self->data_ptr); +} + static PyObject * Outputs_get_field_area(VarGroupObject *self, void *closure) { @@ -5922,6 +6086,18 @@ Outputs_get_m_dot_field_to_cycle(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_FresnelPhysical_Outputs_m_dot_field_to_cycle_aget, self->data_ptr); } +static PyObject * +Outputs_get_m_dot_htfmax_actual(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysical_Outputs_m_dot_htfmax_actual_nget, self->data_ptr); +} + +static PyObject * +Outputs_get_m_dot_htfmin_actual(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysical_Outputs_m_dot_htfmin_actual_nget, self->data_ptr); +} + static PyObject * Outputs_get_m_dot_loop(VarGroupObject *self, void *closure) { @@ -6790,6 +6966,12 @@ static PyGetSetDef Outputs_getset[] = { {"eta_optical_des_SS", (getter)Outputs_get_eta_optical_des_SS,(setter)0, PyDoc_STR("*float*: Steady State optical efficiency"), NULL}, +{"f_htfmax_actual", (getter)Outputs_get_f_htfmax_actual,(setter)0, + PyDoc_STR("*float*: Actual maximum loop mass flow rate fraction of design"), + NULL}, +{"f_htfmin_actual", (getter)Outputs_get_f_htfmin_actual,(setter)0, + PyDoc_STR("*float*: Actual minimum loop mass flow rate fraction of design"), + NULL}, {"field_area", (getter)Outputs_get_field_area,(setter)0, PyDoc_STR("*float*: Solar field area [acres]"), NULL}, @@ -6862,6 +7044,12 @@ static PyGetSetDef Outputs_getset[] = { {"m_dot_field_to_cycle", (getter)Outputs_get_m_dot_field_to_cycle,(setter)0, PyDoc_STR("*sequence*: Mass flow: field to cycle [kg/s]"), NULL}, +{"m_dot_htfmax_actual", (getter)Outputs_get_m_dot_htfmax_actual,(setter)0, + PyDoc_STR("*float*: Actual maximum loop HTF flow rate [kg/s]"), + NULL}, +{"m_dot_htfmin_actual", (getter)Outputs_get_m_dot_htfmin_actual,(setter)0, + PyDoc_STR("*float*: Actual minimum loop HTF flow rate [kg/s]"), + NULL}, {"m_dot_loop", (getter)Outputs_get_m_dot_loop,(setter)0, PyDoc_STR("*sequence*: Receiver mass flow rate [kg/s]"), NULL}, @@ -7229,6 +7417,10 @@ newFresnelPhysicalObject(void* data_ptr) PyDict_SetItemString(attr_dict, "SolarField", SolarField_obj); Py_DECREF(SolarField_obj); + PyObject* SolarField_obj = SolarField_new(self->data_ptr); + PyDict_SetItemString(attr_dict, "SolarField", SolarField_obj); + Py_DECREF(SolarField_obj); + PyObject* ColRec_obj = ColRec_new(self->data_ptr); PyDict_SetItemString(attr_dict, "ColRec", ColRec_obj); Py_DECREF(ColRec_obj); @@ -7615,6 +7807,13 @@ FresnelPhysicalModule_exec(PyObject *m) (PyObject*)&SolarField_Type); Py_DECREF(&SolarField_Type); + /// Add the SolarField type object to FresnelPhysical_Type + if (PyType_Ready(&SolarField_Type) < 0) { goto fail; } + PyDict_SetItemString(FresnelPhysical_Type.tp_dict, + "SolarField", + (PyObject*)&SolarField_Type); + Py_DECREF(&SolarField_Type); + /// Add the ColRec type object to FresnelPhysical_Type if (PyType_Ready(&ColRec_Type) < 0) { goto fail; } PyDict_SetItemString(FresnelPhysical_Type.tp_dict, diff --git a/modules/FresnelPhysicalIph.c b/modules/FresnelPhysicalIph.c index 76db272..2331794 100644 --- a/modules/FresnelPhysicalIph.c +++ b/modules/FresnelPhysicalIph.c @@ -476,13 +476,13 @@ static PyGetSetDef SystemDesign_getset[] = { PyDoc_STR("*float*: Design heat input to power block [MWt]\n\n**Required:**\nTrue"), NULL}, {"solar_mult_in", (getter)SystemDesign_get_solar_mult_in,(setter)SystemDesign_set_solar_mult_in, - PyDoc_STR("*float*: Solar multiple Input"), + PyDoc_STR("*float*: Solar multiple Input\n\n**Required:**\nTrue"), NULL}, {"solar_mult_or_Ap", (getter)SystemDesign_get_solar_mult_or_Ap,(setter)SystemDesign_set_solar_mult_or_Ap, - PyDoc_STR("*float*: Design using specified solar mult or field aperture [m3]"), + PyDoc_STR("*float*: Design using specified solar mult or field aperture [m3]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"total_Ap_in", (getter)SystemDesign_get_total_Ap_in,(setter)SystemDesign_set_total_Ap_in, - PyDoc_STR("*float*: Field aperture Input [m3]"), + PyDoc_STR("*float*: Field aperture Input [m3]\n\n**Required:**\nTrue"), NULL}, {"tshours", (getter)SystemDesign_get_tshours,(setter)SystemDesign_set_tshours, PyDoc_STR("*float*: Equivalent full-load thermal storage hours [hr]\n\n**Required:**\nTrue"), @@ -788,30 +788,6 @@ SolarField_set_land_mult(VarGroupObject *self, PyObject *value, void *closure) return PySAM_double_setter(value, SAM_FresnelPhysicalIph_SolarField_land_mult_nset, self->data_ptr); } -static PyObject * -SolarField_get_m_dot_htfmax(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_FresnelPhysicalIph_SolarField_m_dot_htfmax_nget, self->data_ptr); -} - -static int -SolarField_set_m_dot_htfmax(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_FresnelPhysicalIph_SolarField_m_dot_htfmax_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_m_dot_htfmin(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_FresnelPhysicalIph_SolarField_m_dot_htfmin_nget, self->data_ptr); -} - -static int -SolarField_set_m_dot_htfmin(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_FresnelPhysicalIph_SolarField_m_dot_htfmin_nset, self->data_ptr); -} - static PyObject * SolarField_get_mc_bal_cold(VarGroupObject *self, void *closure) { @@ -1002,12 +978,6 @@ static PyGetSetDef SolarField_getset[] = { {"land_mult", (getter)SolarField_get_land_mult,(setter)SolarField_set_land_mult, PyDoc_STR("*float*: Non-solar field land area multiplier [-]\n\n**Required:**\nTrue"), NULL}, -{"m_dot_htfmax", (getter)SolarField_get_m_dot_htfmax,(setter)SolarField_set_m_dot_htfmax, - PyDoc_STR("*float*: Maximum loop HTF flow rate [kg/s]\n\n**Required:**\nTrue"), - NULL}, -{"m_dot_htfmin", (getter)SolarField_get_m_dot_htfmin,(setter)SolarField_set_m_dot_htfmin, - PyDoc_STR("*float*: Minimum loop HTF flow rate [kg/s]\n\n**Required:**\nTrue"), - NULL}, {"mc_bal_cold", (getter)SolarField_get_mc_bal_cold,(setter)SolarField_set_mc_bal_cold, PyDoc_STR("*float*: The heat capacity of the balance of plant on the cold side [kWht/K-MWt]\n\n**Required:**\nTrue"), NULL}, @@ -1094,6 +1064,203 @@ static PyTypeObject SolarField_Type = { }; +/* + * SolarField Group + */ + +static PyTypeObject SolarField_Type; + +static PyObject * +SolarField_new(SAM_FresnelPhysicalIph data_ptr) +{ + PyObject* new_obj = SolarField_Type.tp_alloc(&SolarField_Type,0); + + VarGroupObject* SolarField_obj = (VarGroupObject*)new_obj; + + SolarField_obj->data_ptr = (SAM_table)data_ptr; + + return new_obj; +} + +/* SolarField methods */ + +static PyObject * +SolarField_assign(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + + if (!PySAM_assign_from_dict(self->data_ptr, dict, "FresnelPhysicalIph", "SolarField")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +SolarField_replace(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + PyTypeObject* tp = &SolarField_Type; + + if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "FresnelPhysicalIph", "SolarField")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +SolarField_export(VarGroupObject *self, PyObject *args) +{ + PyTypeObject* tp = &SolarField_Type; + PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); + return dict; +} + +static PyMethodDef SolarField_methods[] = { + {"assign", (PyCFunction)SolarField_assign, METH_VARARGS, + PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``SolarField_vals = { var: val, ...}``")}, + {"replace", (PyCFunction)SolarField_replace, METH_VARARGS, + PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``SolarField_vals = { var: val, ...}``")}, + {"export", (PyCFunction)SolarField_export, METH_VARARGS, + PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, + {NULL, NULL} /* sentinel */ +}; + +static PyObject * +SolarField_get_f_htfmax(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysicalIph_SolarField_f_htfmax_nget, self->data_ptr); +} + +static int +SolarField_set_f_htfmax(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_FresnelPhysicalIph_SolarField_f_htfmax_nset, self->data_ptr); +} + +static PyObject * +SolarField_get_f_htfmin(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysicalIph_SolarField_f_htfmin_nget, self->data_ptr); +} + +static int +SolarField_set_f_htfmin(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_FresnelPhysicalIph_SolarField_f_htfmin_nset, self->data_ptr); +} + +static PyObject * +SolarField_get_m_dot_htfmax(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysicalIph_SolarField_m_dot_htfmax_nget, self->data_ptr); +} + +static int +SolarField_set_m_dot_htfmax(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_FresnelPhysicalIph_SolarField_m_dot_htfmax_nset, self->data_ptr); +} + +static PyObject * +SolarField_get_m_dot_htfmin(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysicalIph_SolarField_m_dot_htfmin_nget, self->data_ptr); +} + +static int +SolarField_set_m_dot_htfmin(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_FresnelPhysicalIph_SolarField_m_dot_htfmin_nset, self->data_ptr); +} + +static PyObject * +SolarField_get_use_abs_or_rel_mdot_limit(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysicalIph_SolarField_use_abs_or_rel_mdot_limit_nget, self->data_ptr); +} + +static int +SolarField_set_use_abs_or_rel_mdot_limit(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_FresnelPhysicalIph_SolarField_use_abs_or_rel_mdot_limit_nset, self->data_ptr); +} + +static PyGetSetDef SolarField_getset[] = { +{"f_htfmax", (getter)SolarField_get_f_htfmax,(setter)SolarField_set_f_htfmax, + PyDoc_STR("*float*: Maximum loop mass flow rate fraction of design\n\n**Required:**\nRequired if use_abs_or_rel_mdot_limit=1"), + NULL}, +{"f_htfmin", (getter)SolarField_get_f_htfmin,(setter)SolarField_set_f_htfmin, + PyDoc_STR("*float*: Minimum loop mass flow rate fraction of design\n\n**Required:**\nRequired if use_abs_or_rel_mdot_limit=1"), + NULL}, +{"m_dot_htfmax", (getter)SolarField_get_m_dot_htfmax,(setter)SolarField_set_m_dot_htfmax, + PyDoc_STR("*float*: Maximum loop HTF flow rate [kg/s]\n\n**Required:**\nRequired if use_abs_or_rel_mdot_limit=0"), + NULL}, +{"m_dot_htfmin", (getter)SolarField_get_m_dot_htfmin,(setter)SolarField_set_m_dot_htfmin, + PyDoc_STR("*float*: Minimum loop HTF flow rate [kg/s]\n\n**Required:**\nRequired if use_abs_or_rel_mdot_limit=0"), + NULL}, +{"use_abs_or_rel_mdot_limit", (getter)SolarField_get_use_abs_or_rel_mdot_limit,(setter)SolarField_set_use_abs_or_rel_mdot_limit, + PyDoc_STR("*float*: Use mass flow abs (0) or relative (1) limits\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject SolarField_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyVarObject_HEAD_INIT(NULL, 0) + "FresnelPhysicalIph.SolarField", /*tp_name*/ + sizeof(VarGroupObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistofnset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + SolarField_methods, /*tp_methods*/ + 0, /*tp_members*/ + SolarField_getset, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictofnset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ +}; + + /* * ColRec Group */ @@ -4950,6 +5117,18 @@ Outputs_get_eta_optical_des_SS(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_FresnelPhysicalIph_Outputs_eta_optical_des_SS_nget, self->data_ptr); } +static PyObject * +Outputs_get_f_htfmax_actual(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysicalIph_Outputs_f_htfmax_actual_nget, self->data_ptr); +} + +static PyObject * +Outputs_get_f_htfmin_actual(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysicalIph_Outputs_f_htfmin_actual_nget, self->data_ptr); +} + static PyObject * Outputs_get_field_area(VarGroupObject *self, void *closure) { @@ -5100,6 +5279,18 @@ Outputs_get_m_dot_htf_heat_sink(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_FresnelPhysicalIph_Outputs_m_dot_htf_heat_sink_aget, self->data_ptr); } +static PyObject * +Outputs_get_m_dot_htfmax_actual(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysicalIph_Outputs_m_dot_htfmax_actual_nget, self->data_ptr); +} + +static PyObject * +Outputs_get_m_dot_htfmin_actual(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_FresnelPhysicalIph_Outputs_m_dot_htfmin_actual_nget, self->data_ptr); +} + static PyObject * Outputs_get_m_dot_loop(VarGroupObject *self, void *closure) { @@ -5914,6 +6105,12 @@ static PyGetSetDef Outputs_getset[] = { {"eta_optical_des_SS", (getter)Outputs_get_eta_optical_des_SS,(setter)0, PyDoc_STR("*float*: Steady State optical efficiency"), NULL}, +{"f_htfmax_actual", (getter)Outputs_get_f_htfmax_actual,(setter)0, + PyDoc_STR("*float*: Actual maximum loop mass flow rate fraction of design"), + NULL}, +{"f_htfmin_actual", (getter)Outputs_get_f_htfmin_actual,(setter)0, + PyDoc_STR("*float*: Actual minimum loop mass flow rate fraction of design"), + NULL}, {"field_area", (getter)Outputs_get_field_area,(setter)0, PyDoc_STR("*float*: Solar field area [acres]"), NULL}, @@ -5989,6 +6186,12 @@ static PyGetSetDef Outputs_getset[] = { {"m_dot_htf_heat_sink", (getter)Outputs_get_m_dot_htf_heat_sink,(setter)0, PyDoc_STR("*sequence*: Heat sink HTF mass flow [kg/s]"), NULL}, +{"m_dot_htfmax_actual", (getter)Outputs_get_m_dot_htfmax_actual,(setter)0, + PyDoc_STR("*float*: Actual maximum loop HTF flow rate [kg/s]"), + NULL}, +{"m_dot_htfmin_actual", (getter)Outputs_get_m_dot_htfmin_actual,(setter)0, + PyDoc_STR("*float*: Actual minimum loop HTF flow rate [kg/s]"), + NULL}, {"m_dot_loop", (getter)Outputs_get_m_dot_loop,(setter)0, PyDoc_STR("*sequence*: Receiver mass flow rate [kg/s]"), NULL}, @@ -6332,6 +6535,10 @@ newFresnelPhysicalIphObject(void* data_ptr) PyDict_SetItemString(attr_dict, "SolarField", SolarField_obj); Py_DECREF(SolarField_obj); + PyObject* SolarField_obj = SolarField_new(self->data_ptr); + PyDict_SetItemString(attr_dict, "SolarField", SolarField_obj); + Py_DECREF(SolarField_obj); + PyObject* ColRec_obj = ColRec_new(self->data_ptr); PyDict_SetItemString(attr_dict, "ColRec", ColRec_obj); Py_DECREF(ColRec_obj); @@ -6706,6 +6913,13 @@ FresnelPhysicalIphModule_exec(PyObject *m) (PyObject*)&SolarField_Type); Py_DECREF(&SolarField_Type); + /// Add the SolarField type object to FresnelPhysicalIph_Type + if (PyType_Ready(&SolarField_Type) < 0) { goto fail; } + PyDict_SetItemString(FresnelPhysicalIph_Type.tp_dict, + "SolarField", + (PyObject*)&SolarField_Type); + Py_DECREF(&SolarField_Type); + /// Add the ColRec type object to FresnelPhysicalIph_Type if (PyType_Ready(&ColRec_Type) < 0) { goto fail; } PyDict_SetItemString(FresnelPhysicalIph_Type.tp_dict, diff --git a/modules/GenericSystem.c b/modules/GenericSystem.c index d586c3f..1441183 100644 --- a/modules/GenericSystem.c +++ b/modules/GenericSystem.c @@ -899,6 +899,18 @@ Outputs_get_monthly_energy(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_GenericSystem_Outputs_monthly_energy_aget, self->data_ptr); } +static PyObject * +Outputs_get_output_file(VarGroupObject *self, void *closure) +{ + return PySAM_string_getter(SAM_GenericSystem_Outputs_output_file_sget, self->data_ptr); +} + +static PyObject * +Outputs_get_sim_cpu_run_time(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_GenericSystem_Outputs_sim_cpu_run_time_nget, self->data_ptr); +} + static PyObject * Outputs_get_system_heat_rate(VarGroupObject *self, void *closure) { @@ -960,6 +972,12 @@ static PyGetSetDef Outputs_getset[] = { {"monthly_energy", (getter)Outputs_get_monthly_energy,(setter)0, PyDoc_STR("*sequence*: Monthly Energy Gross [kWh]"), NULL}, +{"output_file", (getter)Outputs_get_output_file,(setter)0, + PyDoc_STR("*str*: Output filepath [s]"), + NULL}, +{"sim_cpu_run_time", (getter)Outputs_get_sim_cpu_run_time,(setter)0, + PyDoc_STR("*float*: Simulation duration clock time [s]"), + NULL}, {"system_heat_rate", (getter)Outputs_get_system_heat_rate,(setter)0, PyDoc_STR("*float*: Heat Rate Conversion Factor [MMBTUs/MWhe]"), NULL}, diff --git a/modules/Hybrid.c b/modules/Hybrid.c index 1680f0e..65f6636 100644 --- a/modules/Hybrid.c +++ b/modules/Hybrid.c @@ -91,7 +91,7 @@ Common_set_input(VarGroupObject *self, PyObject *value, void *closure) static PyGetSetDef Common_getset[] = { {"input", (getter)Common_get_input,(setter)Common_set_input, - PyDoc_STR("*dict*: input_table for multiple technologies and one financial market\n\n**Required:**\nTrue"), + PyDoc_STR("*dict*: input_table for multiple technologies and one financial market\n\n**Info:**\npvsamv1,pvwattsv8,windpower,generic_system,battery,fuelcell,hybrid\n\n**Required:**\nTrue"), NULL}, {NULL} /* Sentinel */ }; diff --git a/modules/Pvsamv1.c b/modules/Pvsamv1.c index 366b79d..81d7d08 100644 --- a/modules/Pvsamv1.c +++ b/modules/Pvsamv1.c @@ -17510,10 +17510,10 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence*: Array POA front-side beam radiation nominal [kW]"), NULL}, {"poa_eff", (getter)Outputs_get_poa_eff,(setter)0, - PyDoc_STR("*sequence*: Array POA radiation total after reflection (IAM) [kW]"), + PyDoc_STR("*sequence*: Array POA radiation total after shading soiling reflection (IAM) [kW]"), NULL}, {"poa_front", (getter)Outputs_get_poa_front,(setter)0, - PyDoc_STR("*sequence*: Array POA front-side total radiation after reflection (IAM) [kW]"), + PyDoc_STR("*sequence*: Array POA front-side total radiation after shading soiling reflection (IAM) [kW]"), NULL}, {"poa_nom", (getter)Outputs_get_poa_nom,(setter)0, PyDoc_STR("*sequence*: Array POA front-side total radiation nominal [kW]"), @@ -17540,10 +17540,10 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence*: Array POA rear-side radiation blocked by rear soiling [kW]"), NULL}, {"poa_shaded", (getter)Outputs_get_poa_shaded,(setter)0, - PyDoc_STR("*sequence*: Array POA front-side total radiation after shading only [kW]"), + PyDoc_STR("*sequence*: Array POA front-side total radiation after shading [kW]"), NULL}, {"poa_shaded_soiled", (getter)Outputs_get_poa_shaded_soiled,(setter)0, - PyDoc_STR("*sequence*: Array POA front-side total radiation after shading and soiling [kW]"), + PyDoc_STR("*sequence*: Array POA front-side total radiation after shading soiling [kW]"), NULL}, {"resilience_hrs", (getter)Outputs_get_resilience_hrs,(setter)0, PyDoc_STR("*sequence*: Hours of autonomy during grid outage at each timestep [hr]"), @@ -17648,7 +17648,7 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence*: Subarray 1 diffuse POA clearsky irradiance [W/m2]"), NULL}, {"subarray1_poa_eff", (getter)Outputs_get_subarray1_poa_eff,(setter)0, - PyDoc_STR("*sequence*: Subarray 1 POA total irradiance after reflection (IAM) [W/m2]"), + PyDoc_STR("*sequence*: Subarray 1 POA total irradiance after shading soiling reflection (IAM) [W/m2]"), NULL}, {"subarray1_poa_eff_beam", (getter)Outputs_get_subarray1_poa_eff_beam,(setter)0, PyDoc_STR("*sequence*: Subarray 1 POA front beam irradiance after shading and soiling [W/m2]"), @@ -17657,7 +17657,7 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence*: Subarray 1 POA front diffuse irradiance after shading and soiling [W/m2]"), NULL}, {"subarray1_poa_front", (getter)Outputs_get_subarray1_poa_front,(setter)0, - PyDoc_STR("*sequence*: Subarray 1 POA front total irradiance after reflection (IAM) [W/m2]"), + PyDoc_STR("*sequence*: Subarray 1 POA front total irradiance after shading soiling reflection (IAM) [W/m2]"), NULL}, {"subarray1_poa_ground_front_cs", (getter)Outputs_get_subarray1_poa_ground_front_cs,(setter)0, PyDoc_STR("*sequence*: Subarray 1 ground reflected POA clearsky irradiance [W/m2]"), @@ -17675,10 +17675,10 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence[sequence]*: Subarray 1 POA spatial rear total irradiance after reflection (IAM) [W/m2]"), NULL}, {"subarray1_poa_shaded", (getter)Outputs_get_subarray1_poa_shaded,(setter)0, - PyDoc_STR("*sequence*: Subarray 1 POA front total irradiance after shading only [W/m2]"), + PyDoc_STR("*sequence*: Subarray 1 POA front total irradiance after shading [W/m2]"), NULL}, {"subarray1_poa_shaded_soiled", (getter)Outputs_get_subarray1_poa_shaded_soiled,(setter)0, - PyDoc_STR("*sequence*: Subarray 1 POA front total irradiance after shading and soiling [W/m2]"), + PyDoc_STR("*sequence*: Subarray 1 POA front total irradiance after shading soiling [W/m2]"), NULL}, {"subarray1_snow_coverage", (getter)Outputs_get_subarray1_snow_coverage,(setter)0, PyDoc_STR("*sequence*: Subarray 1 Snow cover [0..1]"), @@ -17756,7 +17756,7 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence*: Subarray 2 diffuse POA clearsky irradiance [W/m2]"), NULL}, {"subarray2_poa_eff", (getter)Outputs_get_subarray2_poa_eff,(setter)0, - PyDoc_STR("*sequence*: Subarray 2 POA total irradiance after module reflection (IAM) [W/m2]"), + PyDoc_STR("*sequence*: Subarray 2 POA total irradiance after shading soiling reflection (IAM) [W/m2]"), NULL}, {"subarray2_poa_eff_beam", (getter)Outputs_get_subarray2_poa_eff_beam,(setter)0, PyDoc_STR("*sequence*: Subarray 2 POA front beam irradiance after shading and soiling [W/m2]"), @@ -17765,7 +17765,7 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence*: Subarray 2 POA front diffuse irradiance after shading and soiling [W/m2]"), NULL}, {"subarray2_poa_front", (getter)Outputs_get_subarray2_poa_front,(setter)0, - PyDoc_STR("*sequence*: Subarray 2 POA front total irradiance after reflection (IAM) [W/m2]"), + PyDoc_STR("*sequence*: Subarray 2 POA front total irradiance after shading soiling reflection (IAM) [W/m2]"), NULL}, {"subarray2_poa_ground_front_cs", (getter)Outputs_get_subarray2_poa_ground_front_cs,(setter)0, PyDoc_STR("*sequence*: Subarray 2 ground reflected POA clearsky irradiance [W/m2]"), @@ -17783,10 +17783,10 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence[sequence]*: Subarray 2 POA spatial rear total irradiance after reflection (IAM) [W/m2]"), NULL}, {"subarray2_poa_shaded", (getter)Outputs_get_subarray2_poa_shaded,(setter)0, - PyDoc_STR("*sequence*: Subarray 2 POA front total irradiance after shading only [W/m2]"), + PyDoc_STR("*sequence*: Subarray 2 POA front total irradiance after shading [W/m2]"), NULL}, {"subarray2_poa_shaded_soiled", (getter)Outputs_get_subarray2_poa_shaded_soiled,(setter)0, - PyDoc_STR("*sequence*: Subarray 2 POA front total irradiance after shading and soiling [W/m2]"), + PyDoc_STR("*sequence*: Subarray 2 POA front total irradiance after shading soiling [W/m2]"), NULL}, {"subarray2_snow_coverage", (getter)Outputs_get_subarray2_snow_coverage,(setter)0, PyDoc_STR("*sequence*: Subarray 2 Snow cover [0..1]"), @@ -17864,7 +17864,7 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence*: Subarray 3 diffuse POA clearsky irradiance [W/m2]"), NULL}, {"subarray3_poa_eff", (getter)Outputs_get_subarray3_poa_eff,(setter)0, - PyDoc_STR("*sequence*: Subarray 3 POA total irradiance after reflection (IAM) [W/m2]"), + PyDoc_STR("*sequence*: Subarray 3 POA total irradiance after shading soiling reflection (IAM) [W/m2]"), NULL}, {"subarray3_poa_eff_beam", (getter)Outputs_get_subarray3_poa_eff_beam,(setter)0, PyDoc_STR("*sequence*: Subarray 3 POA front beam irradiance after shading and soiling [W/m2]"), @@ -17873,7 +17873,7 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence*: Subarray 3 POA front diffuse irradiance after shading and soiling [W/m2]"), NULL}, {"subarray3_poa_front", (getter)Outputs_get_subarray3_poa_front,(setter)0, - PyDoc_STR("*sequence*: Subarray 3 POA front total irradiance after reflection (IAM) [W/m2]"), + PyDoc_STR("*sequence*: Subarray 3 POA front total irradiance after shading soiling reflection (IAM) [W/m2]"), NULL}, {"subarray3_poa_ground_front_cs", (getter)Outputs_get_subarray3_poa_ground_front_cs,(setter)0, PyDoc_STR("*sequence*: Subarray 3 ground reflected POA clearsky irradiance [W/m2]"), @@ -17891,10 +17891,10 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence[sequence]*: Subarray 3 POA spatial rear total irradiance after reflection (IAM) [W/m2]"), NULL}, {"subarray3_poa_shaded", (getter)Outputs_get_subarray3_poa_shaded,(setter)0, - PyDoc_STR("*sequence*: Subarray 3 POA front total irradiance after shading only [W/m2]"), + PyDoc_STR("*sequence*: Subarray 3 POA front total irradiance after shading [W/m2]"), NULL}, {"subarray3_poa_shaded_soiled", (getter)Outputs_get_subarray3_poa_shaded_soiled,(setter)0, - PyDoc_STR("*sequence*: Subarray 3 POA front total irradiance after shading and soiling [W/m2]"), + PyDoc_STR("*sequence*: Subarray 3 POA front total irradiance after shading soiling [W/m2]"), NULL}, {"subarray3_snow_coverage", (getter)Outputs_get_subarray3_snow_coverage,(setter)0, PyDoc_STR("*sequence*: Subarray 3 Snow cover [0..1]"), @@ -17972,7 +17972,7 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence*: Subarray 4 diffuse POA clearsky irradiance [W/m2]"), NULL}, {"subarray4_poa_eff", (getter)Outputs_get_subarray4_poa_eff,(setter)0, - PyDoc_STR("*sequence*: Subarray 4 POA total irradiance after reflection (IAM) [W/m2]"), + PyDoc_STR("*sequence*: Subarray 4 POA total irradiance after shading soiling reflection (IAM) [W/m2]"), NULL}, {"subarray4_poa_eff_beam", (getter)Outputs_get_subarray4_poa_eff_beam,(setter)0, PyDoc_STR("*sequence*: Subarray 4 POA front beam irradiance after shading and soiling [W/m2]"), @@ -17981,7 +17981,7 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence*: Subarray 4 POA front diffuse irradiance after shading and soiling [W/m2]"), NULL}, {"subarray4_poa_front", (getter)Outputs_get_subarray4_poa_front,(setter)0, - PyDoc_STR("*sequence*: Subarray 4 POA front total irradiance after reflection (IAM) [W/m2]"), + PyDoc_STR("*sequence*: Subarray 4 POA front total irradiance after shading soiling reflection (IAM) [W/m2]"), NULL}, {"subarray4_poa_ground_front_cs", (getter)Outputs_get_subarray4_poa_ground_front_cs,(setter)0, PyDoc_STR("*sequence*: Subarray 4 ground reflected POA clearsky irradiance [W/m2]"), @@ -17999,10 +17999,10 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence[sequence]*: Subarray 4 POA spatial rear total irradiance after reflection (IAM) [W/m2]"), NULL}, {"subarray4_poa_shaded", (getter)Outputs_get_subarray4_poa_shaded,(setter)0, - PyDoc_STR("*sequence*: Subarray 4 POA front total irradiance after shading only [W/m2]"), + PyDoc_STR("*sequence*: Subarray 4 POA front total irradiance after shading [W/m2]"), NULL}, {"subarray4_poa_shaded_soiled", (getter)Outputs_get_subarray4_poa_shaded_soiled,(setter)0, - PyDoc_STR("*sequence*: Subarray 4 POA front total irradiance after shading and soiling [W/m2]"), + PyDoc_STR("*sequence*: Subarray 4 POA front total irradiance after shading soiling [W/m2]"), NULL}, {"subarray4_snow_coverage", (getter)Outputs_get_subarray4_snow_coverage,(setter)0, PyDoc_STR("*sequence*: Subarray 4 Snow cover [0..1]"), diff --git a/modules/Solarpilot.c b/modules/Solarpilot.c index ca5a424..e0633ac 100644 --- a/modules/Solarpilot.c +++ b/modules/Solarpilot.c @@ -796,7 +796,7 @@ static PyGetSetDef SolarPILOT_getset[] = { PyDoc_STR("*float*: Contingency for cost overrun [%]\n\n**Required:**\nTrue"), NULL}, {"cost_sf_fixed", (getter)SolarPILOT_get_cost_sf_fixed,(setter)SolarPILOT_set_cost_sf_fixed, - PyDoc_STR("*float*: Soalr field fixed cost [$]\n\n**Required:**\nTrue"), + PyDoc_STR("*float*: Solar field fixed cost [$]\n\n**Required:**\nTrue"), NULL}, {"csp_pt_sf_fixed_land_area", (getter)SolarPILOT_get_csp_pt_sf_fixed_land_area,(setter)SolarPILOT_set_csp_pt_sf_fixed_land_area, PyDoc_STR("*float*: Fixed land area [acre]\n\n**Required:**\nTrue"), diff --git a/modules/TcsmoltenSalt.c b/modules/TcsmoltenSalt.c index e80cc76..54bda76 100644 --- a/modules/TcsmoltenSalt.c +++ b/modules/TcsmoltenSalt.c @@ -241,6 +241,30 @@ SystemControl_set_F_wc(VarGroupObject *self, PyObject *value, void *closure) return PySAM_array_setter(value, SAM_TcsmoltenSalt_SystemControl_F_wc_aset, self->data_ptr); } +static PyObject * +SystemControl_get_T_tank_cold_init(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TcsmoltenSalt_SystemControl_T_tank_cold_init_nget, self->data_ptr); +} + +static int +SystemControl_set_T_tank_cold_init(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_T_tank_cold_init_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_T_tank_hot_init(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TcsmoltenSalt_SystemControl_T_tank_hot_init_nget, self->data_ptr); +} + +static int +SystemControl_set_T_tank_hot_init(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_T_tank_hot_init_nset, self->data_ptr); +} + static PyObject * SystemControl_get_ampl_data_dir(VarGroupObject *self, void *closure) { @@ -590,39 +614,27 @@ SystemControl_set_disp_timeout(VarGroupObject *self, PyObject *value, void *clos } static PyObject * -SystemControl_get_disp_wlim_maxspec(VarGroupObject *self, void *closure) +SystemControl_get_f_turb_tou_periods(VarGroupObject *self, void *closure) { - return PySAM_double_getter(SAM_TcsmoltenSalt_SystemControl_disp_wlim_maxspec_nget, self->data_ptr); + return PySAM_array_getter(SAM_TcsmoltenSalt_SystemControl_f_turb_tou_periods_aget, self->data_ptr); } static int -SystemControl_set_disp_wlim_maxspec(VarGroupObject *self, PyObject *value, void *closure) +SystemControl_set_f_turb_tou_periods(VarGroupObject *self, PyObject *value, void *closure) { - return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_disp_wlim_maxspec_nset, self->data_ptr); + return PySAM_array_setter(value, SAM_TcsmoltenSalt_SystemControl_f_turb_tou_periods_aset, self->data_ptr); } static PyObject * -SystemControl_get_dispatch_series(VarGroupObject *self, void *closure) +SystemControl_get_is_PAR_HTR_allowed_in(VarGroupObject *self, void *closure) { - return PySAM_array_getter(SAM_TcsmoltenSalt_SystemControl_dispatch_series_aget, self->data_ptr); + return PySAM_array_getter(SAM_TcsmoltenSalt_SystemControl_is_PAR_HTR_allowed_in_aget, self->data_ptr); } static int -SystemControl_set_dispatch_series(VarGroupObject *self, PyObject *value, void *closure) +SystemControl_set_is_PAR_HTR_allowed_in(VarGroupObject *self, PyObject *value, void *closure) { - return PySAM_array_setter(value, SAM_TcsmoltenSalt_SystemControl_dispatch_series_aset, self->data_ptr); -} - -static PyObject * -SystemControl_get_f_turb_tou_periods(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TcsmoltenSalt_SystemControl_f_turb_tou_periods_aget, self->data_ptr); -} - -static int -SystemControl_set_f_turb_tou_periods(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TcsmoltenSalt_SystemControl_f_turb_tou_periods_aset, self->data_ptr); + return PySAM_array_setter(value, SAM_TcsmoltenSalt_SystemControl_is_PAR_HTR_allowed_in_aset, self->data_ptr); } static PyObject * @@ -650,15 +662,27 @@ SystemControl_set_is_dispatch(VarGroupObject *self, PyObject *value, void *closu } static PyObject * -SystemControl_get_is_dispatch_series(VarGroupObject *self, void *closure) +SystemControl_get_is_dispatch_targets(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TcsmoltenSalt_SystemControl_is_dispatch_targets_nget, self->data_ptr); +} + +static int +SystemControl_set_is_dispatch_targets(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_is_dispatch_targets_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_is_field_tracking_init(VarGroupObject *self, void *closure) { - return PySAM_double_getter(SAM_TcsmoltenSalt_SystemControl_is_dispatch_series_nget, self->data_ptr); + return PySAM_double_getter(SAM_TcsmoltenSalt_SystemControl_is_field_tracking_init_nget, self->data_ptr); } static int -SystemControl_set_is_dispatch_series(VarGroupObject *self, PyObject *value, void *closure) +SystemControl_set_is_field_tracking_init(VarGroupObject *self, PyObject *value, void *closure) { - return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_is_dispatch_series_nset, self->data_ptr); + return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_is_field_tracking_init_nset, self->data_ptr); } static PyObject * @@ -674,39 +698,51 @@ SystemControl_set_is_parallel_htr(VarGroupObject *self, PyObject *value, void *c } static PyObject * -SystemControl_get_is_tod_pc_target_also_pc_max(VarGroupObject *self, void *closure) +SystemControl_get_is_pc_sb_allowed_in(VarGroupObject *self, void *closure) { - return PySAM_double_getter(SAM_TcsmoltenSalt_SystemControl_is_tod_pc_target_also_pc_max_nget, self->data_ptr); + return PySAM_array_getter(SAM_TcsmoltenSalt_SystemControl_is_pc_sb_allowed_in_aget, self->data_ptr); } static int -SystemControl_set_is_tod_pc_target_also_pc_max(VarGroupObject *self, PyObject *value, void *closure) +SystemControl_set_is_pc_sb_allowed_in(VarGroupObject *self, PyObject *value, void *closure) { - return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_is_tod_pc_target_also_pc_max_nset, self->data_ptr); + return PySAM_array_setter(value, SAM_TcsmoltenSalt_SystemControl_is_pc_sb_allowed_in_aset, self->data_ptr); } static PyObject * -SystemControl_get_is_wlim_design(VarGroupObject *self, void *closure) +SystemControl_get_is_pc_su_allowed_in(VarGroupObject *self, void *closure) { - return PySAM_double_getter(SAM_TcsmoltenSalt_SystemControl_is_wlim_design_nget, self->data_ptr); + return PySAM_array_getter(SAM_TcsmoltenSalt_SystemControl_is_pc_su_allowed_in_aget, self->data_ptr); } static int -SystemControl_set_is_wlim_design(VarGroupObject *self, PyObject *value, void *closure) +SystemControl_set_is_pc_su_allowed_in(VarGroupObject *self, PyObject *value, void *closure) { - return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_is_wlim_design_nset, self->data_ptr); + return PySAM_array_setter(value, SAM_TcsmoltenSalt_SystemControl_is_pc_su_allowed_in_aset, self->data_ptr); } static PyObject * -SystemControl_get_is_wlim_series(VarGroupObject *self, void *closure) +SystemControl_get_is_rec_su_allowed_in(VarGroupObject *self, void *closure) { - return PySAM_double_getter(SAM_TcsmoltenSalt_SystemControl_is_wlim_series_nget, self->data_ptr); + return PySAM_array_getter(SAM_TcsmoltenSalt_SystemControl_is_rec_su_allowed_in_aget, self->data_ptr); } static int -SystemControl_set_is_wlim_series(VarGroupObject *self, PyObject *value, void *closure) +SystemControl_set_is_rec_su_allowed_in(VarGroupObject *self, PyObject *value, void *closure) { - return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_is_wlim_series_nset, self->data_ptr); + return PySAM_array_setter(value, SAM_TcsmoltenSalt_SystemControl_is_rec_su_allowed_in_aset, self->data_ptr); +} + +static PyObject * +SystemControl_get_is_tod_pc_target_also_pc_max(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TcsmoltenSalt_SystemControl_is_tod_pc_target_also_pc_max_nget, self->data_ptr); +} + +static int +SystemControl_set_is_tod_pc_target_also_pc_max(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_is_tod_pc_target_also_pc_max_nset, self->data_ptr); } static PyObject * @@ -733,6 +769,90 @@ SystemControl_set_pb_fixed_par(VarGroupObject *self, PyObject *value, void *clos return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_pb_fixed_par_nset, self->data_ptr); } +static PyObject * +SystemControl_get_pc_op_mode_initial(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TcsmoltenSalt_SystemControl_pc_op_mode_initial_nget, self->data_ptr); +} + +static int +SystemControl_set_pc_op_mode_initial(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_pc_op_mode_initial_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_pc_startup_energy_remain_initial(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TcsmoltenSalt_SystemControl_pc_startup_energy_remain_initial_nget, self->data_ptr); +} + +static int +SystemControl_set_pc_startup_energy_remain_initial(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_pc_startup_energy_remain_initial_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_pc_startup_time_remain_init(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TcsmoltenSalt_SystemControl_pc_startup_time_remain_init_nget, self->data_ptr); +} + +static int +SystemControl_set_pc_startup_time_remain_init(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_pc_startup_time_remain_init_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_q_dot_elec_to_PAR_HTR_in(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TcsmoltenSalt_SystemControl_q_dot_elec_to_PAR_HTR_in_aget, self->data_ptr); +} + +static int +SystemControl_set_q_dot_elec_to_PAR_HTR_in(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_TcsmoltenSalt_SystemControl_q_dot_elec_to_PAR_HTR_in_aset, self->data_ptr); +} + +static PyObject * +SystemControl_get_q_pc_max_in(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TcsmoltenSalt_SystemControl_q_pc_max_in_aget, self->data_ptr); +} + +static int +SystemControl_set_q_pc_max_in(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_TcsmoltenSalt_SystemControl_q_pc_max_in_aset, self->data_ptr); +} + +static PyObject * +SystemControl_get_q_pc_target_on_in(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TcsmoltenSalt_SystemControl_q_pc_target_on_in_aget, self->data_ptr); +} + +static int +SystemControl_set_q_pc_target_on_in(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_TcsmoltenSalt_SystemControl_q_pc_target_on_in_aset, self->data_ptr); +} + +static PyObject * +SystemControl_get_q_pc_target_su_in(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TcsmoltenSalt_SystemControl_q_pc_target_su_in_aget, self->data_ptr); +} + +static int +SystemControl_set_q_pc_target_su_in(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_TcsmoltenSalt_SystemControl_q_pc_target_su_in_aset, self->data_ptr); +} + static PyObject * SystemControl_get_q_rec_heattrace(VarGroupObject *self, void *closure) { @@ -757,6 +877,42 @@ SystemControl_set_q_rec_standby(VarGroupObject *self, PyObject *value, void *clo return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_q_rec_standby_nset, self->data_ptr); } +static PyObject * +SystemControl_get_rec_op_mode_initial(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TcsmoltenSalt_SystemControl_rec_op_mode_initial_nget, self->data_ptr); +} + +static int +SystemControl_set_rec_op_mode_initial(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_rec_op_mode_initial_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_rec_startup_energy_remain_init(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TcsmoltenSalt_SystemControl_rec_startup_energy_remain_init_nget, self->data_ptr); +} + +static int +SystemControl_set_rec_startup_energy_remain_init(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_rec_startup_energy_remain_init_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_rec_startup_time_remain_init(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TcsmoltenSalt_SystemControl_rec_startup_time_remain_init_nget, self->data_ptr); +} + +static int +SystemControl_set_rec_startup_time_remain_init(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TcsmoltenSalt_SystemControl_rec_startup_time_remain_init_nset, self->data_ptr); +} + static PyObject * SystemControl_get_sim_type(VarGroupObject *self, void *closure) { @@ -853,22 +1009,16 @@ SystemControl_set_weekend_schedule(VarGroupObject *self, PyObject *value, void * return PySAM_matrix_setter(value, SAM_TcsmoltenSalt_SystemControl_weekend_schedule_mset, self->data_ptr); } -static PyObject * -SystemControl_get_wlim_series(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TcsmoltenSalt_SystemControl_wlim_series_aget, self->data_ptr); -} - -static int -SystemControl_set_wlim_series(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TcsmoltenSalt_SystemControl_wlim_series_aset, self->data_ptr); -} - static PyGetSetDef SystemControl_getset[] = { {"F_wc", (getter)SystemControl_get_F_wc,(setter)SystemControl_set_F_wc, PyDoc_STR("*sequence*: TOU array of fractions indicating wet cooling share for hybrid cooling\n\n**Required:**\nRequired if pc_config=0"), NULL}, +{"T_tank_cold_init", (getter)SystemControl_get_T_tank_cold_init,(setter)SystemControl_set_T_tank_cold_init, + PyDoc_STR("*float*: Initial cold tank temp [C]"), + NULL}, +{"T_tank_hot_init", (getter)SystemControl_get_T_tank_hot_init,(setter)SystemControl_set_T_tank_hot_init, + PyDoc_STR("*float*: Initial hot tank temp [C]"), + NULL}, {"ampl_data_dir", (getter)SystemControl_get_ampl_data_dir,(setter)SystemControl_set_ampl_data_dir, PyDoc_STR("*str*: AMPL data file directory\n\n**Required:**\nFalse. Automatically set to '' if not assigned explicitly or loaded from defaults."), NULL}, @@ -942,7 +1092,7 @@ static PyGetSetDef SystemControl_getset[] = { PyDoc_STR("*float*: Dispatch optimization B&B heuristic\n\n**Required:**\nFalse. Automatically set to -1 if not assigned explicitly or loaded from defaults."), NULL}, {"disp_spec_presolve", (getter)SystemControl_get_disp_spec_presolve,(setter)SystemControl_set_disp_spec_presolve, - PyDoc_STR("*float*: Dispatch optimization presolve heuristic\n\n**Required:**\nFalse. Automatically set to -1 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Dispatch optimization pre-solve heuristic\n\n**Required:**\nFalse. Automatically set to -1 if not assigned explicitly or loaded from defaults."), NULL}, {"disp_spec_scaling", (getter)SystemControl_get_disp_spec_scaling,(setter)SystemControl_set_disp_spec_scaling, PyDoc_STR("*float*: Dispatch optimization scaling heuristic\n\n**Required:**\nFalse. Automatically set to -1 if not assigned explicitly or loaded from defaults."), @@ -956,35 +1106,38 @@ static PyGetSetDef SystemControl_getset[] = { {"disp_timeout", (getter)SystemControl_get_disp_timeout,(setter)SystemControl_set_disp_timeout, PyDoc_STR("*float*: Max dispatch optimization solve duration [s]\n\n**Required:**\nRequired if is_dispatch=1"), NULL}, -{"disp_wlim_maxspec", (getter)SystemControl_get_disp_wlim_maxspec,(setter)SystemControl_set_disp_wlim_maxspec, - PyDoc_STR("*float*: Fixed design-point max net power to the grid (dispatch opt only)\n\n**Required:**\nRequired if is_wlim_design=1"), - NULL}, -{"dispatch_series", (getter)SystemControl_get_dispatch_series,(setter)SystemControl_set_dispatch_series, - PyDoc_STR("*sequence*: Time series dispatch factors"), - NULL}, {"f_turb_tou_periods", (getter)SystemControl_get_f_turb_tou_periods,(setter)SystemControl_set_f_turb_tou_periods, PyDoc_STR("*sequence*: Dispatch logic for turbine load fraction\n\n**Required:**\nTrue"), NULL}, +{"is_PAR_HTR_allowed_in", (getter)SystemControl_get_is_PAR_HTR_allowed_in,(setter)SystemControl_set_is_PAR_HTR_allowed_in, + PyDoc_STR("*sequence*: User-provided is electrical heater operation allowed? [-]\n\n**Required:**\nRequired if is_dispatch_targets=1&is_parallel_htr=1"), + NULL}, {"is_ampl_engine", (getter)SystemControl_get_is_ampl_engine,(setter)SystemControl_set_is_ampl_engine, PyDoc_STR("*float*: Run dispatch optimization with external AMPL engine\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"is_dispatch", (getter)SystemControl_get_is_dispatch,(setter)SystemControl_set_is_dispatch, PyDoc_STR("*float*: Allow dispatch optimization?\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, -{"is_dispatch_series", (getter)SystemControl_get_is_dispatch_series,(setter)SystemControl_set_is_dispatch_series, - PyDoc_STR("*float*: Use time-series dispatch factors\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), +{"is_dispatch_targets", (getter)SystemControl_get_is_dispatch_targets,(setter)SystemControl_set_is_dispatch_targets, + PyDoc_STR("*float*: Run solution from user-specified dispatch targets? [-]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"is_field_tracking_init", (getter)SystemControl_get_is_field_tracking_init,(setter)SystemControl_set_is_field_tracking_init, + PyDoc_STR("*float*: Is heliostat field tracking? (1 = true) [-]"), NULL}, {"is_parallel_htr", (getter)SystemControl_get_is_parallel_htr,(setter)SystemControl_set_is_parallel_htr, PyDoc_STR("*float*: Does plant include a HTF heater parallel to solar field?\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, -{"is_tod_pc_target_also_pc_max", (getter)SystemControl_get_is_tod_pc_target_also_pc_max,(setter)SystemControl_set_is_tod_pc_target_also_pc_max, - PyDoc_STR("*float*: Is the TOD target cycle heat input also the max cycle heat input?\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), +{"is_pc_sb_allowed_in", (getter)SystemControl_get_is_pc_sb_allowed_in,(setter)SystemControl_set_is_pc_sb_allowed_in, + PyDoc_STR("*sequence*: User-provided is power cycle standby allowed? [-]\n\n**Required:**\nRequired if is_dispatch_targets=1"), NULL}, -{"is_wlim_design", (getter)SystemControl_get_is_wlim_design,(setter)SystemControl_set_is_wlim_design, - PyDoc_STR("*float*: Use fixed design-point net electricity generation limits (dispatch opt only)\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), +{"is_pc_su_allowed_in", (getter)SystemControl_get_is_pc_su_allowed_in,(setter)SystemControl_set_is_pc_su_allowed_in, + PyDoc_STR("*sequence*: User-provided is power cycle startup allowed? [-]\n\n**Required:**\nRequired if is_dispatch_targets=1"), NULL}, -{"is_wlim_series", (getter)SystemControl_get_is_wlim_series,(setter)SystemControl_set_is_wlim_series, - PyDoc_STR("*float*: Use time-series net electricity generation limits (dispatch opt only)\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), +{"is_rec_su_allowed_in", (getter)SystemControl_get_is_rec_su_allowed_in,(setter)SystemControl_set_is_rec_su_allowed_in, + PyDoc_STR("*sequence*: User-provided is receiver startup allowed? [-]\n\n**Required:**\nRequired if is_dispatch_targets=1"), + NULL}, +{"is_tod_pc_target_also_pc_max", (getter)SystemControl_get_is_tod_pc_target_also_pc_max,(setter)SystemControl_set_is_tod_pc_target_also_pc_max, + PyDoc_STR("*float*: Is the TOD target cycle heat input also the max cycle heat input?\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"is_write_ampl_dat", (getter)SystemControl_get_is_write_ampl_dat,(setter)SystemControl_set_is_write_ampl_dat, PyDoc_STR("*float*: Write AMPL data files for dispatch run\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), @@ -992,12 +1145,42 @@ static PyGetSetDef SystemControl_getset[] = { {"pb_fixed_par", (getter)SystemControl_get_pb_fixed_par,(setter)SystemControl_set_pb_fixed_par, PyDoc_STR("*float*: Fixed parasitic load - runs at all times [MWe/MWcap]\n\n**Required:**\nTrue"), NULL}, +{"pc_op_mode_initial", (getter)SystemControl_get_pc_op_mode_initial,(setter)SystemControl_set_pc_op_mode_initial, + PyDoc_STR("*float*: Initial cycle operation mode 0:startup, 1:on, 2:standby, 3:off, 4:startup_controlled [-]"), + NULL}, +{"pc_startup_energy_remain_initial", (getter)SystemControl_get_pc_startup_energy_remain_initial,(setter)SystemControl_set_pc_startup_energy_remain_initial, + PyDoc_STR("*float*: Initial cycle startup energy remaining [kwh]"), + NULL}, +{"pc_startup_time_remain_init", (getter)SystemControl_get_pc_startup_time_remain_init,(setter)SystemControl_set_pc_startup_time_remain_init, + PyDoc_STR("*float*: Initial cycle startup time remaining [hr]"), + NULL}, +{"q_dot_elec_to_PAR_HTR_in", (getter)SystemControl_get_q_dot_elec_to_PAR_HTR_in,(setter)SystemControl_set_q_dot_elec_to_PAR_HTR_in, + PyDoc_STR("*sequence*: User-provided electrical power to parallel heater [-]\n\n**Required:**\nRequired if is_dispatch_targets=1&is_parallel_htr=1"), + NULL}, +{"q_pc_max_in", (getter)SystemControl_get_q_pc_max_in,(setter)SystemControl_set_q_pc_max_in, + PyDoc_STR("*sequence*: User-provided max thermal power to PC [MWt]\n\n**Required:**\nRequired if is_dispatch_targets=1"), + NULL}, +{"q_pc_target_on_in", (getter)SystemControl_get_q_pc_target_on_in,(setter)SystemControl_set_q_pc_target_on_in, + PyDoc_STR("*sequence*: User-provided target thermal power to PC [MWt]\n\n**Required:**\nRequired if is_dispatch_targets=1"), + NULL}, +{"q_pc_target_su_in", (getter)SystemControl_get_q_pc_target_su_in,(setter)SystemControl_set_q_pc_target_su_in, + PyDoc_STR("*sequence*: User-provided target thermal power to PC [MWt]\n\n**Required:**\nRequired if is_dispatch_targets=1"), + NULL}, {"q_rec_heattrace", (getter)SystemControl_get_q_rec_heattrace,(setter)SystemControl_set_q_rec_heattrace, PyDoc_STR("*float*: Receiver heat trace energy consumption during startup [kWe-hr]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"q_rec_standby", (getter)SystemControl_get_q_rec_standby,(setter)SystemControl_set_q_rec_standby, PyDoc_STR("*float*: Receiver standby energy consumption [kWt]\n\n**Required:**\nFalse. Automatically set to 9e99 if not assigned explicitly or loaded from defaults."), NULL}, +{"rec_op_mode_initial", (getter)SystemControl_get_rec_op_mode_initial,(setter)SystemControl_set_rec_op_mode_initial, + PyDoc_STR("*float*: Initial receiver operating mode 0: off, 1: startup, 2: on [-]"), + NULL}, +{"rec_startup_energy_remain_init", (getter)SystemControl_get_rec_startup_energy_remain_init,(setter)SystemControl_set_rec_startup_energy_remain_init, + PyDoc_STR("*float*: Initial receiver startup energy remaining [W-hr]"), + NULL}, +{"rec_startup_time_remain_init", (getter)SystemControl_get_rec_startup_time_remain_init,(setter)SystemControl_set_rec_startup_time_remain_init, + PyDoc_STR("*float*: Initial receiver startup time remaining [hr]"), + NULL}, {"sim_type", (getter)SystemControl_get_sim_type,(setter)SystemControl_set_sim_type, PyDoc_STR("*float*: 1 (default): timeseries, 2: design only\n\n**Required:**\nFalse. Automatically set to 1 if not assigned explicitly or loaded from defaults."), NULL}, @@ -1022,9 +1205,6 @@ static PyGetSetDef SystemControl_getset[] = { {"weekend_schedule", (getter)SystemControl_get_weekend_schedule,(setter)SystemControl_set_weekend_schedule, PyDoc_STR("*sequence[sequence]*: 12x24 CSP operation Time-of-Use Weekend schedule\n\n**Required:**\nTrue"), NULL}, -{"wlim_series", (getter)SystemControl_get_wlim_series,(setter)SystemControl_set_wlim_series, - PyDoc_STR("*sequence*: Time series net electicity generation limits (dispatch opt only) [kWe]\n\n**Required:**\nRequired if is_wlim_series=1"), - NULL}, {NULL} /* Sentinel */ }; @@ -2310,7 +2490,7 @@ static PyGetSetDef TowerAndReceiver_getset[] = { PyDoc_STR("*float*: Piping length multiplier\n\n**Required:**\nTrue"), NULL}, {"piping_loss_coefficient", (getter)TowerAndReceiver_get_piping_loss_coefficient,(setter)TowerAndReceiver_set_piping_loss_coefficient, - PyDoc_STR("*float*: Thermal loss per meter of piping [Wt/m2-K]"), + PyDoc_STR("*float*: Thermal loss per meter of piping [Wt/m2-K]\n\n**Required:**\nTrue"), NULL}, {"preheat_flux", (getter)TowerAndReceiver_get_preheat_flux,(setter)TowerAndReceiver_set_preheat_flux, PyDoc_STR("*float*: Tube absorbed solar flux during preheat [kW/m2]\n\n**Required:**\nFalse. Automatically set to 50.0 if not assigned explicitly or loaded from defaults."), @@ -4094,7 +4274,7 @@ static PyGetSetDef ThermalStorage_getset[] = { PyDoc_STR("*float*: Tanks are in parallel, not in series, with solar field [-]\n\n**Required:**\nTrue"), NULL}, {"tes_init_hot_htf_percent", (getter)ThermalStorage_get_tes_init_hot_htf_percent,(setter)ThermalStorage_set_tes_init_hot_htf_percent, - PyDoc_STR("*float*: Initial fraction of available volume that is hot [%]"), + PyDoc_STR("*float*: Initial fraction of available volume that is hot [%]\n\n**Required:**\nTrue"), NULL}, {"u_tank", (getter)ThermalStorage_get_u_tank,(setter)ThermalStorage_set_u_tank, PyDoc_STR("*float*: Loss coefficient from the tank [W/m2-K]\n\n**Required:**\nTrue"), @@ -4636,13 +4816,13 @@ static PyGetSetDef RADCOOL_getset[] = { PyDoc_STR("*float*: Effectiveness of HX between radiative field and cold storage [-]\n\n**Required:**\nFalse. Automatically set to .8 if not assigned explicitly or loaded from defaults."), NULL}, {"epsilon_radbot", (getter)RADCOOL_get_epsilon_radbot,(setter)RADCOOL_set_epsilon_radbot, - PyDoc_STR("*float*: Emmissivity of top of radiator panel bottom (facing ground) [-]\n\n**Required:**\nFalse. Automatically set to .07 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Emissivity of top of radiator panel bottom (facing ground) [-]\n\n**Required:**\nFalse. Automatically set to .07 if not assigned explicitly or loaded from defaults."), NULL}, {"epsilon_radgrnd", (getter)RADCOOL_get_epsilon_radgrnd,(setter)RADCOOL_set_epsilon_radgrnd, - PyDoc_STR("*float*: Emmissivity of ground underneath radiator panel [-]\n\n**Required:**\nFalse. Automatically set to .90 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Emissivity of ground underneath radiator panel [-]\n\n**Required:**\nFalse. Automatically set to .90 if not assigned explicitly or loaded from defaults."), NULL}, {"epsilon_radtop", (getter)RADCOOL_get_epsilon_radtop,(setter)RADCOOL_set_epsilon_radtop, - PyDoc_STR("*float*: Emmissivity of top of radiator panel [-]\n\n**Required:**\nFalse. Automatically set to .95 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Emissivity of top of radiator panel [-]\n\n**Required:**\nFalse. Automatically set to .95 if not assigned explicitly or loaded from defaults."), NULL}, {"f_ctes_warm_ini", (getter)RADCOOL_get_f_ctes_warm_ini,(setter)RADCOOL_set_f_ctes_warm_ini, PyDoc_STR("*float*: Initial fraction of avail. volume that is warm [-]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), @@ -4663,7 +4843,7 @@ static PyGetSetDef RADCOOL_getset[] = { PyDoc_STR("*float*: Number of parallel tubes in single radiator panel [-]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"rad_multiplier", (getter)RADCOOL_get_rad_multiplier,(setter)RADCOOL_set_rad_multiplier, - PyDoc_STR("*float*: Ratio of radiator field area to solar aperature area [-]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Ratio of radiator field area to solar aperture area [-]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"rad_pressuredrop", (getter)RADCOOL_get_rad_pressuredrop,(setter)RADCOOL_set_rad_pressuredrop, PyDoc_STR("*float*: Average pressure drop through a radiative panel & distribution [kPa]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), @@ -5156,7 +5336,7 @@ RankineCycle_set_tech_type(VarGroupObject *self, PyObject *value, void *closure) static PyGetSetDef RankineCycle_getset[] = { {"CT", (getter)RankineCycle_get_CT,(setter)RankineCycle_set_CT, - PyDoc_STR("*float*: Condensor type: 1=evaporative, 2=air, 3=hybrid\n\n**Required:**\nRequired if pc_config=0"), + PyDoc_STR("*float*: Condenser type: 1=evaporative, 2=air, 3=hybrid\n\n**Required:**\nRequired if pc_config=0"), NULL}, {"P_cond_min", (getter)RankineCycle_get_P_cond_min,(setter)RankineCycle_set_P_cond_min, PyDoc_STR("*float*: Minimum condenser pressure [inHg]\n\n**Required:**\nRequired if pc_config=0"), @@ -5380,7 +5560,7 @@ static PyGetSetDef UserDefinedPowerCycle_getset[] = { PyDoc_STR("*float*: Mass flow rate of water required at user-defined power cycle design point [kg/s]\n\n**Required:**\nRequired if pc_config=1"), NULL}, {"use_net_cycle_output_as_capacity", (getter)UserDefinedPowerCycle_get_use_net_cycle_output_as_capacity,(setter)UserDefinedPowerCycle_set_use_net_cycle_output_as_capacity, - PyDoc_STR("*float*: False: default, use net calculation including system parasitics, True: for UDPC only, set as cycle output less cooling power\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: False: default, use net calculation including system parasitic, True: for UDPC only, set as cycle output less cooling power\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {NULL} /* Sentinel */ }; @@ -7537,6 +7717,18 @@ Outputs_get_csp_pt_cost_tower(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_TcsmoltenSalt_Outputs_csp_pt_cost_tower_nget, self->data_ptr); } +static PyObject * +Outputs_get_cycle_Tdb_table(VarGroupObject *self, void *closure) +{ + return PySAM_matrix_getter(SAM_TcsmoltenSalt_Outputs_cycle_Tdb_table_mget, self->data_ptr); +} + +static PyObject * +Outputs_get_cycle_eff_load_table(VarGroupObject *self, void *closure) +{ + return PySAM_matrix_getter(SAM_TcsmoltenSalt_Outputs_cycle_eff_load_table_mget, self->data_ptr); +} + static PyObject * Outputs_get_cycle_htf_pump_power(VarGroupObject *self, void *closure) { @@ -7813,12 +8005,24 @@ Outputs_get_hot_hours_revenue_fraction(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_TcsmoltenSalt_Outputs_hot_hours_revenue_fraction_nget, self->data_ptr); } +static PyObject * +Outputs_get_hot_tank_htf_percent_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TcsmoltenSalt_Outputs_hot_tank_htf_percent_final_aget, self->data_ptr); +} + static PyObject * Outputs_get_is_PAR_HTR_allowed(VarGroupObject *self, void *closure) { return PySAM_array_getter(SAM_TcsmoltenSalt_Outputs_is_PAR_HTR_allowed_aget, self->data_ptr); } +static PyObject * +Outputs_get_is_field_tracking_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TcsmoltenSalt_Outputs_is_field_tracking_final_aget, self->data_ptr); +} + static PyObject * Outputs_get_is_pc_sb_allowed(VarGroupObject *self, void *closure) { @@ -8065,6 +8269,24 @@ Outputs_get_operating_modes_c(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_TcsmoltenSalt_Outputs_operating_modes_c_aget, self->data_ptr); } +static PyObject * +Outputs_get_pc_op_mode_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TcsmoltenSalt_Outputs_pc_op_mode_final_aget, self->data_ptr); +} + +static PyObject * +Outputs_get_pc_startup_energy_remain_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TcsmoltenSalt_Outputs_pc_startup_energy_remain_final_aget, self->data_ptr); +} + +static PyObject * +Outputs_get_pc_startup_time_remain_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TcsmoltenSalt_Outputs_pc_startup_time_remain_final_aget, self->data_ptr); +} + static PyObject * Outputs_get_pparasi(VarGroupObject *self, void *closure) { @@ -8269,6 +8491,24 @@ Outputs_get_rec_height_calc(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_TcsmoltenSalt_Outputs_rec_height_calc_nget, self->data_ptr); } +static PyObject * +Outputs_get_rec_op_mode_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TcsmoltenSalt_Outputs_rec_op_mode_final_aget, self->data_ptr); +} + +static PyObject * +Outputs_get_rec_startup_energy_remain_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TcsmoltenSalt_Outputs_rec_startup_energy_remain_final_aget, self->data_ptr); +} + +static PyObject * +Outputs_get_rec_startup_time_remain_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TcsmoltenSalt_Outputs_rec_startup_time_remain_final_aget, self->data_ptr); +} + static PyObject * Outputs_get_refl_image_error(VarGroupObject *self, void *closure) { @@ -8442,10 +8682,10 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*float*: Number of heliostats - out"), NULL}, {"P_cond", (getter)Outputs_get_P_cond,(setter)0, - PyDoc_STR("*sequence*: PC condensing presssure [Pa]"), + PyDoc_STR("*sequence*: PC condensing pressure [Pa]"), NULL}, {"P_cond_iter_err", (getter)Outputs_get_P_cond_iter_err,(setter)0, - PyDoc_STR("*sequence*: PC condenser presure iteration error"), + PyDoc_STR("*sequence*: PC condenser pressure iteration error"), NULL}, {"P_cooling_tower_tot", (getter)Outputs_get_P_cooling_tower_tot,(setter)0, PyDoc_STR("*sequence*: Parasitic power condenser operation [MWe]"), @@ -8565,7 +8805,7 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*float*: TES total HTF volume [m3]"), NULL}, {"W_dot_bop_design", (getter)Outputs_get_W_dot_bop_design,(setter)0, - PyDoc_STR("*float*: BOP parasitics at design [MWe]"), + PyDoc_STR("*float*: BOP parasitic at design [MWe]"), NULL}, {"W_dot_col_tracking_des", (getter)Outputs_get_W_dot_col_tracking_des,(setter)0, PyDoc_STR("*float*: Collector tracking power at design [MWe]"), @@ -8610,7 +8850,7 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*float*: Annual tower pumping power [MWe-hr]"), NULL}, {"annual_W_cooling_tower", (getter)Outputs_get_annual_W_cooling_tower,(setter)0, - PyDoc_STR("*float*: Total of condenser operation parasitics [kWhe]"), + PyDoc_STR("*float*: Total of condenser operation parasitic [kWhe]"), NULL}, {"annual_W_cycle_gross", (getter)Outputs_get_annual_W_cycle_gross,(setter)0, PyDoc_STR("*float*: Electrical source - power cycle gross output [kWhe]"), @@ -8801,6 +9041,12 @@ static PyGetSetDef Outputs_getset[] = { {"csp_pt_cost_tower", (getter)Outputs_get_csp_pt_cost_tower,(setter)0, PyDoc_STR("*float*: Tower cost [$]"), NULL}, +{"cycle_Tdb_table", (getter)Outputs_get_cycle_Tdb_table,(setter)0, + PyDoc_STR("*sequence[sequence]*: Normalized cycle efficiency and condenser power vs. ambient temperature"), + NULL}, +{"cycle_eff_load_table", (getter)Outputs_get_cycle_eff_load_table,(setter)0, + PyDoc_STR("*sequence[sequence]*: Cycle efficiency vs. thermal load"), + NULL}, {"cycle_htf_pump_power", (getter)Outputs_get_cycle_htf_pump_power,(setter)0, PyDoc_STR("*sequence*: Cycle HTF pump power [MWe]"), NULL}, @@ -8850,7 +9096,7 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence*: Dispatch expected solar field generation [MWt]"), NULL}, {"disp_qsfsu_expected", (getter)Outputs_get_disp_qsfsu_expected,(setter)0, - PyDoc_STR("*sequence*: Dispatch expected solar field startup enegy [MWt]"), + PyDoc_STR("*sequence*: Dispatch expected solar field startup energy [MWt]"), NULL}, {"disp_rel_mip_gap", (getter)Outputs_get_disp_rel_mip_gap,(setter)0, PyDoc_STR("*sequence*: Dispatch relative MIP gap"), @@ -8939,9 +9185,15 @@ static PyGetSetDef Outputs_getset[] = { {"hot_hours_revenue_fraction", (getter)Outputs_get_hot_hours_revenue_fraction,(setter)0, PyDoc_STR("*float*: Fraction of potential revenue (based on system capacity) earned during hours hotter than 33 C [-]"), NULL}, +{"hot_tank_htf_percent_final", (getter)Outputs_get_hot_tank_htf_percent_final,(setter)0, + PyDoc_STR("*sequence*: Final percent fill of available hot tank mass [%]"), + NULL}, {"is_PAR_HTR_allowed", (getter)Outputs_get_is_PAR_HTR_allowed,(setter)0, PyDoc_STR("*sequence*: Is parallel electric heater operation allowed"), NULL}, +{"is_field_tracking_final", (getter)Outputs_get_is_field_tracking_final,(setter)0, + PyDoc_STR("*sequence*: Final heliostat field operation is tracking? (1 = true) [-]"), + NULL}, {"is_pc_sb_allowed", (getter)Outputs_get_is_pc_sb_allowed,(setter)0, PyDoc_STR("*sequence*: Is power cycle standby allowed"), NULL}, @@ -9065,6 +9317,15 @@ static PyGetSetDef Outputs_getset[] = { {"operating_modes_c", (getter)Outputs_get_operating_modes_c,(setter)0, PyDoc_STR("*sequence*: Final 3 operating modes tried"), NULL}, +{"pc_op_mode_final", (getter)Outputs_get_pc_op_mode_final,(setter)0, + PyDoc_STR("*sequence*: Final cycle operation mode 0:startup, 1:on, 2:standby, 3:off, 4:startup_controlled [-]"), + NULL}, +{"pc_startup_energy_remain_final", (getter)Outputs_get_pc_startup_energy_remain_final,(setter)0, + PyDoc_STR("*sequence*: Final cycle startup energy remaining [kwh]"), + NULL}, +{"pc_startup_time_remain_final", (getter)Outputs_get_pc_startup_time_remain_final,(setter)0, + PyDoc_STR("*sequence*: Final cycle startup time remaining [hr]"), + NULL}, {"pparasi", (getter)Outputs_get_pparasi,(setter)0, PyDoc_STR("*sequence*: Field tracking power [MWe]"), NULL}, @@ -9167,6 +9428,15 @@ static PyGetSetDef Outputs_getset[] = { {"rec_height_calc", (getter)Outputs_get_rec_height_calc,(setter)0, PyDoc_STR("*float*: Receiver height - out [m]"), NULL}, +{"rec_op_mode_final", (getter)Outputs_get_rec_op_mode_final,(setter)0, + PyDoc_STR("*sequence*: Final receiver operating mode 0: off, 1: startup, 2: on [-]"), + NULL}, +{"rec_startup_energy_remain_final", (getter)Outputs_get_rec_startup_energy_remain_final,(setter)0, + PyDoc_STR("*sequence*: Final receiver startup energy remaining [W-hr]"), + NULL}, +{"rec_startup_time_remain_final", (getter)Outputs_get_rec_startup_time_remain_final,(setter)0, + PyDoc_STR("*sequence*: Final receiver startup time remaining [hr]"), + NULL}, {"refl_image_error", (getter)Outputs_get_refl_image_error,(setter)0, PyDoc_STR("*float*: Reflected image error [mrad]"), NULL}, @@ -9234,7 +9504,7 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence*: Resource wet Bulb temperature [C]"), NULL}, {"ui_direct_subtotal", (getter)Outputs_get_ui_direct_subtotal,(setter)0, - PyDoc_STR("*float*: Direct capital precontingency cost [$]"), + PyDoc_STR("*float*: Direct capital pre-contingency cost [$]"), NULL}, {"vel_rec_htf_des", (getter)Outputs_get_vel_rec_htf_des,(setter)0, PyDoc_STR("*float*: Receiver estimated tube HTF velocity at design [m/s]"), diff --git a/modules/TroughPhysical.c b/modules/TroughPhysical.c index 5b75e44..bb757d6 100644 --- a/modules/TroughPhysical.c +++ b/modules/TroughPhysical.c @@ -77,6 +77,78 @@ static PyMethodDef SystemControl_methods[] = { {NULL, NULL} /* sentinel */ }; +static PyObject * +SystemControl_get_T_in_loop_initial(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SystemControl_T_in_loop_initial_nget, self->data_ptr); +} + +static int +SystemControl_set_T_in_loop_initial(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SystemControl_T_in_loop_initial_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_T_out_loop_initial(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SystemControl_T_out_loop_initial_nget, self->data_ptr); +} + +static int +SystemControl_set_T_out_loop_initial(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SystemControl_T_out_loop_initial_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_T_out_scas_initial(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysical_SystemControl_T_out_scas_initial_aget, self->data_ptr); +} + +static int +SystemControl_set_T_out_scas_initial(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_TroughPhysical_SystemControl_T_out_scas_initial_aset, self->data_ptr); +} + +static PyObject * +SystemControl_get_T_tank_cold_init(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SystemControl_T_tank_cold_init_nget, self->data_ptr); +} + +static int +SystemControl_set_T_tank_cold_init(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SystemControl_T_tank_cold_init_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_T_tank_hot_init(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SystemControl_T_tank_hot_init_nget, self->data_ptr); +} + +static int +SystemControl_set_T_tank_hot_init(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SystemControl_T_tank_hot_init_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_defocus_initial(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SystemControl_defocus_initial_nget, self->data_ptr); +} + +static int +SystemControl_set_defocus_initial(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SystemControl_defocus_initial_nset, self->data_ptr); +} + static PyObject * SystemControl_get_disp_csu_cost(VarGroupObject *self, void *closure) { @@ -113,6 +185,138 @@ SystemControl_set_disp_rsu_cost(VarGroupObject *self, PyObject *value, void *clo return PySAM_double_setter(value, SAM_TroughPhysical_SystemControl_disp_rsu_cost_nset, self->data_ptr); } +static PyObject * +SystemControl_get_is_dispatch_targets(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SystemControl_is_dispatch_targets_nget, self->data_ptr); +} + +static int +SystemControl_set_is_dispatch_targets(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SystemControl_is_dispatch_targets_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_is_pc_sb_allowed_in(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysical_SystemControl_is_pc_sb_allowed_in_aget, self->data_ptr); +} + +static int +SystemControl_set_is_pc_sb_allowed_in(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_TroughPhysical_SystemControl_is_pc_sb_allowed_in_aset, self->data_ptr); +} + +static PyObject * +SystemControl_get_is_pc_su_allowed_in(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysical_SystemControl_is_pc_su_allowed_in_aget, self->data_ptr); +} + +static int +SystemControl_set_is_pc_su_allowed_in(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_TroughPhysical_SystemControl_is_pc_su_allowed_in_aset, self->data_ptr); +} + +static PyObject * +SystemControl_get_is_rec_su_allowed_in(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysical_SystemControl_is_rec_su_allowed_in_aget, self->data_ptr); +} + +static int +SystemControl_set_is_rec_su_allowed_in(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_TroughPhysical_SystemControl_is_rec_su_allowed_in_aset, self->data_ptr); +} + +static PyObject * +SystemControl_get_pc_op_mode_initial(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SystemControl_pc_op_mode_initial_nget, self->data_ptr); +} + +static int +SystemControl_set_pc_op_mode_initial(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SystemControl_pc_op_mode_initial_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_pc_startup_energy_remain_initial(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SystemControl_pc_startup_energy_remain_initial_nget, self->data_ptr); +} + +static int +SystemControl_set_pc_startup_energy_remain_initial(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SystemControl_pc_startup_energy_remain_initial_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_pc_startup_time_remain_init(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SystemControl_pc_startup_time_remain_init_nget, self->data_ptr); +} + +static int +SystemControl_set_pc_startup_time_remain_init(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SystemControl_pc_startup_time_remain_init_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_q_pc_max_in(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysical_SystemControl_q_pc_max_in_aget, self->data_ptr); +} + +static int +SystemControl_set_q_pc_max_in(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_TroughPhysical_SystemControl_q_pc_max_in_aset, self->data_ptr); +} + +static PyObject * +SystemControl_get_q_pc_target_on_in(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysical_SystemControl_q_pc_target_on_in_aget, self->data_ptr); +} + +static int +SystemControl_set_q_pc_target_on_in(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_TroughPhysical_SystemControl_q_pc_target_on_in_aset, self->data_ptr); +} + +static PyObject * +SystemControl_get_q_pc_target_su_in(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysical_SystemControl_q_pc_target_su_in_aget, self->data_ptr); +} + +static int +SystemControl_set_q_pc_target_su_in(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_TroughPhysical_SystemControl_q_pc_target_su_in_aset, self->data_ptr); +} + +static PyObject * +SystemControl_get_rec_op_mode_initial(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SystemControl_rec_op_mode_initial_nget, self->data_ptr); +} + +static int +SystemControl_set_rec_op_mode_initial(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SystemControl_rec_op_mode_initial_nset, self->data_ptr); +} + static PyObject * SystemControl_get_sim_type(VarGroupObject *self, void *closure) { @@ -125,7 +329,73 @@ SystemControl_set_sim_type(VarGroupObject *self, PyObject *value, void *closure) return PySAM_double_setter(value, SAM_TroughPhysical_SystemControl_sim_type_nset, self->data_ptr); } +static PyObject * +SystemControl_get_time_start(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SystemControl_time_start_nget, self->data_ptr); +} + +static int +SystemControl_set_time_start(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SystemControl_time_start_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_time_steps_per_hour(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SystemControl_time_steps_per_hour_nget, self->data_ptr); +} + +static int +SystemControl_set_time_steps_per_hour(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SystemControl_time_steps_per_hour_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_time_stop(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SystemControl_time_stop_nget, self->data_ptr); +} + +static int +SystemControl_set_time_stop(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SystemControl_time_stop_nset, self->data_ptr); +} + +static PyObject * +SystemControl_get_vacuum_arrays(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SystemControl_vacuum_arrays_nget, self->data_ptr); +} + +static int +SystemControl_set_vacuum_arrays(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SystemControl_vacuum_arrays_nset, self->data_ptr); +} + static PyGetSetDef SystemControl_getset[] = { +{"T_in_loop_initial", (getter)SystemControl_get_T_in_loop_initial,(setter)SystemControl_set_T_in_loop_initial, + PyDoc_STR("*float*: Initial loop inlet, cold header and cold runner fluid temperature [-]"), + NULL}, +{"T_out_loop_initial", (getter)SystemControl_get_T_out_loop_initial,(setter)SystemControl_set_T_out_loop_initial, + PyDoc_STR("*float*: Initial loop outlet, hot header and hot runner fluid temperature [-]"), + NULL}, +{"T_out_scas_initial", (getter)SystemControl_get_T_out_scas_initial,(setter)SystemControl_set_T_out_scas_initial, + PyDoc_STR("*sequence*: Initial SCA outlet temperatures [-]"), + NULL}, +{"T_tank_cold_init", (getter)SystemControl_get_T_tank_cold_init,(setter)SystemControl_set_T_tank_cold_init, + PyDoc_STR("*float*: Initial cold tank fluid temperature [C]"), + NULL}, +{"T_tank_hot_init", (getter)SystemControl_get_T_tank_hot_init,(setter)SystemControl_set_T_tank_hot_init, + PyDoc_STR("*float*: Initial hot tank fluid temperate [C]"), + NULL}, +{"defocus_initial", (getter)SystemControl_get_defocus_initial,(setter)SystemControl_set_defocus_initial, + PyDoc_STR("*float*: Initial receiver defocus [-]"), + NULL}, {"disp_csu_cost", (getter)SystemControl_get_disp_csu_cost,(setter)SystemControl_set_disp_csu_cost, PyDoc_STR("*float*: Cycle startup cost [$]"), NULL}, @@ -135,9 +405,54 @@ static PyGetSetDef SystemControl_getset[] = { {"disp_rsu_cost", (getter)SystemControl_get_disp_rsu_cost,(setter)SystemControl_set_disp_rsu_cost, PyDoc_STR("*float*: Receiver startup cost [$]"), NULL}, +{"is_dispatch_targets", (getter)SystemControl_get_is_dispatch_targets,(setter)SystemControl_set_is_dispatch_targets, + PyDoc_STR("*float*: Run solution from user-specified dispatch targets? [-]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"is_pc_sb_allowed_in", (getter)SystemControl_get_is_pc_sb_allowed_in,(setter)SystemControl_set_is_pc_sb_allowed_in, + PyDoc_STR("*sequence*: User-provided is power cycle standby allowed? [-]\n\n**Required:**\nRequired if is_dispatch_targets=1"), + NULL}, +{"is_pc_su_allowed_in", (getter)SystemControl_get_is_pc_su_allowed_in,(setter)SystemControl_set_is_pc_su_allowed_in, + PyDoc_STR("*sequence*: User-provided is power cycle startup allowed? [-]\n\n**Required:**\nRequired if is_dispatch_targets=1"), + NULL}, +{"is_rec_su_allowed_in", (getter)SystemControl_get_is_rec_su_allowed_in,(setter)SystemControl_set_is_rec_su_allowed_in, + PyDoc_STR("*sequence*: User-provided is receiver startup allowed? [-]\n\n**Required:**\nRequired if is_dispatch_targets=1"), + NULL}, +{"pc_op_mode_initial", (getter)SystemControl_get_pc_op_mode_initial,(setter)SystemControl_set_pc_op_mode_initial, + PyDoc_STR("*float*: Initial cycle operation mode 0:startup, 1:on, 2:standby, 3:off, 4:startup_controlled [-]"), + NULL}, +{"pc_startup_energy_remain_initial", (getter)SystemControl_get_pc_startup_energy_remain_initial,(setter)SystemControl_set_pc_startup_energy_remain_initial, + PyDoc_STR("*float*: Initial cycle startup energy remaining [kwh]"), + NULL}, +{"pc_startup_time_remain_init", (getter)SystemControl_get_pc_startup_time_remain_init,(setter)SystemControl_set_pc_startup_time_remain_init, + PyDoc_STR("*float*: Initial cycle startup time remaining [hr]"), + NULL}, +{"q_pc_max_in", (getter)SystemControl_get_q_pc_max_in,(setter)SystemControl_set_q_pc_max_in, + PyDoc_STR("*sequence*: User-provided max thermal power to PC [MWt]\n\n**Required:**\nRequired if is_dispatch_targets=1"), + NULL}, +{"q_pc_target_on_in", (getter)SystemControl_get_q_pc_target_on_in,(setter)SystemControl_set_q_pc_target_on_in, + PyDoc_STR("*sequence*: User-provided target thermal power to PC [MWt]\n\n**Required:**\nRequired if is_dispatch_targets=1"), + NULL}, +{"q_pc_target_su_in", (getter)SystemControl_get_q_pc_target_su_in,(setter)SystemControl_set_q_pc_target_su_in, + PyDoc_STR("*sequence*: User-provided target thermal power to PC [MWt]\n\n**Required:**\nRequired if is_dispatch_targets=1"), + NULL}, +{"rec_op_mode_initial", (getter)SystemControl_get_rec_op_mode_initial,(setter)SystemControl_set_rec_op_mode_initial, + PyDoc_STR("*float*: Initial receiver operating mode 0: off, 1: startup, 2: on [-]"), + NULL}, {"sim_type", (getter)SystemControl_get_sim_type,(setter)SystemControl_set_sim_type, PyDoc_STR("*float*: 1 (default): timeseries, 2: design only\n\n**Required:**\nFalse. Automatically set to 1 if not assigned explicitly or loaded from defaults."), NULL}, +{"time_start", (getter)SystemControl_get_time_start,(setter)SystemControl_set_time_start, + PyDoc_STR("*float*: Simulation start time [s]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"time_steps_per_hour", (getter)SystemControl_get_time_steps_per_hour,(setter)SystemControl_set_time_steps_per_hour, + PyDoc_STR("*float*: Number of simulation time steps per hour\n\n**Required:**\nFalse. Automatically set to -1 if not assigned explicitly or loaded from defaults."), + NULL}, +{"time_stop", (getter)SystemControl_get_time_stop,(setter)SystemControl_set_time_stop, + PyDoc_STR("*float*: Simulation stop time [s]\n\n**Required:**\nFalse. Automatically set to 31536000 if not assigned explicitly or loaded from defaults."), + NULL}, +{"vacuum_arrays", (getter)SystemControl_get_vacuum_arrays,(setter)SystemControl_set_vacuum_arrays, + PyDoc_STR("*float*: Allocate arrays for only the required number of steps\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, {NULL} /* Sentinel */ }; @@ -1335,6 +1650,30 @@ SolarField_set_eta_pump(VarGroupObject *self, PyObject *value, void *closure) return PySAM_double_setter(value, SAM_TroughPhysical_SolarField_eta_pump_nset, self->data_ptr); } +static PyObject * +SolarField_get_f_htfmax(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SolarField_f_htfmax_nget, self->data_ptr); +} + +static int +SolarField_set_f_htfmax(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SolarField_f_htfmax_nset, self->data_ptr); +} + +static PyObject * +SolarField_get_f_htfmin(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SolarField_f_htfmin_nget, self->data_ptr); +} + +static int +SolarField_set_f_htfmin(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SolarField_f_htfmin_nset, self->data_ptr); +} + static PyObject * SolarField_get_field_fl_props(VarGroupObject *self, void *closure) { @@ -1623,6 +1962,18 @@ SolarField_set_tilt(VarGroupObject *self, PyObject *value, void *closure) return PySAM_double_setter(value, SAM_TroughPhysical_SolarField_tilt_nset, self->data_ptr); } +static PyObject * +SolarField_get_use_abs_or_rel_mdot_limit(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_SolarField_use_abs_or_rel_mdot_limit_nget, self->data_ptr); +} + +static int +SolarField_set_use_abs_or_rel_mdot_limit(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysical_SolarField_use_abs_or_rel_mdot_limit_nset, self->data_ptr); +} + static PyObject * SolarField_get_wind_stow_speed(VarGroupObject *self, void *closure) { @@ -1867,6 +2218,12 @@ static PyGetSetDef SolarField_getset[] = { {"eta_pump", (getter)SolarField_get_eta_pump,(setter)SolarField_set_eta_pump, PyDoc_STR("*float*: HTF pump efficiency [none]\n\n**Required:**\nTrue"), NULL}, +{"f_htfmax", (getter)SolarField_get_f_htfmax,(setter)SolarField_set_f_htfmax, + PyDoc_STR("*float*: Maximum loop mass flow rate fraction of design\n\n**Required:**\nRequired if use_abs_or_rel_mdot_limit=1"), + NULL}, +{"f_htfmin", (getter)SolarField_get_f_htfmin,(setter)SolarField_set_f_htfmin, + PyDoc_STR("*float*: Minimum loop mass flow rate fraction of design\n\n**Required:**\nRequired if use_abs_or_rel_mdot_limit=1"), + NULL}, {"field_fl_props", (getter)SolarField_get_field_fl_props,(setter)SolarField_set_field_fl_props, PyDoc_STR("*sequence[sequence]*: User defined field fluid property data [-]\n\n**Required:**\nTrue"), NULL}, @@ -1874,10 +2231,10 @@ static PyGetSetDef SolarField_getset[] = { PyDoc_STR("*float*: Should model consider piping through power block? [none]\n\n**Required:**\nTrue"), NULL}, {"m_dot_htfmax", (getter)SolarField_get_m_dot_htfmax,(setter)SolarField_set_m_dot_htfmax, - PyDoc_STR("*float*: Maximum loop HTF flow rate [kg/s]\n\n**Required:**\nTrue"), + PyDoc_STR("*float*: Maximum loop HTF flow rate [kg/s]\n\n**Required:**\nRequired if use_abs_or_rel_mdot_limit=0"), NULL}, {"m_dot_htfmin", (getter)SolarField_get_m_dot_htfmin,(setter)SolarField_set_m_dot_htfmin, - PyDoc_STR("*float*: Minimum loop HTF flow rate [kg/s]\n\n**Required:**\nTrue"), + PyDoc_STR("*float*: Minimum loop HTF flow rate [kg/s]\n\n**Required:**\nRequired if use_abs_or_rel_mdot_limit=0"), NULL}, {"mc_bal_cold", (getter)SolarField_get_mc_bal_cold,(setter)SolarField_set_mc_bal_cold, PyDoc_STR("*float*: Heat capacity of the balance of plant on the cold side [kWht/K-MWt]\n\n**Required:**\nTrue"), @@ -1939,6 +2296,9 @@ static PyGetSetDef SolarField_getset[] = { {"tilt", (getter)SolarField_get_tilt,(setter)SolarField_set_tilt, PyDoc_STR("*float*: Tilt angle of surface/axis [none]\n\n**Required:**\nTrue"), NULL}, +{"use_abs_or_rel_mdot_limit", (getter)SolarField_get_use_abs_or_rel_mdot_limit,(setter)SolarField_set_use_abs_or_rel_mdot_limit, + PyDoc_STR("*float*: Use mass flow abs (0) or relative (1) limits\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, {"wind_stow_speed", (getter)SolarField_get_wind_stow_speed,(setter)SolarField_set_wind_stow_speed, PyDoc_STR("*float*: Trough wind stow speed [m/s]\n\n**Required:**\nFalse. Automatically set to 50 if not assigned explicitly or loaded from defaults."), NULL}, @@ -3129,18 +3489,6 @@ Tou_set_dispatch_sched_weekend(VarGroupObject *self, PyObject *value, void *clos return PySAM_matrix_setter(value, SAM_TroughPhysical_Tou_dispatch_sched_weekend_mset, self->data_ptr); } -static PyObject * -Tou_get_dispatch_series(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysical_Tou_dispatch_series_aget, self->data_ptr); -} - -static int -Tou_set_dispatch_series(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysical_Tou_dispatch_series_aset, self->data_ptr); -} - static PyObject * Tou_get_f_turb_tou_periods(VarGroupObject *self, void *closure) { @@ -3177,18 +3525,6 @@ Tou_set_is_dispatch(VarGroupObject *self, PyObject *value, void *closure) return PySAM_double_setter(value, SAM_TroughPhysical_Tou_is_dispatch_nset, self->data_ptr); } -static PyObject * -Tou_get_is_dispatch_series(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysical_Tou_is_dispatch_series_nget, self->data_ptr); -} - -static int -Tou_set_is_dispatch_series(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysical_Tou_is_dispatch_series_nset, self->data_ptr); -} - static PyObject * Tou_get_is_tod_pc_target_also_pc_max(VarGroupObject *self, void *closure) { @@ -3349,9 +3685,6 @@ static PyGetSetDef Tou_getset[] = { {"dispatch_sched_weekend", (getter)Tou_get_dispatch_sched_weekend,(setter)Tou_set_dispatch_sched_weekend, PyDoc_STR("*sequence[sequence]*: 12x24 PPA pricing Weekend schedule\n\n**Required:**\nRequired if sim_type=1&ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1"), NULL}, -{"dispatch_series", (getter)Tou_get_dispatch_series,(setter)Tou_set_dispatch_series, - PyDoc_STR("*sequence*: Time series dispatch factors"), - NULL}, {"f_turb_tou_periods", (getter)Tou_get_f_turb_tou_periods,(setter)Tou_set_f_turb_tou_periods, PyDoc_STR("*sequence*: Dispatch logic for turbine load fraction [-]\n\n**Required:**\nTrue"), NULL}, @@ -3361,9 +3694,6 @@ static PyGetSetDef Tou_getset[] = { {"is_dispatch", (getter)Tou_get_is_dispatch,(setter)Tou_set_is_dispatch, PyDoc_STR("*float*: Allow dispatch optimization? [-]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, -{"is_dispatch_series", (getter)Tou_get_is_dispatch_series,(setter)Tou_set_is_dispatch_series, - PyDoc_STR("*float*: Use time-series dispatch factors\n\n**Required:**\nFalse. Automatically set to 1 if not assigned explicitly or loaded from defaults."), - NULL}, {"is_tod_pc_target_also_pc_max", (getter)Tou_get_is_tod_pc_target_also_pc_max,(setter)Tou_set_is_tod_pc_target_also_pc_max, PyDoc_STR("*float*: Is the TOD target cycle heat input also the max cycle heat input?\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, @@ -4481,18 +4811,6 @@ Controller_set_custom_tes_pipe_sizes(VarGroupObject *self, PyObject *value, void return PySAM_double_setter(value, SAM_TroughPhysical_Controller_custom_tes_pipe_sizes_nset, self->data_ptr); } -static PyObject * -Controller_get_disp_wlim_maxspec(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysical_Controller_disp_wlim_maxspec_nget, self->data_ptr); -} - -static int -Controller_set_disp_wlim_maxspec(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysical_Controller_disp_wlim_maxspec_nset, self->data_ptr); -} - static PyObject * Controller_get_has_hot_tank_bypass(VarGroupObject *self, void *closure) { @@ -4653,9 +4971,6 @@ static PyGetSetDef Controller_getset[] = { {"custom_tes_pipe_sizes", (getter)Controller_get_custom_tes_pipe_sizes,(setter)Controller_set_custom_tes_pipe_sizes, PyDoc_STR("*float*: Use custom TES pipe diams, wallthks, and lengths [-]\n\n**Required:**\nTrue"), NULL}, -{"disp_wlim_maxspec", (getter)Controller_get_disp_wlim_maxspec,(setter)Controller_set_disp_wlim_maxspec, - PyDoc_STR("*float*: disp_wlim_maxspec [-]\n\n**Required:**\nTrue"), - NULL}, {"has_hot_tank_bypass", (getter)Controller_get_has_hot_tank_bypass,(setter)Controller_set_has_hot_tank_bypass, PyDoc_STR("*float*: Bypass valve connects field outlet to cold tank [-]\n\n**Required:**\nTrue"), NULL}, @@ -4879,143 +5194,6 @@ static PyTypeObject TowerAndReceiver_Type = { }; -/* - * SolarResourceData Group - */ - -static PyTypeObject SolarResourceData_Type; - -static PyObject * -SolarResourceData_new(SAM_TroughPhysical data_ptr) -{ - PyObject* new_obj = SolarResourceData_Type.tp_alloc(&SolarResourceData_Type,0); - - VarGroupObject* SolarResourceData_obj = (VarGroupObject*)new_obj; - - SolarResourceData_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* SolarResourceData methods */ - -static PyObject * -SolarResourceData_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysical", "SolarResourceData")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -SolarResourceData_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &SolarResourceData_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysical", "SolarResourceData")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -SolarResourceData_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &SolarResourceData_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef SolarResourceData_methods[] = { - {"assign", (PyCFunction)SolarResourceData_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``SolarResourceData_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)SolarResourceData_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``SolarResourceData_vals = { var: val, ...}``")}, - {"export", (PyCFunction)SolarResourceData_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -SolarResourceData_get_lat(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysical_SolarResourceData_lat_nget, self->data_ptr); -} - -static int -SolarResourceData_set_lat(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysical_SolarResourceData_lat_nset, self->data_ptr); -} - -static PyGetSetDef SolarResourceData_getset[] = { -{"lat", (getter)SolarResourceData_get_lat,(setter)SolarResourceData_set_lat, - PyDoc_STR("*float*: Latitude [degree]\n\n**Required:**\nTrue"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject SolarResourceData_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysical.SolarResourceData", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - SolarResourceData_methods, /*tp_methods*/ - 0, /*tp_members*/ - SolarResourceData_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - /* * CapitalCosts Group */ @@ -5587,6 +5765,24 @@ Outputs_get_T_field_hot_out(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_TroughPhysical_Outputs_T_field_hot_out_aget, self->data_ptr); } +static PyObject * +Outputs_get_T_in_loop_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysical_Outputs_T_in_loop_final_aget, self->data_ptr); +} + +static PyObject * +Outputs_get_T_out_loop_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysical_Outputs_T_out_loop_final_aget, self->data_ptr); +} + +static PyObject * +Outputs_get_T_out_scas_last_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysical_Outputs_T_out_scas_last_final_aget, self->data_ptr); +} + static PyObject * Outputs_get_T_pc_in(VarGroupObject *self, void *closure) { @@ -5647,6 +5843,12 @@ Outputs_get_W_dot_field_pump(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_TroughPhysical_Outputs_W_dot_field_pump_aget, self->data_ptr); } +static PyObject * +Outputs_get_W_dot_pump_SS(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_Outputs_W_dot_pump_SS_nget, self->data_ptr); +} + static PyObject * Outputs_get_W_dot_sca_track(VarGroupObject *self, void *closure) { @@ -5893,18 +6095,42 @@ Outputs_get_csp_pt_tes_tank_diameter(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_TroughPhysical_Outputs_csp_pt_tes_tank_diameter_nget, self->data_ptr); } +static PyObject * +Outputs_get_cycle_Tdb_table(VarGroupObject *self, void *closure) +{ + return PySAM_matrix_getter(SAM_TroughPhysical_Outputs_cycle_Tdb_table_mget, self->data_ptr); +} + +static PyObject * +Outputs_get_cycle_eff_load_table(VarGroupObject *self, void *closure) +{ + return PySAM_matrix_getter(SAM_TroughPhysical_Outputs_cycle_eff_load_table_mget, self->data_ptr); +} + static PyObject * Outputs_get_cycle_htf_pump_power(VarGroupObject *self, void *closure) { return PySAM_array_getter(SAM_TroughPhysical_Outputs_cycle_htf_pump_power_aget, self->data_ptr); } +static PyObject * +Outputs_get_dP_sf_SS(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_Outputs_dP_sf_SS_nget, self->data_ptr); +} + static PyObject * Outputs_get_defocus(VarGroupObject *self, void *closure) { return PySAM_array_getter(SAM_TroughPhysical_Outputs_defocus_aget, self->data_ptr); } +static PyObject * +Outputs_get_defocus_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysical_Outputs_defocus_final_aget, self->data_ptr); +} + static PyObject * Outputs_get_deltaP_field(VarGroupObject *self, void *closure) { @@ -6019,12 +6245,6 @@ Outputs_get_disp_thermeff_expected(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_TroughPhysical_Outputs_disp_thermeff_expected_aget, self->data_ptr); } -static PyObject * -Outputs_get_disp_wlim_max(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysical_Outputs_disp_wlim_max_nget, self->data_ptr); -} - static PyObject * Outputs_get_disp_wpb_expected(VarGroupObject *self, void *closure) { @@ -6055,6 +6275,18 @@ Outputs_get_eta(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_TroughPhysical_Outputs_eta_aget, self->data_ptr); } +static PyObject * +Outputs_get_f_htfmax_actual(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_Outputs_f_htfmax_actual_nget, self->data_ptr); +} + +static PyObject * +Outputs_get_f_htfmin_actual(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_Outputs_f_htfmin_actual_nget, self->data_ptr); +} + static PyObject * Outputs_get_field_htf_cp_avg_des(VarGroupObject *self, void *closure) { @@ -6097,6 +6329,12 @@ Outputs_get_gen(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_TroughPhysical_Outputs_gen_aget, self->data_ptr); } +static PyObject * +Outputs_get_hot_tank_htf_percent_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysical_Outputs_hot_tank_htf_percent_final_aget, self->data_ptr); +} + static PyObject * Outputs_get_hour_day(VarGroupObject *self, void *closure) { @@ -6127,12 +6365,6 @@ Outputs_get_is_rec_su_allowed(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_TroughPhysical_Outputs_is_rec_su_allowed_aget, self->data_ptr); } -static PyObject * -Outputs_get_is_wlim_series(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysical_Outputs_is_wlim_series_nget, self->data_ptr); -} - static PyObject * Outputs_get_kwh_per_kw(VarGroupObject *self, void *closure) { @@ -6193,6 +6425,18 @@ Outputs_get_m_dot_htf_cycle_des(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_TroughPhysical_Outputs_m_dot_htf_cycle_des_nget, self->data_ptr); } +static PyObject * +Outputs_get_m_dot_htfmax_actual(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_Outputs_m_dot_htfmax_actual_nget, self->data_ptr); +} + +static PyObject * +Outputs_get_m_dot_htfmin_actual(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_Outputs_m_dot_htfmin_actual_nget, self->data_ptr); +} + static PyObject * Outputs_get_m_dot_loop(VarGroupObject *self, void *closure) { @@ -6247,6 +6491,12 @@ Outputs_get_max_field_flow_velocity(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_TroughPhysical_Outputs_max_field_flow_velocity_nget, self->data_ptr); } +static PyObject * +Outputs_get_max_loop_flow_vel_des(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_Outputs_max_loop_flow_vel_des_nget, self->data_ptr); +} + static PyObject * Outputs_get_min_field_flow_velocity(VarGroupObject *self, void *closure) { @@ -6259,6 +6509,12 @@ Outputs_get_min_inner_diameter(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_TroughPhysical_Outputs_min_inner_diameter_nget, self->data_ptr); } +static PyObject * +Outputs_get_min_loop_flow_vel_des(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_Outputs_min_loop_flow_vel_des_nget, self->data_ptr); +} + static PyObject * Outputs_get_month(VarGroupObject *self, void *closure) { @@ -6331,6 +6587,24 @@ Outputs_get_operating_modes_c(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_TroughPhysical_Outputs_operating_modes_c_aget, self->data_ptr); } +static PyObject * +Outputs_get_pc_op_mode_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysical_Outputs_pc_op_mode_final_aget, self->data_ptr); +} + +static PyObject * +Outputs_get_pc_startup_energy_remain_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysical_Outputs_pc_startup_energy_remain_final_aget, self->data_ptr); +} + +static PyObject * +Outputs_get_pc_startup_time_remain_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysical_Outputs_pc_startup_time_remain_final_aget, self->data_ptr); +} + static PyObject * Outputs_get_pipe_header_P_dsn(VarGroupObject *self, void *closure) { @@ -6649,6 +6923,12 @@ Outputs_get_qinc_costh(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_TroughPhysical_Outputs_qinc_costh_aget, self->data_ptr); } +static PyObject * +Outputs_get_rec_op_mode_final(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysical_Outputs_rec_op_mode_final_aget, self->data_ptr); +} + static PyObject * Outputs_get_recirculating(VarGroupObject *self, void *closure) { @@ -6812,21 +7092,27 @@ Outputs_get_twet(VarGroupObject *self, void *closure) } static PyObject * -Outputs_get_vol_min(VarGroupObject *self, void *closure) +Outputs_get_vel_loop_max(VarGroupObject *self, void *closure) { - return PySAM_double_getter(SAM_TroughPhysical_Outputs_vol_min_nget, self->data_ptr); + return PySAM_array_getter(SAM_TroughPhysical_Outputs_vel_loop_max_aget, self->data_ptr); } static PyObject * -Outputs_get_vol_tank(VarGroupObject *self, void *closure) +Outputs_get_vel_loop_min(VarGroupObject *self, void *closure) { - return PySAM_double_getter(SAM_TroughPhysical_Outputs_vol_tank_nget, self->data_ptr); + return PySAM_array_getter(SAM_TroughPhysical_Outputs_vel_loop_min_aget, self->data_ptr); } static PyObject * -Outputs_get_wlim_series(VarGroupObject *self, void *closure) +Outputs_get_vol_min(VarGroupObject *self, void *closure) { - return PySAM_array_getter(SAM_TroughPhysical_Outputs_wlim_series_aget, self->data_ptr); + return PySAM_double_getter(SAM_TroughPhysical_Outputs_vol_min_nget, self->data_ptr); +} + +static PyObject * +Outputs_get_vol_tank(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_Outputs_vol_tank_nget, self->data_ptr); } static PyObject * @@ -6890,6 +7176,15 @@ static PyGetSetDef Outputs_getset[] = { {"T_field_hot_out", (getter)Outputs_get_T_field_hot_out,(setter)0, PyDoc_STR("*sequence*: Field timestep-averaged outlet temperature [C]"), NULL}, +{"T_in_loop_final", (getter)Outputs_get_T_in_loop_final,(setter)0, + PyDoc_STR("*sequence*: Final loop inlet, cold header and cold runner fluid temperature [-]"), + NULL}, +{"T_out_loop_final", (getter)Outputs_get_T_out_loop_final,(setter)0, + PyDoc_STR("*sequence*: Final loop outlet, hot header and hot runner fluid temperature [-]"), + NULL}, +{"T_out_scas_last_final", (getter)Outputs_get_T_out_scas_last_final,(setter)0, + PyDoc_STR("*sequence*: Final SCA outlet temperatures [-]"), + NULL}, {"T_pc_in", (getter)Outputs_get_T_pc_in,(setter)0, PyDoc_STR("*sequence*: PC HTF inlet temperature [C]"), NULL}, @@ -6920,6 +7215,9 @@ static PyGetSetDef Outputs_getset[] = { {"W_dot_field_pump", (getter)Outputs_get_W_dot_field_pump,(setter)0, PyDoc_STR("*sequence*: Field htf pumping power [MWe]"), NULL}, +{"W_dot_pump_SS", (getter)Outputs_get_W_dot_pump_SS,(setter)0, + PyDoc_STR("*float*: Steady State pumping power [MWe]"), + NULL}, {"W_dot_sca_track", (getter)Outputs_get_W_dot_sca_track,(setter)0, PyDoc_STR("*sequence*: Field collector tracking power [MWe]"), NULL}, @@ -6942,7 +7240,7 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*float*: Total Annual Water Usage [m^3]"), NULL}, {"aux_design", (getter)Outputs_get_aux_design,(setter)0, - PyDoc_STR("*float*: Aux parasitics at design [MWe]"), + PyDoc_STR("*float*: Aux parasitic at design [MWe]"), NULL}, {"avg_suboptimal_rel_mip_gap", (getter)Outputs_get_avg_suboptimal_rel_mip_gap,(setter)0, PyDoc_STR("*float*: Average suboptimal relative MIP gap [%]"), @@ -6951,7 +7249,7 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence*: Resource Beam normal irradiance [W/m2]"), NULL}, {"bop_design", (getter)Outputs_get_bop_design,(setter)0, - PyDoc_STR("*float*: BOP parasitics at design [MWe]"), + PyDoc_STR("*float*: BOP parasitic at design [MWe]"), NULL}, {"capacity_factor", (getter)Outputs_get_capacity_factor,(setter)0, PyDoc_STR("*float*: Capacity factor [%]"), @@ -7043,12 +7341,24 @@ static PyGetSetDef Outputs_getset[] = { {"csp_pt_tes_tank_diameter", (getter)Outputs_get_csp_pt_tes_tank_diameter,(setter)0, PyDoc_STR("*float*: Tank diameter [m]"), NULL}, +{"cycle_Tdb_table", (getter)Outputs_get_cycle_Tdb_table,(setter)0, + PyDoc_STR("*sequence[sequence]*: Normalized cycle efficiency and condenser power vs. ambient temperature"), + NULL}, +{"cycle_eff_load_table", (getter)Outputs_get_cycle_eff_load_table,(setter)0, + PyDoc_STR("*sequence[sequence]*: Cycle efficiency vs. load"), + NULL}, {"cycle_htf_pump_power", (getter)Outputs_get_cycle_htf_pump_power,(setter)0, PyDoc_STR("*sequence*: PC HTF pump power [MWe]"), NULL}, +{"dP_sf_SS", (getter)Outputs_get_dP_sf_SS,(setter)0, + PyDoc_STR("*float*: Steady State field pressure drop [bar]"), + NULL}, {"defocus", (getter)Outputs_get_defocus,(setter)0, PyDoc_STR("*sequence*: Field optical focus fraction"), NULL}, +{"defocus_final", (getter)Outputs_get_defocus_final,(setter)0, + PyDoc_STR("*sequence*: Defocus final [-]"), + NULL}, {"deltaP_field", (getter)Outputs_get_deltaP_field,(setter)0, PyDoc_STR("*sequence*: Field pressure drop [bar]"), NULL}, @@ -7080,7 +7390,7 @@ static PyGetSetDef Outputs_getset[] = { PyDoc_STR("*sequence*: Dispatch expected solar field generation [MWt]"), NULL}, {"disp_qsfsu_expected", (getter)Outputs_get_disp_qsfsu_expected,(setter)0, - PyDoc_STR("*sequence*: Dispatch expected solar field startup enegy [MWt]"), + PyDoc_STR("*sequence*: Dispatch expected solar field startup energy [MWt]"), NULL}, {"disp_rel_mip_gap", (getter)Outputs_get_disp_rel_mip_gap,(setter)0, PyDoc_STR("*sequence*: Dispatch relative MIP gap"), @@ -7106,9 +7416,6 @@ static PyGetSetDef Outputs_getset[] = { {"disp_thermeff_expected", (getter)Outputs_get_disp_thermeff_expected,(setter)0, PyDoc_STR("*sequence*: Dispatch expected SF thermal efficiency adj."), NULL}, -{"disp_wlim_max", (getter)Outputs_get_disp_wlim_max,(setter)0, - PyDoc_STR("*float*: Max. net power to the grid (incl. availability) [MWe]"), - NULL}, {"disp_wpb_expected", (getter)Outputs_get_disp_wpb_expected,(setter)0, PyDoc_STR("*sequence*: Dispatch expected power generation [MWe]"), NULL}, @@ -7124,6 +7431,12 @@ static PyGetSetDef Outputs_getset[] = { {"eta", (getter)Outputs_get_eta,(setter)0, PyDoc_STR("*sequence*: PC efficiency: gross"), NULL}, +{"f_htfmax_actual", (getter)Outputs_get_f_htfmax_actual,(setter)0, + PyDoc_STR("*float*: Actual maximum loop mass flow rate fraction of design"), + NULL}, +{"f_htfmin_actual", (getter)Outputs_get_f_htfmin_actual,(setter)0, + PyDoc_STR("*float*: Actual minimum loop mass flow rate fraction of design"), + NULL}, {"field_htf_cp_avg_des", (getter)Outputs_get_field_htf_cp_avg_des,(setter)0, PyDoc_STR("*float*: Field average htf cp at design [kJ/kgK]"), NULL}, @@ -7145,6 +7458,9 @@ static PyGetSetDef Outputs_getset[] = { {"gen", (getter)Outputs_get_gen,(setter)0, PyDoc_STR("*sequence*: Total electric power to grid w/ avail. derate [kWe]"), NULL}, +{"hot_tank_htf_percent_final", (getter)Outputs_get_hot_tank_htf_percent_final,(setter)0, + PyDoc_STR("*sequence*: Final percent fill of available hot tank mass [%]"), + NULL}, {"hour_day", (getter)Outputs_get_hour_day,(setter)0, PyDoc_STR("*sequence*: Resource Hour of Day"), NULL}, @@ -7160,9 +7476,6 @@ static PyGetSetDef Outputs_getset[] = { {"is_rec_su_allowed", (getter)Outputs_get_is_rec_su_allowed,(setter)0, PyDoc_STR("*sequence*: is receiver startup allowed"), NULL}, -{"is_wlim_series", (getter)Outputs_get_is_wlim_series,(setter)0, - PyDoc_STR("*float*: Use time-series net electricity generation limits"), - NULL}, {"kwh_per_kw", (getter)Outputs_get_kwh_per_kw,(setter)0, PyDoc_STR("*float*: First year kWh/kW [kWh/kW]"), NULL}, @@ -7193,6 +7506,12 @@ static PyGetSetDef Outputs_getset[] = { {"m_dot_htf_cycle_des", (getter)Outputs_get_m_dot_htf_cycle_des,(setter)0, PyDoc_STR("*float*: PC mass flow rate at design [kg/s]"), NULL}, +{"m_dot_htfmax_actual", (getter)Outputs_get_m_dot_htfmax_actual,(setter)0, + PyDoc_STR("*float*: Actual maximum loop HTF flow rate [kg/s]"), + NULL}, +{"m_dot_htfmin_actual", (getter)Outputs_get_m_dot_htfmin_actual,(setter)0, + PyDoc_STR("*float*: Actual minimum loop HTF flow rate [kg/s]"), + NULL}, {"m_dot_loop", (getter)Outputs_get_m_dot_loop,(setter)0, PyDoc_STR("*sequence*: Receiver mass flow rate [kg/s]"), NULL}, @@ -7220,12 +7539,18 @@ static PyGetSetDef Outputs_getset[] = { {"max_field_flow_velocity", (getter)Outputs_get_max_field_flow_velocity,(setter)0, PyDoc_STR("*float*: Maximum field flow velocity [m/s]"), NULL}, +{"max_loop_flow_vel_des", (getter)Outputs_get_max_loop_flow_vel_des,(setter)0, + PyDoc_STR("*float*: Maximum loop flow velocity at design [m/s]"), + NULL}, {"min_field_flow_velocity", (getter)Outputs_get_min_field_flow_velocity,(setter)0, PyDoc_STR("*float*: Minimum field flow velocity [m/s]"), NULL}, {"min_inner_diameter", (getter)Outputs_get_min_inner_diameter,(setter)0, PyDoc_STR("*float*: Minimum absorber inner diameter in loop [m]"), NULL}, +{"min_loop_flow_vel_des", (getter)Outputs_get_min_loop_flow_vel_des,(setter)0, + PyDoc_STR("*float*: Minimum loop flow velocity at design [m/s]"), + NULL}, {"month", (getter)Outputs_get_month,(setter)0, PyDoc_STR("*sequence*: Resource Month"), NULL}, @@ -7262,6 +7587,15 @@ static PyGetSetDef Outputs_getset[] = { {"operating_modes_c", (getter)Outputs_get_operating_modes_c,(setter)0, PyDoc_STR("*sequence*: Final 3 operating modes tried"), NULL}, +{"pc_op_mode_final", (getter)Outputs_get_pc_op_mode_final,(setter)0, + PyDoc_STR("*sequence*: Final cycle operation mode 0:startup, 1:on, 2:standby, 3:off, 4:startup_controlled [-]"), + NULL}, +{"pc_startup_energy_remain_final", (getter)Outputs_get_pc_startup_energy_remain_final,(setter)0, + PyDoc_STR("*sequence*: Final cycle startup energy remaining [kwh]"), + NULL}, +{"pc_startup_time_remain_final", (getter)Outputs_get_pc_startup_time_remain_final,(setter)0, + PyDoc_STR("*sequence*: Final cycle startup time remaining [hr]"), + NULL}, {"pipe_header_P_dsn", (getter)Outputs_get_pipe_header_P_dsn,(setter)0, PyDoc_STR("*sequence*: Field piping header pressure at design [bar]"), NULL}, @@ -7421,6 +7755,9 @@ static PyGetSetDef Outputs_getset[] = { {"qinc_costh", (getter)Outputs_get_qinc_costh,(setter)0, PyDoc_STR("*sequence*: Field thermal power incident after cosine [MWt]"), NULL}, +{"rec_op_mode_final", (getter)Outputs_get_rec_op_mode_final,(setter)0, + PyDoc_STR("*sequence*: Final receiver operating mode 0: off, 1: startup, 2: on [-]"), + NULL}, {"recirculating", (getter)Outputs_get_recirculating,(setter)0, PyDoc_STR("*sequence*: Field recirculating (bypass valve open) [-]"), NULL}, @@ -7502,15 +7839,18 @@ static PyGetSetDef Outputs_getset[] = { {"twet", (getter)Outputs_get_twet,(setter)0, PyDoc_STR("*sequence*: Resource Wet bulb temperature [C]"), NULL}, +{"vel_loop_max", (getter)Outputs_get_vel_loop_max,(setter)0, + PyDoc_STR("*sequence*: Receiver max HTF velocity in loop [m/s]"), + NULL}, +{"vel_loop_min", (getter)Outputs_get_vel_loop_min,(setter)0, + PyDoc_STR("*sequence*: Receiver min HTF velocity in loop [m/s]"), + NULL}, {"vol_min", (getter)Outputs_get_vol_min,(setter)0, PyDoc_STR("*float*: Minimum Fluid Volume [m3]"), NULL}, {"vol_tank", (getter)Outputs_get_vol_tank,(setter)0, PyDoc_STR("*float*: Total tank volume [m3]"), NULL}, -{"wlim_series", (getter)Outputs_get_wlim_series,(setter)0, - PyDoc_STR("*sequence*: Time series net electicity generation limits [kWe]"), - NULL}, {"wspd", (getter)Outputs_get_wspd,(setter)0, PyDoc_STR("*sequence*: Resource Wind Speed [m/s]"), NULL}, @@ -7633,10 +7973,6 @@ newTroughPhysicalObject(void* data_ptr) PyDict_SetItemString(attr_dict, "TowerAndReceiver", TowerAndReceiver_obj); Py_DECREF(TowerAndReceiver_obj); - PyObject* SolarResourceData_obj = SolarResourceData_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "SolarResourceData", SolarResourceData_obj); - Py_DECREF(SolarResourceData_obj); - PyObject* CapitalCosts_obj = CapitalCosts_new(self->data_ptr); PyDict_SetItemString(attr_dict, "CapitalCosts", CapitalCosts_obj); Py_DECREF(CapitalCosts_obj); @@ -8045,13 +8381,6 @@ TroughPhysicalModule_exec(PyObject *m) (PyObject*)&TowerAndReceiver_Type); Py_DECREF(&TowerAndReceiver_Type); - /// Add the SolarResourceData type object to TroughPhysical_Type - if (PyType_Ready(&SolarResourceData_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysical_Type.tp_dict, - "SolarResourceData", - (PyObject*)&SolarResourceData_Type); - Py_DECREF(&SolarResourceData_Type); - /// Add the CapitalCosts type object to TroughPhysical_Type if (PyType_Ready(&CapitalCosts_Type) < 0) { goto fail; } PyDict_SetItemString(TroughPhysical_Type.tp_dict, diff --git a/modules/TroughPhysicalCspSolver.c b/modules/TroughPhysicalCspSolver.c deleted file mode 100644 index 8bd41b6..0000000 --- a/modules/TroughPhysicalCspSolver.c +++ /dev/null @@ -1,4968 +0,0 @@ -#include - -#include -#include - -#include "PySAM_utils.h" - - -/* - * Weather Group - */ - -static PyTypeObject Weather_Type; - -static PyObject * -Weather_new(SAM_TroughPhysicalCspSolver data_ptr) -{ - PyObject* new_obj = Weather_Type.tp_alloc(&Weather_Type,0); - - VarGroupObject* Weather_obj = (VarGroupObject*)new_obj; - - Weather_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* Weather methods */ - -static PyObject * -Weather_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalCspSolver", "Weather")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Weather_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &Weather_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalCspSolver", "Weather")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Weather_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &Weather_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef Weather_methods[] = { - {"assign", (PyCFunction)Weather_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``Weather_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)Weather_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``Weather_vals = { var: val, ...}``")}, - {"export", (PyCFunction)Weather_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -Weather_get_azimuth(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Weather_azimuth_nget, self->data_ptr); -} - -static int -Weather_set_azimuth(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Weather_azimuth_nset, self->data_ptr); -} - -static PyObject * -Weather_get_file_name(VarGroupObject *self, void *closure) -{ - return PySAM_string_getter(SAM_TroughPhysicalCspSolver_Weather_file_name_sget, self->data_ptr); -} - -static int -Weather_set_file_name(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_string_setter(value, SAM_TroughPhysicalCspSolver_Weather_file_name_sset, self->data_ptr); -} - -static PyObject * -Weather_get_tilt(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Weather_tilt_nget, self->data_ptr); -} - -static int -Weather_set_tilt(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Weather_tilt_nset, self->data_ptr); -} - -static PyObject * -Weather_get_track_mode(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Weather_track_mode_nget, self->data_ptr); -} - -static int -Weather_set_track_mode(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Weather_track_mode_nset, self->data_ptr); -} - -static PyGetSetDef Weather_getset[] = { -{"azimuth", (getter)Weather_get_azimuth,(setter)Weather_set_azimuth, - PyDoc_STR("*float*: Azimuth angle of surface/axis [none]\n\n**Required:**\nTrue"), - NULL}, -{"file_name", (getter)Weather_get_file_name,(setter)Weather_set_file_name, - PyDoc_STR("*str*: Local weather file with path [none]\n\n**Constraints:**\nLOCAL_FILE\n\n**Required:**\nTrue"), - NULL}, -{"tilt", (getter)Weather_get_tilt,(setter)Weather_set_tilt, - PyDoc_STR("*float*: Tilt angle of surface/axis [none]\n\n**Required:**\nTrue"), - NULL}, -{"track_mode", (getter)Weather_get_track_mode,(setter)Weather_set_track_mode, - PyDoc_STR("*float*: Tracking mode [none]\n\n**Required:**\nTrue"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject Weather_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalCspSolver.Weather", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - Weather_methods, /*tp_methods*/ - 0, /*tp_members*/ - Weather_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * Trough Group - */ - -static PyTypeObject Trough_Type; - -static PyObject * -Trough_new(SAM_TroughPhysicalCspSolver data_ptr) -{ - PyObject* new_obj = Trough_Type.tp_alloc(&Trough_Type,0); - - VarGroupObject* Trough_obj = (VarGroupObject*)new_obj; - - Trough_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* Trough methods */ - -static PyObject * -Trough_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalCspSolver", "Trough")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Trough_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &Trough_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalCspSolver", "Trough")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Trough_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &Trough_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef Trough_methods[] = { - {"assign", (PyCFunction)Trough_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``Trough_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)Trough_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``Trough_vals = { var: val, ...}``")}, - {"export", (PyCFunction)Trough_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -Trough_get_system_capacity(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Trough_system_capacity_nget, self->data_ptr); -} - -static int -Trough_set_system_capacity(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Trough_system_capacity_nset, self->data_ptr); -} - -static PyGetSetDef Trough_getset[] = { -{"system_capacity", (getter)Trough_get_system_capacity,(setter)Trough_set_system_capacity, - PyDoc_STR("*float*: Nameplate capacity [kW]\n\n**Required:**\nTrue"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject Trough_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalCspSolver.Trough", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - Trough_methods, /*tp_methods*/ - 0, /*tp_members*/ - Trough_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * TimeOfDelivery Group - */ - -static PyTypeObject TimeOfDelivery_Type; - -static PyObject * -TimeOfDelivery_new(SAM_TroughPhysicalCspSolver data_ptr) -{ - PyObject* new_obj = TimeOfDelivery_Type.tp_alloc(&TimeOfDelivery_Type,0); - - VarGroupObject* TimeOfDelivery_obj = (VarGroupObject*)new_obj; - - TimeOfDelivery_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* TimeOfDelivery methods */ - -static PyObject * -TimeOfDelivery_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalCspSolver", "TimeOfDelivery")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -TimeOfDelivery_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &TimeOfDelivery_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalCspSolver", "TimeOfDelivery")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -TimeOfDelivery_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &TimeOfDelivery_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef TimeOfDelivery_methods[] = { - {"assign", (PyCFunction)TimeOfDelivery_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``TimeOfDelivery_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)TimeOfDelivery_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``TimeOfDelivery_vals = { var: val, ...}``")}, - {"export", (PyCFunction)TimeOfDelivery_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -TimeOfDelivery_get_dispatch_factors_ts(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_TimeOfDelivery_dispatch_factors_ts_aget, self->data_ptr); -} - -static int -TimeOfDelivery_set_dispatch_factors_ts(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_TimeOfDelivery_dispatch_factors_ts_aset, self->data_ptr); -} - -static PyObject * -TimeOfDelivery_get_ppa_multiplier_model(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_TimeOfDelivery_ppa_multiplier_model_nget, self->data_ptr); -} - -static int -TimeOfDelivery_set_ppa_multiplier_model(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_TimeOfDelivery_ppa_multiplier_model_nset, self->data_ptr); -} - -static PyGetSetDef TimeOfDelivery_getset[] = { -{"dispatch_factors_ts", (getter)TimeOfDelivery_get_dispatch_factors_ts,(setter)TimeOfDelivery_set_dispatch_factors_ts, - PyDoc_STR("*sequence*: Dispatch payment factor array\n\n**Required:**\nRequired if ppa_multiplier_model=1"), - NULL}, -{"ppa_multiplier_model", (getter)TimeOfDelivery_get_ppa_multiplier_model,(setter)TimeOfDelivery_set_ppa_multiplier_model, - PyDoc_STR("*float*: PPA multiplier model [0/1]\n\n**Options:**\n0=diurnal,1=timestep\n\n**Constraints:**\nINTEGER,MIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject TimeOfDelivery_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalCspSolver.TimeOfDelivery", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - TimeOfDelivery_methods, /*tp_methods*/ - 0, /*tp_members*/ - TimeOfDelivery_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * SolarField Group - */ - -static PyTypeObject SolarField_Type; - -static PyObject * -SolarField_new(SAM_TroughPhysicalCspSolver data_ptr) -{ - PyObject* new_obj = SolarField_Type.tp_alloc(&SolarField_Type,0); - - VarGroupObject* SolarField_obj = (VarGroupObject*)new_obj; - - SolarField_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* SolarField methods */ - -static PyObject * -SolarField_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalCspSolver", "SolarField")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -SolarField_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &SolarField_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalCspSolver", "SolarField")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -SolarField_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &SolarField_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef SolarField_methods[] = { - {"assign", (PyCFunction)SolarField_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``SolarField_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)SolarField_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``SolarField_vals = { var: val, ...}``")}, - {"export", (PyCFunction)SolarField_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -SolarField_get_A_aperture(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_SolarField_A_aperture_aget, self->data_ptr); -} - -static int -SolarField_set_A_aperture(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_SolarField_A_aperture_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_AbsorberMaterial(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_AbsorberMaterial_mget, self->data_ptr); -} - -static int -SolarField_set_AbsorberMaterial(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_AbsorberMaterial_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_AnnulusGas(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_AnnulusGas_mget, self->data_ptr); -} - -static int -SolarField_set_AnnulusGas(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_AnnulusGas_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_Ave_Focal_Length(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_SolarField_Ave_Focal_Length_aget, self->data_ptr); -} - -static int -SolarField_set_Ave_Focal_Length(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_SolarField_Ave_Focal_Length_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_ColperSCA(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_SolarField_ColperSCA_aget, self->data_ptr); -} - -static int -SolarField_set_ColperSCA(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_SolarField_ColperSCA_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_D_2(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_D_2_mget, self->data_ptr); -} - -static int -SolarField_set_D_2(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_D_2_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_D_3(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_D_3_mget, self->data_ptr); -} - -static int -SolarField_set_D_3(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_D_3_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_D_4(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_D_4_mget, self->data_ptr); -} - -static int -SolarField_set_D_4(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_D_4_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_D_5(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_D_5_mget, self->data_ptr); -} - -static int -SolarField_set_D_5(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_D_5_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_D_p(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_D_p_mget, self->data_ptr); -} - -static int -SolarField_set_D_p(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_D_p_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_Design_loss(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_Design_loss_mget, self->data_ptr); -} - -static int -SolarField_set_Design_loss(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_Design_loss_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_Dirt_HCE(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_Dirt_HCE_mget, self->data_ptr); -} - -static int -SolarField_set_Dirt_HCE(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_Dirt_HCE_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_Dirt_mirror(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_SolarField_Dirt_mirror_aget, self->data_ptr); -} - -static int -SolarField_set_Dirt_mirror(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_SolarField_Dirt_mirror_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_Distance_SCA(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_SolarField_Distance_SCA_aget, self->data_ptr); -} - -static int -SolarField_set_Distance_SCA(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_SolarField_Distance_SCA_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_EPSILON_4(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_EPSILON_4_mget, self->data_ptr); -} - -static int -SolarField_set_EPSILON_4(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_EPSILON_4_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_EPSILON_5(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_EPSILON_5_mget, self->data_ptr); -} - -static int -SolarField_set_EPSILON_5(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_EPSILON_5_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_Error(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_SolarField_Error_aget, self->data_ptr); -} - -static int -SolarField_set_Error(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_SolarField_Error_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_FieldConfig(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_FieldConfig_nget, self->data_ptr); -} - -static int -SolarField_set_FieldConfig(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_FieldConfig_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_Flow_type(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_Flow_type_mget, self->data_ptr); -} - -static int -SolarField_set_Flow_type(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_Flow_type_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_Fluid(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_Fluid_nget, self->data_ptr); -} - -static int -SolarField_set_Fluid(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_Fluid_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_GeomEffects(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_SolarField_GeomEffects_aget, self->data_ptr); -} - -static int -SolarField_set_GeomEffects(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_SolarField_GeomEffects_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_GlazingIntactIn(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_GlazingIntactIn_mget, self->data_ptr); -} - -static int -SolarField_set_GlazingIntactIn(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_GlazingIntactIn_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_HCE_FieldFrac(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_HCE_FieldFrac_mget, self->data_ptr); -} - -static int -SolarField_set_HCE_FieldFrac(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_HCE_FieldFrac_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_HDR_rough(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_HDR_rough_nget, self->data_ptr); -} - -static int -SolarField_set_HDR_rough(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_HDR_rough_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_IAM_matrix(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_IAM_matrix_mget, self->data_ptr); -} - -static int -SolarField_set_IAM_matrix(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_IAM_matrix_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_I_bn_des(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_I_bn_des_nget, self->data_ptr); -} - -static int -SolarField_set_I_bn_des(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_I_bn_des_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_L_SCA(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_SolarField_L_SCA_aget, self->data_ptr); -} - -static int -SolarField_set_L_SCA(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_SolarField_L_SCA_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_L_aperture(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_SolarField_L_aperture_aget, self->data_ptr); -} - -static int -SolarField_set_L_aperture(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_SolarField_L_aperture_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_P_a(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_P_a_mget, self->data_ptr); -} - -static int -SolarField_set_P_a(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_P_a_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_P_ref(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_P_ref_nget, self->data_ptr); -} - -static int -SolarField_set_P_ref(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_P_ref_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_Pipe_hl_coef(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_Pipe_hl_coef_nget, self->data_ptr); -} - -static int -SolarField_set_Pipe_hl_coef(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_Pipe_hl_coef_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_Rho_mirror_clean(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_SolarField_Rho_mirror_clean_aget, self->data_ptr); -} - -static int -SolarField_set_Rho_mirror_clean(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_SolarField_Rho_mirror_clean_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_Rough(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_Rough_mget, self->data_ptr); -} - -static int -SolarField_set_Rough(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_Rough_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_Row_Distance(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_Row_Distance_nget, self->data_ptr); -} - -static int -SolarField_set_Row_Distance(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_Row_Distance_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_SCADefocusArray(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_SolarField_SCADefocusArray_aget, self->data_ptr); -} - -static int -SolarField_set_SCADefocusArray(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_SolarField_SCADefocusArray_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_SCAInfoArray(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_SCAInfoArray_mget, self->data_ptr); -} - -static int -SolarField_set_SCAInfoArray(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_SCAInfoArray_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_SCA_drives_elec(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_SCA_drives_elec_nget, self->data_ptr); -} - -static int -SolarField_set_SCA_drives_elec(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_SCA_drives_elec_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_Shadowing(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_Shadowing_mget, self->data_ptr); -} - -static int -SolarField_set_Shadowing(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_Shadowing_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_T_fp(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_T_fp_nget, self->data_ptr); -} - -static int -SolarField_set_T_fp(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_T_fp_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_T_loop_in_des(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_T_loop_in_des_nget, self->data_ptr); -} - -static int -SolarField_set_T_loop_in_des(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_T_loop_in_des_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_T_loop_out(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_T_loop_out_nget, self->data_ptr); -} - -static int -SolarField_set_T_loop_out(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_T_loop_out_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_T_startup(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_T_startup_nget, self->data_ptr); -} - -static int -SolarField_set_T_startup(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_T_startup_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_Tau_envelope(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_Tau_envelope_mget, self->data_ptr); -} - -static int -SolarField_set_Tau_envelope(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_Tau_envelope_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_TrackingError(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_SolarField_TrackingError_aget, self->data_ptr); -} - -static int -SolarField_set_TrackingError(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_SolarField_TrackingError_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_V_hdr_max(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_V_hdr_max_nget, self->data_ptr); -} - -static int -SolarField_set_V_hdr_max(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_V_hdr_max_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_V_hdr_min(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_V_hdr_min_nget, self->data_ptr); -} - -static int -SolarField_set_V_hdr_min(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_V_hdr_min_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_W_aperture(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_SolarField_W_aperture_aget, self->data_ptr); -} - -static int -SolarField_set_W_aperture(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_SolarField_W_aperture_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_accept_init(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_accept_init_nget, self->data_ptr); -} - -static int -SolarField_set_accept_init(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_accept_init_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_accept_loc(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_accept_loc_nget, self->data_ptr); -} - -static int -SolarField_set_accept_loc(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_accept_loc_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_accept_mode(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_accept_mode_nget, self->data_ptr); -} - -static int -SolarField_set_accept_mode(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_accept_mode_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_alpha_abs(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_alpha_abs_mget, self->data_ptr); -} - -static int -SolarField_set_alpha_abs(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_alpha_abs_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_alpha_env(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_alpha_env_mget, self->data_ptr); -} - -static int -SolarField_set_alpha_env(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_alpha_env_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_11(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_11_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_11(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_11_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_12(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_12_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_12(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_12_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_13(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_13_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_13(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_13_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_14(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_14_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_14(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_14_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_21(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_21_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_21(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_21_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_22(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_22_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_22(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_22_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_23(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_23_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_23(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_23_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_24(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_24_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_24(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_24_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_31(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_31_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_31(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_31_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_32(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_32_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_32(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_32_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_33(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_33_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_33(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_33_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_34(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_34_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_34(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_34_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_41(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_41_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_41(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_41_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_42(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_42_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_42(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_42_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_43(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_43_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_43(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_43_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_44(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_44_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_44(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_SolarField_epsilon_3_44_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_eta_pump(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_eta_pump_nget, self->data_ptr); -} - -static int -SolarField_set_eta_pump(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_eta_pump_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_fthrctrl(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_fthrctrl_nget, self->data_ptr); -} - -static int -SolarField_set_fthrctrl(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_fthrctrl_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_fthrok(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_fthrok_nget, self->data_ptr); -} - -static int -SolarField_set_fthrok(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_fthrok_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_m_dot_htfmax(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_m_dot_htfmax_nget, self->data_ptr); -} - -static int -SolarField_set_m_dot_htfmax(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_m_dot_htfmax_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_m_dot_htfmin(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_m_dot_htfmin_nget, self->data_ptr); -} - -static int -SolarField_set_m_dot_htfmin(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_m_dot_htfmin_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_mc_bal_cold(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_mc_bal_cold_nget, self->data_ptr); -} - -static int -SolarField_set_mc_bal_cold(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_mc_bal_cold_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_mc_bal_hot(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_mc_bal_hot_nget, self->data_ptr); -} - -static int -SolarField_set_mc_bal_hot(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_mc_bal_hot_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_mc_bal_sca(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_mc_bal_sca_nget, self->data_ptr); -} - -static int -SolarField_set_mc_bal_sca(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_mc_bal_sca_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_nColt(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_nColt_nget, self->data_ptr); -} - -static int -SolarField_set_nColt(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_nColt_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_nHCEVar(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_nHCEVar_nget, self->data_ptr); -} - -static int -SolarField_set_nHCEVar(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_nHCEVar_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_nHCEt(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_nHCEt_nget, self->data_ptr); -} - -static int -SolarField_set_nHCEt(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_nHCEt_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_nLoops(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_nLoops_nget, self->data_ptr); -} - -static int -SolarField_set_nLoops(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_nLoops_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_nSCA(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_nSCA_nget, self->data_ptr); -} - -static int -SolarField_set_nSCA(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_nSCA_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_solar_mult(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_solar_mult_nget, self->data_ptr); -} - -static int -SolarField_set_solar_mult(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_solar_mult_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_theta_dep(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_theta_dep_nget, self->data_ptr); -} - -static int -SolarField_set_theta_dep(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_theta_dep_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_theta_stow(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_theta_stow_nget, self->data_ptr); -} - -static int -SolarField_set_theta_stow(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_theta_stow_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_washing_frequency(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_washing_frequency_nget, self->data_ptr); -} - -static int -SolarField_set_washing_frequency(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_washing_frequency_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_water_usage_per_wash(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_SolarField_water_usage_per_wash_nget, self->data_ptr); -} - -static int -SolarField_set_water_usage_per_wash(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_SolarField_water_usage_per_wash_nset, self->data_ptr); -} - -static PyGetSetDef SolarField_getset[] = { -{"A_aperture", (getter)SolarField_get_A_aperture,(setter)SolarField_set_A_aperture, - PyDoc_STR("*sequence*: Reflective aperture area of the collector [m2]\n\n**Required:**\nTrue"), - NULL}, -{"AbsorberMaterial", (getter)SolarField_get_AbsorberMaterial,(setter)SolarField_set_AbsorberMaterial, - PyDoc_STR("*sequence[sequence]*: Absorber material type [none]\n\n**Required:**\nTrue"), - NULL}, -{"AnnulusGas", (getter)SolarField_get_AnnulusGas,(setter)SolarField_set_AnnulusGas, - PyDoc_STR("*sequence[sequence]*: Annulus gas type (1=air, 26=Ar, 27=H2) [none]\n\n**Required:**\nTrue"), - NULL}, -{"Ave_Focal_Length", (getter)SolarField_get_Ave_Focal_Length,(setter)SolarField_set_Ave_Focal_Length, - PyDoc_STR("*sequence*: Average focal length of the collector [m]\n\n**Required:**\nTrue"), - NULL}, -{"ColperSCA", (getter)SolarField_get_ColperSCA,(setter)SolarField_set_ColperSCA, - PyDoc_STR("*sequence*: Number of individual collector sections in an SCA [none]\n\n**Required:**\nTrue"), - NULL}, -{"D_2", (getter)SolarField_get_D_2,(setter)SolarField_set_D_2, - PyDoc_STR("*sequence[sequence]*: Inner absorber tube diameter [m]\n\n**Required:**\nTrue"), - NULL}, -{"D_3", (getter)SolarField_get_D_3,(setter)SolarField_set_D_3, - PyDoc_STR("*sequence[sequence]*: Outer absorber tube diameter [m]\n\n**Required:**\nTrue"), - NULL}, -{"D_4", (getter)SolarField_get_D_4,(setter)SolarField_set_D_4, - PyDoc_STR("*sequence[sequence]*: Inner glass envelope diameter [m]\n\n**Required:**\nTrue"), - NULL}, -{"D_5", (getter)SolarField_get_D_5,(setter)SolarField_set_D_5, - PyDoc_STR("*sequence[sequence]*: Outer glass envelope diameter [m]\n\n**Required:**\nTrue"), - NULL}, -{"D_p", (getter)SolarField_get_D_p,(setter)SolarField_set_D_p, - PyDoc_STR("*sequence[sequence]*: Diameter of the absorber flow plug (optional) [m]\n\n**Required:**\nTrue"), - NULL}, -{"Design_loss", (getter)SolarField_get_Design_loss,(setter)SolarField_set_Design_loss, - PyDoc_STR("*sequence[sequence]*: Receiver heat loss at design [W/m]\n\n**Required:**\nTrue"), - NULL}, -{"Dirt_HCE", (getter)SolarField_get_Dirt_HCE,(setter)SolarField_set_Dirt_HCE, - PyDoc_STR("*sequence[sequence]*: Loss due to dirt on the receiver envelope [none]\n\n**Required:**\nTrue"), - NULL}, -{"Dirt_mirror", (getter)SolarField_get_Dirt_mirror,(setter)SolarField_set_Dirt_mirror, - PyDoc_STR("*sequence*: User-defined dirt on mirror derate [none]\n\n**Required:**\nTrue"), - NULL}, -{"Distance_SCA", (getter)SolarField_get_Distance_SCA,(setter)SolarField_set_Distance_SCA, - PyDoc_STR("*sequence*: Piping distance between SCA's in the field [m]\n\n**Required:**\nTrue"), - NULL}, -{"EPSILON_4", (getter)SolarField_get_EPSILON_4,(setter)SolarField_set_EPSILON_4, - PyDoc_STR("*sequence[sequence]*: Inner glass envelope emissivities (Pyrex) [none]\n\n**Required:**\nTrue"), - NULL}, -{"EPSILON_5", (getter)SolarField_get_EPSILON_5,(setter)SolarField_set_EPSILON_5, - PyDoc_STR("*sequence[sequence]*: Outer glass envelope emissivities (Pyrex) [none]\n\n**Required:**\nTrue"), - NULL}, -{"Error", (getter)SolarField_get_Error,(setter)SolarField_set_Error, - PyDoc_STR("*sequence*: User-defined general optical error derate [none]\n\n**Required:**\nTrue"), - NULL}, -{"FieldConfig", (getter)SolarField_get_FieldConfig,(setter)SolarField_set_FieldConfig, - PyDoc_STR("*float*: Number of subfield headers [none]\n\n**Required:**\nTrue"), - NULL}, -{"Flow_type", (getter)SolarField_get_Flow_type,(setter)SolarField_set_Flow_type, - PyDoc_STR("*sequence[sequence]*: Flow type through the absorber [none]\n\n**Required:**\nTrue"), - NULL}, -{"Fluid", (getter)SolarField_get_Fluid,(setter)SolarField_set_Fluid, - PyDoc_STR("*float*: Field HTF fluid ID number [none]\n\n**Required:**\nTrue"), - NULL}, -{"GeomEffects", (getter)SolarField_get_GeomEffects,(setter)SolarField_set_GeomEffects, - PyDoc_STR("*sequence*: User-defined geometry effects derate [none]\n\n**Required:**\nTrue"), - NULL}, -{"GlazingIntactIn", (getter)SolarField_get_GlazingIntactIn,(setter)SolarField_set_GlazingIntactIn, - PyDoc_STR("*sequence[sequence]*: Glazing intact (broken glass) flag {1=true, else=false} [none]\n\n**Required:**\nTrue"), - NULL}, -{"HCE_FieldFrac", (getter)SolarField_get_HCE_FieldFrac,(setter)SolarField_set_HCE_FieldFrac, - PyDoc_STR("*sequence[sequence]*: Fraction of the field occupied by this HCE type [none]\n\n**Required:**\nTrue"), - NULL}, -{"HDR_rough", (getter)SolarField_get_HDR_rough,(setter)SolarField_set_HDR_rough, - PyDoc_STR("*float*: Header pipe roughness [m]\n\n**Required:**\nTrue"), - NULL}, -{"IAM_matrix", (getter)SolarField_get_IAM_matrix,(setter)SolarField_set_IAM_matrix, - PyDoc_STR("*sequence[sequence]*: IAM coefficients, matrix for 4 collectors [none]\n\n**Required:**\nTrue"), - NULL}, -{"I_bn_des", (getter)SolarField_get_I_bn_des,(setter)SolarField_set_I_bn_des, - PyDoc_STR("*float*: Solar irradiation at design [C]\n\n**Required:**\nTrue"), - NULL}, -{"L_SCA", (getter)SolarField_get_L_SCA,(setter)SolarField_set_L_SCA, - PyDoc_STR("*sequence*: Length of the SCA [m]\n\n**Required:**\nTrue"), - NULL}, -{"L_aperture", (getter)SolarField_get_L_aperture,(setter)SolarField_set_L_aperture, - PyDoc_STR("*sequence*: Length of a single mirror/HCE unit [m]\n\n**Required:**\nTrue"), - NULL}, -{"P_a", (getter)SolarField_get_P_a,(setter)SolarField_set_P_a, - PyDoc_STR("*sequence[sequence]*: Annulus gas pressure [torr]\n\n**Required:**\nTrue"), - NULL}, -{"P_ref", (getter)SolarField_get_P_ref,(setter)SolarField_set_P_ref, - PyDoc_STR("*float*: Rated plant capacity [MWe]\n\n**Required:**\nTrue"), - NULL}, -{"Pipe_hl_coef", (getter)SolarField_get_Pipe_hl_coef,(setter)SolarField_set_Pipe_hl_coef, - PyDoc_STR("*float*: Loss coefficient from the header, runner pipe, and non-HCE piping [m/s]\n\n**Required:**\nTrue"), - NULL}, -{"Rho_mirror_clean", (getter)SolarField_get_Rho_mirror_clean,(setter)SolarField_set_Rho_mirror_clean, - PyDoc_STR("*sequence*: User-defined clean mirror reflectivity [none]\n\n**Required:**\nTrue"), - NULL}, -{"Rough", (getter)SolarField_get_Rough,(setter)SolarField_set_Rough, - PyDoc_STR("*sequence[sequence]*: Roughness of the internal surface [m]\n\n**Required:**\nTrue"), - NULL}, -{"Row_Distance", (getter)SolarField_get_Row_Distance,(setter)SolarField_set_Row_Distance, - PyDoc_STR("*float*: Spacing between rows (centerline to centerline) [m]\n\n**Required:**\nTrue"), - NULL}, -{"SCADefocusArray", (getter)SolarField_get_SCADefocusArray,(setter)SolarField_set_SCADefocusArray, - PyDoc_STR("*sequence*: Collector defocus order [none]\n\n**Required:**\nTrue"), - NULL}, -{"SCAInfoArray", (getter)SolarField_get_SCAInfoArray,(setter)SolarField_set_SCAInfoArray, - PyDoc_STR("*sequence[sequence]*: Receiver (,1) and collector (,2) type for each assembly in loop [none]\n\n**Required:**\nTrue"), - NULL}, -{"SCA_drives_elec", (getter)SolarField_get_SCA_drives_elec,(setter)SolarField_set_SCA_drives_elec, - PyDoc_STR("*float*: Tracking power, in Watts per SCA drive [W/m2-K]\n\n**Required:**\nTrue"), - NULL}, -{"Shadowing", (getter)SolarField_get_Shadowing,(setter)SolarField_set_Shadowing, - PyDoc_STR("*sequence[sequence]*: Receiver bellows shadowing loss factor [none]\n\n**Required:**\nTrue"), - NULL}, -{"T_fp", (getter)SolarField_get_T_fp,(setter)SolarField_set_T_fp, - PyDoc_STR("*float*: Freeze protection temperature (heat trace activation temperature) [none]\n\n**Required:**\nTrue"), - NULL}, -{"T_loop_in_des", (getter)SolarField_get_T_loop_in_des,(setter)SolarField_set_T_loop_in_des, - PyDoc_STR("*float*: Design loop inlet temperature [C]\n\n**Required:**\nTrue"), - NULL}, -{"T_loop_out", (getter)SolarField_get_T_loop_out,(setter)SolarField_set_T_loop_out, - PyDoc_STR("*float*: Target loop outlet temperature [C]\n\n**Required:**\nTrue"), - NULL}, -{"T_startup", (getter)SolarField_get_T_startup,(setter)SolarField_set_T_startup, - PyDoc_STR("*float*: Required temperature of the system before the power block can be switched on [C]\n\n**Required:**\nTrue"), - NULL}, -{"Tau_envelope", (getter)SolarField_get_Tau_envelope,(setter)SolarField_set_Tau_envelope, - PyDoc_STR("*sequence[sequence]*: Envelope transmittance [none]\n\n**Required:**\nTrue"), - NULL}, -{"TrackingError", (getter)SolarField_get_TrackingError,(setter)SolarField_set_TrackingError, - PyDoc_STR("*sequence*: User-defined tracking error derate [none]\n\n**Required:**\nTrue"), - NULL}, -{"V_hdr_max", (getter)SolarField_get_V_hdr_max,(setter)SolarField_set_V_hdr_max, - PyDoc_STR("*float*: Maximum HTF velocity in the header at design [W/m2]\n\n**Required:**\nTrue"), - NULL}, -{"V_hdr_min", (getter)SolarField_get_V_hdr_min,(setter)SolarField_set_V_hdr_min, - PyDoc_STR("*float*: Minimum HTF velocity in the header at design [m/s]\n\n**Required:**\nTrue"), - NULL}, -{"W_aperture", (getter)SolarField_get_W_aperture,(setter)SolarField_set_W_aperture, - PyDoc_STR("*sequence*: The collector aperture width (Total structural area used for shadowing) [m]\n\n**Required:**\nTrue"), - NULL}, -{"accept_init", (getter)SolarField_get_accept_init,(setter)SolarField_set_accept_init, - PyDoc_STR("*float*: In acceptance testing mode - require steady-state startup [none]\n\n**Required:**\nTrue"), - NULL}, -{"accept_loc", (getter)SolarField_get_accept_loc,(setter)SolarField_set_accept_loc, - PyDoc_STR("*float*: In acceptance testing mode - temperature sensor location [1/2]\n\n**Info:**\nhx/loop\n\n**Required:**\nTrue"), - NULL}, -{"accept_mode", (getter)SolarField_get_accept_mode,(setter)SolarField_set_accept_mode, - PyDoc_STR("*float*: Acceptance testing mode? [0/1]\n\n**Info:**\nno/yes\n\n**Required:**\nTrue"), - NULL}, -{"alpha_abs", (getter)SolarField_get_alpha_abs,(setter)SolarField_set_alpha_abs, - PyDoc_STR("*sequence[sequence]*: Absorber absorptance [none]\n\n**Required:**\nTrue"), - NULL}, -{"alpha_env", (getter)SolarField_get_alpha_env,(setter)SolarField_set_alpha_env, - PyDoc_STR("*sequence[sequence]*: Envelope absorptance [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_11", (getter)SolarField_get_epsilon_3_11,(setter)SolarField_set_epsilon_3_11, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 1 variation 1 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_12", (getter)SolarField_get_epsilon_3_12,(setter)SolarField_set_epsilon_3_12, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 1 variation 2 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_13", (getter)SolarField_get_epsilon_3_13,(setter)SolarField_set_epsilon_3_13, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 1 variation 3 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_14", (getter)SolarField_get_epsilon_3_14,(setter)SolarField_set_epsilon_3_14, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 1 variation 4 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_21", (getter)SolarField_get_epsilon_3_21,(setter)SolarField_set_epsilon_3_21, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 2 variation 1 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_22", (getter)SolarField_get_epsilon_3_22,(setter)SolarField_set_epsilon_3_22, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 2 variation 2 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_23", (getter)SolarField_get_epsilon_3_23,(setter)SolarField_set_epsilon_3_23, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 2 variation 3 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_24", (getter)SolarField_get_epsilon_3_24,(setter)SolarField_set_epsilon_3_24, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 2 variation 4 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_31", (getter)SolarField_get_epsilon_3_31,(setter)SolarField_set_epsilon_3_31, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 3 variation 1 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_32", (getter)SolarField_get_epsilon_3_32,(setter)SolarField_set_epsilon_3_32, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 3 variation 2 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_33", (getter)SolarField_get_epsilon_3_33,(setter)SolarField_set_epsilon_3_33, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 3 variation 3 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_34", (getter)SolarField_get_epsilon_3_34,(setter)SolarField_set_epsilon_3_34, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 3 variation 4 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_41", (getter)SolarField_get_epsilon_3_41,(setter)SolarField_set_epsilon_3_41, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 4 variation 1 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_42", (getter)SolarField_get_epsilon_3_42,(setter)SolarField_set_epsilon_3_42, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 4 variation 2 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_43", (getter)SolarField_get_epsilon_3_43,(setter)SolarField_set_epsilon_3_43, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 4 variation 3 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_44", (getter)SolarField_get_epsilon_3_44,(setter)SolarField_set_epsilon_3_44, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 4 variation 4 [none]\n\n**Required:**\nTrue"), - NULL}, -{"eta_pump", (getter)SolarField_get_eta_pump,(setter)SolarField_set_eta_pump, - PyDoc_STR("*float*: HTF pump efficiency [none]\n\n**Required:**\nTrue"), - NULL}, -{"fthrctrl", (getter)SolarField_get_fthrctrl,(setter)SolarField_set_fthrctrl, - PyDoc_STR("*float*: Defocusing strategy [none]\n\n**Required:**\nTrue"), - NULL}, -{"fthrok", (getter)SolarField_get_fthrok,(setter)SolarField_set_fthrok, - PyDoc_STR("*float*: Flag to allow partial defocusing of the collectors [W/SCA]\n\n**Constraints:**\nINTEGER\n\n**Required:**\nTrue"), - NULL}, -{"m_dot_htfmax", (getter)SolarField_get_m_dot_htfmax,(setter)SolarField_set_m_dot_htfmax, - PyDoc_STR("*float*: Maximum loop HTF flow rate [kg/s]\n\n**Required:**\nTrue"), - NULL}, -{"m_dot_htfmin", (getter)SolarField_get_m_dot_htfmin,(setter)SolarField_set_m_dot_htfmin, - PyDoc_STR("*float*: Minimum loop HTF flow rate [kg/s]\n\n**Required:**\nTrue"), - NULL}, -{"mc_bal_cold", (getter)SolarField_get_mc_bal_cold,(setter)SolarField_set_mc_bal_cold, - PyDoc_STR("*float*: Heat capacity of the balance of plant on the cold side [kWht/K-MWt]\n\n**Required:**\nTrue"), - NULL}, -{"mc_bal_hot", (getter)SolarField_get_mc_bal_hot,(setter)SolarField_set_mc_bal_hot, - PyDoc_STR("*float*: Heat capacity of the balance of plant on the hot side [kWht/K-MWt]\n\n**Info:**\nnone\n\n**Required:**\nTrue"), - NULL}, -{"mc_bal_sca", (getter)SolarField_get_mc_bal_sca,(setter)SolarField_set_mc_bal_sca, - PyDoc_STR("*float*: Non-HTF heat capacity associated with each SCA - per meter basis [Wht/K-m]\n\n**Required:**\nTrue"), - NULL}, -{"nColt", (getter)SolarField_get_nColt,(setter)SolarField_set_nColt, - PyDoc_STR("*float*: Number of collector types [none]\n\n**Options:**\nconstant=4\n\n**Required:**\nTrue"), - NULL}, -{"nHCEVar", (getter)SolarField_get_nHCEVar,(setter)SolarField_set_nHCEVar, - PyDoc_STR("*float*: Number of HCE variants per type [none]\n\n**Required:**\nTrue"), - NULL}, -{"nHCEt", (getter)SolarField_get_nHCEt,(setter)SolarField_set_nHCEt, - PyDoc_STR("*float*: Number of HCE types [none]\n\n**Required:**\nTrue"), - NULL}, -{"nLoops", (getter)SolarField_get_nLoops,(setter)SolarField_set_nLoops, - PyDoc_STR("*float*: Number of loops in the field [none]\n\n**Required:**\nTrue"), - NULL}, -{"nSCA", (getter)SolarField_get_nSCA,(setter)SolarField_set_nSCA, - PyDoc_STR("*float*: Number of SCAs in a loop [none]\n\n**Required:**\nTrue"), - NULL}, -{"solar_mult", (getter)SolarField_get_solar_mult,(setter)SolarField_set_solar_mult, - PyDoc_STR("*float*: Solar multiple [none]\n\n**Required:**\nTrue"), - NULL}, -{"theta_dep", (getter)SolarField_get_theta_dep,(setter)SolarField_set_theta_dep, - PyDoc_STR("*float*: Deploy angle [deg]\n\n**Required:**\nTrue"), - NULL}, -{"theta_stow", (getter)SolarField_get_theta_stow,(setter)SolarField_set_theta_stow, - PyDoc_STR("*float*: Stow angle [deg]\n\n**Required:**\nTrue"), - NULL}, -{"washing_frequency", (getter)SolarField_get_washing_frequency,(setter)SolarField_set_washing_frequency, - PyDoc_STR("*float*: Mirror washing frequency [none]\n\n**Required:**\nTrue"), - NULL}, -{"water_usage_per_wash", (getter)SolarField_get_water_usage_per_wash,(setter)SolarField_set_water_usage_per_wash, - PyDoc_STR("*float*: Water usage per wash [L/m2_aper]\n\n**Required:**\nTrue"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject SolarField_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalCspSolver.SolarField", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - SolarField_methods, /*tp_methods*/ - 0, /*tp_members*/ - SolarField_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * Controller Group - */ - -static PyTypeObject Controller_Type; - -static PyObject * -Controller_new(SAM_TroughPhysicalCspSolver data_ptr) -{ - PyObject* new_obj = Controller_Type.tp_alloc(&Controller_Type,0); - - VarGroupObject* Controller_obj = (VarGroupObject*)new_obj; - - Controller_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* Controller methods */ - -static PyObject * -Controller_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalCspSolver", "Controller")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Controller_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &Controller_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalCspSolver", "Controller")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Controller_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &Controller_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef Controller_methods[] = { - {"assign", (PyCFunction)Controller_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``Controller_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)Controller_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``Controller_vals = { var: val, ...}``")}, - {"export", (PyCFunction)Controller_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -Controller_get_T_set_aux(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_T_set_aux_nget, self->data_ptr); -} - -static int -Controller_set_T_set_aux(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_T_set_aux_nset, self->data_ptr); -} - -static PyObject * -Controller_get_T_tank_cold_ini(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_T_tank_cold_ini_nget, self->data_ptr); -} - -static int -Controller_set_T_tank_cold_ini(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_T_tank_cold_ini_nset, self->data_ptr); -} - -static PyObject * -Controller_get_V_tank_hot_ini(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_V_tank_hot_ini_nget, self->data_ptr); -} - -static int -Controller_set_V_tank_hot_ini(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_V_tank_hot_ini_nset, self->data_ptr); -} - -static PyObject * -Controller_get_W_pb_design(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_W_pb_design_nget, self->data_ptr); -} - -static int -Controller_set_W_pb_design(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_W_pb_design_nset, self->data_ptr); -} - -static PyObject * -Controller_get_aux_array(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Controller_aux_array_aget, self->data_ptr); -} - -static int -Controller_set_aux_array(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_Controller_aux_array_aset, self->data_ptr); -} - -static PyObject * -Controller_get_bop_array(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Controller_bop_array_aget, self->data_ptr); -} - -static int -Controller_set_bop_array(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_Controller_bop_array_aset, self->data_ptr); -} - -static PyObject * -Controller_get_cold_tank_Thtr(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_cold_tank_Thtr_nget, self->data_ptr); -} - -static int -Controller_set_cold_tank_Thtr(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_cold_tank_Thtr_nset, self->data_ptr); -} - -static PyObject * -Controller_get_cycle_cutoff_frac(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_cycle_cutoff_frac_nget, self->data_ptr); -} - -static int -Controller_set_cycle_cutoff_frac(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_cycle_cutoff_frac_nset, self->data_ptr); -} - -static PyObject * -Controller_get_cycle_max_frac(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_cycle_max_frac_nget, self->data_ptr); -} - -static int -Controller_set_cycle_max_frac(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_cycle_max_frac_nset, self->data_ptr); -} - -static PyObject * -Controller_get_dt_cold(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_dt_cold_nget, self->data_ptr); -} - -static int -Controller_set_dt_cold(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_dt_cold_nset, self->data_ptr); -} - -static PyObject * -Controller_get_dt_hot(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_dt_hot_nget, self->data_ptr); -} - -static int -Controller_set_dt_hot(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_dt_hot_nset, self->data_ptr); -} - -static PyObject * -Controller_get_f_tc_cold(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_f_tc_cold_nget, self->data_ptr); -} - -static int -Controller_set_f_tc_cold(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_f_tc_cold_nset, self->data_ptr); -} - -static PyObject * -Controller_get_ffrac(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Controller_ffrac_aget, self->data_ptr); -} - -static int -Controller_set_ffrac(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_Controller_ffrac_aset, self->data_ptr); -} - -static PyObject * -Controller_get_field_fl_props(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_Controller_field_fl_props_mget, self->data_ptr); -} - -static int -Controller_set_field_fl_props(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_Controller_field_fl_props_mset, self->data_ptr); -} - -static PyObject * -Controller_get_fossil_mode(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_fossil_mode_nget, self->data_ptr); -} - -static int -Controller_set_fossil_mode(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_fossil_mode_nset, self->data_ptr); -} - -static PyObject * -Controller_get_h_tank(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_h_tank_nget, self->data_ptr); -} - -static int -Controller_set_h_tank(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_h_tank_nset, self->data_ptr); -} - -static PyObject * -Controller_get_h_tank_min(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_h_tank_min_nget, self->data_ptr); -} - -static int -Controller_set_h_tank_min(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_h_tank_min_nset, self->data_ptr); -} - -static PyObject * -Controller_get_hot_tank_Thtr(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_hot_tank_Thtr_nget, self->data_ptr); -} - -static int -Controller_set_hot_tank_Thtr(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_hot_tank_Thtr_nset, self->data_ptr); -} - -static PyObject * -Controller_get_hx_config(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_hx_config_nget, self->data_ptr); -} - -static int -Controller_set_hx_config(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_hx_config_nset, self->data_ptr); -} - -static PyObject * -Controller_get_is_hx(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_is_hx_nget, self->data_ptr); -} - -static int -Controller_set_is_hx(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_is_hx_nset, self->data_ptr); -} - -static PyObject * -Controller_get_nodes(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_nodes_nget, self->data_ptr); -} - -static int -Controller_set_nodes(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_nodes_nset, self->data_ptr); -} - -static PyObject * -Controller_get_pb_fixed_par(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_pb_fixed_par_nget, self->data_ptr); -} - -static int -Controller_set_pb_fixed_par(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_pb_fixed_par_nset, self->data_ptr); -} - -static PyObject * -Controller_get_pb_pump_coef(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_pb_pump_coef_nget, self->data_ptr); -} - -static int -Controller_set_pb_pump_coef(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_pb_pump_coef_nset, self->data_ptr); -} - -static PyObject * -Controller_get_q_max_aux(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_q_max_aux_nget, self->data_ptr); -} - -static int -Controller_set_q_max_aux(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_q_max_aux_nset, self->data_ptr); -} - -static PyObject * -Controller_get_q_pb_design(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_q_pb_design_nget, self->data_ptr); -} - -static int -Controller_set_q_pb_design(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_q_pb_design_nset, self->data_ptr); -} - -static PyObject * -Controller_get_q_sby_frac(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_q_sby_frac_nget, self->data_ptr); -} - -static int -Controller_set_q_sby_frac(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_q_sby_frac_nset, self->data_ptr); -} - -static PyObject * -Controller_get_sf_type(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_sf_type_nget, self->data_ptr); -} - -static int -Controller_set_sf_type(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_sf_type_nset, self->data_ptr); -} - -static PyObject * -Controller_get_store_fl_props(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_Controller_store_fl_props_mget, self->data_ptr); -} - -static int -Controller_set_store_fl_props(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_Controller_store_fl_props_mset, self->data_ptr); -} - -static PyObject * -Controller_get_store_fluid(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_store_fluid_nget, self->data_ptr); -} - -static int -Controller_set_store_fluid(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_store_fluid_nset, self->data_ptr); -} - -static PyObject * -Controller_get_t_ch_out_max(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_t_ch_out_max_nget, self->data_ptr); -} - -static int -Controller_set_t_ch_out_max(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_t_ch_out_max_nset, self->data_ptr); -} - -static PyObject * -Controller_get_t_dis_out_min(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_t_dis_out_min_nget, self->data_ptr); -} - -static int -Controller_set_t_dis_out_min(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_t_dis_out_min_nset, self->data_ptr); -} - -static PyObject * -Controller_get_t_standby_reset(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_t_standby_reset_nget, self->data_ptr); -} - -static int -Controller_set_t_standby_reset(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_t_standby_reset_nset, self->data_ptr); -} - -static PyObject * -Controller_get_tank_max_heat(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_tank_max_heat_nget, self->data_ptr); -} - -static int -Controller_set_tank_max_heat(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_tank_max_heat_nset, self->data_ptr); -} - -static PyObject * -Controller_get_tank_pairs(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_tank_pairs_nget, self->data_ptr); -} - -static int -Controller_set_tank_pairs(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_tank_pairs_nset, self->data_ptr); -} - -static PyObject * -Controller_get_tc_fill(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_tc_fill_nget, self->data_ptr); -} - -static int -Controller_set_tc_fill(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_tc_fill_nset, self->data_ptr); -} - -static PyObject * -Controller_get_tc_void(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_tc_void_nget, self->data_ptr); -} - -static int -Controller_set_tc_void(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_tc_void_nset, self->data_ptr); -} - -static PyObject * -Controller_get_tes_pump_coef(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_tes_pump_coef_nget, self->data_ptr); -} - -static int -Controller_set_tes_pump_coef(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_tes_pump_coef_nset, self->data_ptr); -} - -static PyObject * -Controller_get_tes_type(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_tes_type_nget, self->data_ptr); -} - -static int -Controller_set_tes_type(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_tes_type_nset, self->data_ptr); -} - -static PyObject * -Controller_get_tshours(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_tshours_nget, self->data_ptr); -} - -static int -Controller_set_tshours(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_tshours_nset, self->data_ptr); -} - -static PyObject * -Controller_get_tslogic_a(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Controller_tslogic_a_aget, self->data_ptr); -} - -static int -Controller_set_tslogic_a(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_Controller_tslogic_a_aset, self->data_ptr); -} - -static PyObject * -Controller_get_tslogic_b(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Controller_tslogic_b_aget, self->data_ptr); -} - -static int -Controller_set_tslogic_b(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_Controller_tslogic_b_aset, self->data_ptr); -} - -static PyObject * -Controller_get_tslogic_c(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Controller_tslogic_c_aget, self->data_ptr); -} - -static int -Controller_set_tslogic_c(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_Controller_tslogic_c_aset, self->data_ptr); -} - -static PyObject * -Controller_get_u_tank(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_u_tank_nget, self->data_ptr); -} - -static int -Controller_set_u_tank(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_u_tank_nset, self->data_ptr); -} - -static PyObject * -Controller_get_vol_tank(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Controller_vol_tank_nget, self->data_ptr); -} - -static int -Controller_set_vol_tank(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Controller_vol_tank_nset, self->data_ptr); -} - -static PyGetSetDef Controller_getset[] = { -{"T_set_aux", (getter)Controller_get_T_set_aux,(setter)Controller_set_T_set_aux, - PyDoc_STR("*float*: Aux heater outlet temp set point [C]\n\n**Required:**\nTrue"), - NULL}, -{"T_tank_cold_ini", (getter)Controller_get_T_tank_cold_ini,(setter)Controller_set_T_tank_cold_ini, - PyDoc_STR("*float*: Initial cold tank fluid tmeperature [C]\n\n**Required:**\nTrue"), - NULL}, -{"V_tank_hot_ini", (getter)Controller_get_V_tank_hot_ini,(setter)Controller_set_V_tank_hot_ini, - PyDoc_STR("*float*: Initial hot tank fluid volume [m3]\n\n**Required:**\nTrue"), - NULL}, -{"W_pb_design", (getter)Controller_get_W_pb_design,(setter)Controller_set_W_pb_design, - PyDoc_STR("*float*: Rated plant capacity [MWe]\n\n**Required:**\nTrue"), - NULL}, -{"aux_array", (getter)Controller_get_aux_array,(setter)Controller_set_aux_array, - PyDoc_STR("*sequence*: Coefficients for auxiliary heater parasitics calcs [-]\n\n**Required:**\nTrue"), - NULL}, -{"bop_array", (getter)Controller_get_bop_array,(setter)Controller_set_bop_array, - PyDoc_STR("*sequence*: Coefficients for balance of plant parasitics calcs [-]\n\n**Required:**\nTrue"), - NULL}, -{"cold_tank_Thtr", (getter)Controller_get_cold_tank_Thtr,(setter)Controller_set_cold_tank_Thtr, - PyDoc_STR("*float*: Minimum allowable cold tank HTF temp [C]\n\n**Required:**\nTrue"), - NULL}, -{"cycle_cutoff_frac", (getter)Controller_get_cycle_cutoff_frac,(setter)Controller_set_cycle_cutoff_frac, - PyDoc_STR("*float*: Minimum turbine operation fraction before shutdown [-]\n\n**Required:**\nTrue"), - NULL}, -{"cycle_max_frac", (getter)Controller_get_cycle_max_frac,(setter)Controller_set_cycle_max_frac, - PyDoc_STR("*float*: Maximum turbine over design operation fraction [-]\n\n**Required:**\nTrue"), - NULL}, -{"dt_cold", (getter)Controller_get_dt_cold,(setter)Controller_set_dt_cold, - PyDoc_STR("*float*: Cold side HX approach temp [C]\n\n**Required:**\nTrue"), - NULL}, -{"dt_hot", (getter)Controller_get_dt_hot,(setter)Controller_set_dt_hot, - PyDoc_STR("*float*: Hot side HX approach temp [C]\n\n**Required:**\nTrue"), - NULL}, -{"f_tc_cold", (getter)Controller_get_f_tc_cold,(setter)Controller_set_f_tc_cold, - PyDoc_STR("*float*: 0=entire tank is hot, 1=entire tank is cold [-]\n\n**Required:**\nTrue"), - NULL}, -{"ffrac", (getter)Controller_get_ffrac,(setter)Controller_set_ffrac, - PyDoc_STR("*sequence*: Fossil dispatch logic [-]\n\n**Required:**\nTrue"), - NULL}, -{"field_fl_props", (getter)Controller_get_field_fl_props,(setter)Controller_set_field_fl_props, - PyDoc_STR("*sequence[sequence]*: User defined field fluid property data [-]\n\n**Required:**\nTrue"), - NULL}, -{"fossil_mode", (getter)Controller_get_fossil_mode,(setter)Controller_set_fossil_mode, - PyDoc_STR("*float*: Fossil backup mode 1=Normal 2=Topping [-]\n\n**Constraints:**\nINTEGER\n\n**Required:**\nTrue"), - NULL}, -{"h_tank", (getter)Controller_get_h_tank,(setter)Controller_set_h_tank, - PyDoc_STR("*float*: Total height of tank (height of HTF when tank is full [m]\n\n**Required:**\nTrue"), - NULL}, -{"h_tank_min", (getter)Controller_get_h_tank_min,(setter)Controller_set_h_tank_min, - PyDoc_STR("*float*: Minimum allowable HTF height in storage tank [m]\n\n**Required:**\nTrue"), - NULL}, -{"hot_tank_Thtr", (getter)Controller_get_hot_tank_Thtr,(setter)Controller_set_hot_tank_Thtr, - PyDoc_STR("*float*: Minimum allowable hot tank HTF temp [C]\n\n**Required:**\nTrue"), - NULL}, -{"hx_config", (getter)Controller_get_hx_config,(setter)Controller_set_hx_config, - PyDoc_STR("*float*: HX configuration [-]\n\n**Required:**\nTrue"), - NULL}, -{"is_hx", (getter)Controller_get_is_hx,(setter)Controller_set_is_hx, - PyDoc_STR("*float*: Heat exchanger (HX) exists (1=yes, 0=no) [-]\n\n**Required:**\nTrue"), - NULL}, -{"nodes", (getter)Controller_get_nodes,(setter)Controller_set_nodes, - PyDoc_STR("*float*: Nodes modeled in the flow path [-]\n\n**Required:**\nTrue"), - NULL}, -{"pb_fixed_par", (getter)Controller_get_pb_fixed_par,(setter)Controller_set_pb_fixed_par, - PyDoc_STR("*float*: Fraction of rated gross power constantly consumed [-]\n\n**Required:**\nTrue"), - NULL}, -{"pb_pump_coef", (getter)Controller_get_pb_pump_coef,(setter)Controller_set_pb_pump_coef, - PyDoc_STR("*float*: Pumping power to move 1kg of HTF through PB loop [kW/kg]\n\n**Required:**\nTrue"), - NULL}, -{"q_max_aux", (getter)Controller_get_q_max_aux,(setter)Controller_set_q_max_aux, - PyDoc_STR("*float*: Max heat rate of auxiliary heater [MWt]\n\n**Required:**\nTrue"), - NULL}, -{"q_pb_design", (getter)Controller_get_q_pb_design,(setter)Controller_set_q_pb_design, - PyDoc_STR("*float*: Design heat input to power block [MWt]\n\n**Required:**\nTrue"), - NULL}, -{"q_sby_frac", (getter)Controller_get_q_sby_frac,(setter)Controller_set_q_sby_frac, - PyDoc_STR("*float*: Fraction of thermal power required for standby [-]\n\n**Required:**\nTrue"), - NULL}, -{"sf_type", (getter)Controller_get_sf_type,(setter)Controller_set_sf_type, - PyDoc_STR("*float*: Solar field type, 1 = trough, 2 = tower [-]\n\n**Required:**\nTrue"), - NULL}, -{"store_fl_props", (getter)Controller_get_store_fl_props,(setter)Controller_set_store_fl_props, - PyDoc_STR("*sequence[sequence]*: User defined storage fluid property data [-]\n\n**Required:**\nTrue"), - NULL}, -{"store_fluid", (getter)Controller_get_store_fluid,(setter)Controller_set_store_fluid, - PyDoc_STR("*float*: Material number for storage fluid [-]\n\n**Required:**\nTrue"), - NULL}, -{"t_ch_out_max", (getter)Controller_get_t_ch_out_max,(setter)Controller_set_t_ch_out_max, - PyDoc_STR("*float*: Max allowable cold side outlet temp during charge [C]\n\n**Required:**\nTrue"), - NULL}, -{"t_dis_out_min", (getter)Controller_get_t_dis_out_min,(setter)Controller_set_t_dis_out_min, - PyDoc_STR("*float*: Min allowable hot side outlet temp during discharge [C]\n\n**Required:**\nTrue"), - NULL}, -{"t_standby_reset", (getter)Controller_get_t_standby_reset,(setter)Controller_set_t_standby_reset, - PyDoc_STR("*float*: Maximum allowable time for PB standby operation [hr]\n\n**Required:**\nTrue"), - NULL}, -{"tank_max_heat", (getter)Controller_get_tank_max_heat,(setter)Controller_set_tank_max_heat, - PyDoc_STR("*float*: Rated heater capacity for tank heating [MW]\n\n**Required:**\nTrue"), - NULL}, -{"tank_pairs", (getter)Controller_get_tank_pairs,(setter)Controller_set_tank_pairs, - PyDoc_STR("*float*: Number of equivalent tank pairs [-]\n\n**Constraints:**\nINTEGER\n\n**Required:**\nTrue"), - NULL}, -{"tc_fill", (getter)Controller_get_tc_fill,(setter)Controller_set_tc_fill, - PyDoc_STR("*float*: Thermocline fill material [-]\n\n**Required:**\nTrue"), - NULL}, -{"tc_void", (getter)Controller_get_tc_void,(setter)Controller_set_tc_void, - PyDoc_STR("*float*: Thermocline void fraction [-]\n\n**Required:**\nTrue"), - NULL}, -{"tes_pump_coef", (getter)Controller_get_tes_pump_coef,(setter)Controller_set_tes_pump_coef, - PyDoc_STR("*float*: Pumping power to move 1kg of HTF through tes loop [kW/kg]\n\n**Required:**\nTrue"), - NULL}, -{"tes_type", (getter)Controller_get_tes_type,(setter)Controller_set_tes_type, - PyDoc_STR("*float*: 1=2-tank, 2=thermocline [-]\n\n**Required:**\nTrue"), - NULL}, -{"tshours", (getter)Controller_get_tshours,(setter)Controller_set_tshours, - PyDoc_STR("*float*: Equivalent full-load thermal storage hours [hr]\n\n**Required:**\nTrue"), - NULL}, -{"tslogic_a", (getter)Controller_get_tslogic_a,(setter)Controller_set_tslogic_a, - PyDoc_STR("*sequence*: Dispatch logic without solar [-]\n\n**Required:**\nTrue"), - NULL}, -{"tslogic_b", (getter)Controller_get_tslogic_b,(setter)Controller_set_tslogic_b, - PyDoc_STR("*sequence*: Dispatch logic with solar [-]\n\n**Required:**\nTrue"), - NULL}, -{"tslogic_c", (getter)Controller_get_tslogic_c,(setter)Controller_set_tslogic_c, - PyDoc_STR("*sequence*: Dispatch logic for turbine load fraction [-]\n\n**Required:**\nTrue"), - NULL}, -{"u_tank", (getter)Controller_get_u_tank,(setter)Controller_set_u_tank, - PyDoc_STR("*float*: Loss coefficient from the tank [W/m2-K]\n\n**Required:**\nTrue"), - NULL}, -{"vol_tank", (getter)Controller_get_vol_tank,(setter)Controller_set_vol_tank, - PyDoc_STR("*float*: Total tank volume, including unusable HTF at bottom [m3]\n\n**Required:**\nTrue"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject Controller_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalCspSolver.Controller", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - Controller_methods, /*tp_methods*/ - 0, /*tp_members*/ - Controller_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * TouTranslator Group - */ - -static PyTypeObject TouTranslator_Type; - -static PyObject * -TouTranslator_new(SAM_TroughPhysicalCspSolver data_ptr) -{ - PyObject* new_obj = TouTranslator_Type.tp_alloc(&TouTranslator_Type,0); - - VarGroupObject* TouTranslator_obj = (VarGroupObject*)new_obj; - - TouTranslator_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* TouTranslator methods */ - -static PyObject * -TouTranslator_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalCspSolver", "TouTranslator")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -TouTranslator_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &TouTranslator_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalCspSolver", "TouTranslator")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -TouTranslator_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &TouTranslator_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef TouTranslator_methods[] = { - {"assign", (PyCFunction)TouTranslator_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``TouTranslator_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)TouTranslator_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``TouTranslator_vals = { var: val, ...}``")}, - {"export", (PyCFunction)TouTranslator_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -TouTranslator_get_weekday_schedule(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_TouTranslator_weekday_schedule_mget, self->data_ptr); -} - -static int -TouTranslator_set_weekday_schedule(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_TouTranslator_weekday_schedule_mset, self->data_ptr); -} - -static PyObject * -TouTranslator_get_weekend_schedule(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_TouTranslator_weekend_schedule_mget, self->data_ptr); -} - -static int -TouTranslator_set_weekend_schedule(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_TouTranslator_weekend_schedule_mset, self->data_ptr); -} - -static PyGetSetDef TouTranslator_getset[] = { -{"weekday_schedule", (getter)TouTranslator_get_weekday_schedule,(setter)TouTranslator_set_weekday_schedule, - PyDoc_STR("*sequence[sequence]*: Dispatch 12mx24h schedule for week days\n\n**Required:**\nTrue"), - NULL}, -{"weekend_schedule", (getter)TouTranslator_get_weekend_schedule,(setter)TouTranslator_set_weekend_schedule, - PyDoc_STR("*sequence[sequence]*: Dispatch 12mx24h schedule for weekends\n\n**Required:**\nTrue"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject TouTranslator_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalCspSolver.TouTranslator", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - TouTranslator_methods, /*tp_methods*/ - 0, /*tp_members*/ - TouTranslator_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * Powerblock Group - */ - -static PyTypeObject Powerblock_Type; - -static PyObject * -Powerblock_new(SAM_TroughPhysicalCspSolver data_ptr) -{ - PyObject* new_obj = Powerblock_Type.tp_alloc(&Powerblock_Type,0); - - VarGroupObject* Powerblock_obj = (VarGroupObject*)new_obj; - - Powerblock_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* Powerblock methods */ - -static PyObject * -Powerblock_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalCspSolver", "Powerblock")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Powerblock_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &Powerblock_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalCspSolver", "Powerblock")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Powerblock_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &Powerblock_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef Powerblock_methods[] = { - {"assign", (PyCFunction)Powerblock_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``Powerblock_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)Powerblock_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``Powerblock_vals = { var: val, ...}``")}, - {"export", (PyCFunction)Powerblock_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -Powerblock_get_CT(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Powerblock_CT_nget, self->data_ptr); -} - -static int -Powerblock_set_CT(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Powerblock_CT_nset, self->data_ptr); -} - -static PyObject * -Powerblock_get_F_wc(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Powerblock_F_wc_aget, self->data_ptr); -} - -static int -Powerblock_set_F_wc(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalCspSolver_Powerblock_F_wc_aset, self->data_ptr); -} - -static PyObject * -Powerblock_get_P_cond_min(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Powerblock_P_cond_min_nget, self->data_ptr); -} - -static int -Powerblock_set_P_cond_min(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Powerblock_P_cond_min_nset, self->data_ptr); -} - -static PyObject * -Powerblock_get_P_cond_ratio(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Powerblock_P_cond_ratio_nget, self->data_ptr); -} - -static int -Powerblock_set_P_cond_ratio(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Powerblock_P_cond_ratio_nset, self->data_ptr); -} - -static PyObject * -Powerblock_get_T_ITD_des(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Powerblock_T_ITD_des_nget, self->data_ptr); -} - -static int -Powerblock_set_T_ITD_des(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Powerblock_T_ITD_des_nset, self->data_ptr); -} - -static PyObject * -Powerblock_get_T_amb_des(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Powerblock_T_amb_des_nget, self->data_ptr); -} - -static int -Powerblock_set_T_amb_des(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Powerblock_T_amb_des_nset, self->data_ptr); -} - -static PyObject * -Powerblock_get_T_approach(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Powerblock_T_approach_nget, self->data_ptr); -} - -static int -Powerblock_set_T_approach(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Powerblock_T_approach_nset, self->data_ptr); -} - -static PyObject * -Powerblock_get_dT_cw_ref(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Powerblock_dT_cw_ref_nget, self->data_ptr); -} - -static int -Powerblock_set_dT_cw_ref(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Powerblock_dT_cw_ref_nset, self->data_ptr); -} - -static PyObject * -Powerblock_get_eta_ref(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Powerblock_eta_ref_nget, self->data_ptr); -} - -static int -Powerblock_set_eta_ref(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Powerblock_eta_ref_nset, self->data_ptr); -} - -static PyObject * -Powerblock_get_n_pl_inc(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Powerblock_n_pl_inc_nget, self->data_ptr); -} - -static int -Powerblock_set_n_pl_inc(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Powerblock_n_pl_inc_nset, self->data_ptr); -} - -static PyObject * -Powerblock_get_pb_bd_frac(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Powerblock_pb_bd_frac_nget, self->data_ptr); -} - -static int -Powerblock_set_pb_bd_frac(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Powerblock_pb_bd_frac_nset, self->data_ptr); -} - -static PyObject * -Powerblock_get_pc_config(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Powerblock_pc_config_nget, self->data_ptr); -} - -static int -Powerblock_set_pc_config(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Powerblock_pc_config_nset, self->data_ptr); -} - -static PyObject * -Powerblock_get_q_sby_frac(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Powerblock_q_sby_frac_nget, self->data_ptr); -} - -static int -Powerblock_set_q_sby_frac(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Powerblock_q_sby_frac_nset, self->data_ptr); -} - -static PyObject * -Powerblock_get_startup_frac(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Powerblock_startup_frac_nget, self->data_ptr); -} - -static int -Powerblock_set_startup_frac(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Powerblock_startup_frac_nset, self->data_ptr); -} - -static PyObject * -Powerblock_get_startup_time(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Powerblock_startup_time_nget, self->data_ptr); -} - -static int -Powerblock_set_startup_time(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Powerblock_startup_time_nset, self->data_ptr); -} - -static PyObject * -Powerblock_get_tech_type(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Powerblock_tech_type_nget, self->data_ptr); -} - -static int -Powerblock_set_tech_type(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Powerblock_tech_type_nset, self->data_ptr); -} - -static PyGetSetDef Powerblock_getset[] = { -{"CT", (getter)Powerblock_get_CT,(setter)Powerblock_set_CT, - PyDoc_STR("*float*: Flag for using dry cooling or wet cooling system [none]\n\n**Required:**\nRequired if pc_config=0"), - NULL}, -{"F_wc", (getter)Powerblock_get_F_wc,(setter)Powerblock_set_F_wc, - PyDoc_STR("*sequence*: Fraction indicating wet cooling use for hybrid system [none]\n\n**Options:**\nconstant=[0,0,0,0,0,0,0,0,0]\n\n**Required:**\nRequired if pc_config=0"), - NULL}, -{"P_cond_min", (getter)Powerblock_get_P_cond_min,(setter)Powerblock_set_P_cond_min, - PyDoc_STR("*float*: Minimum condenser pressure [inHg]\n\n**Required:**\nRequired if pc_config=0"), - NULL}, -{"P_cond_ratio", (getter)Powerblock_get_P_cond_ratio,(setter)Powerblock_set_P_cond_ratio, - PyDoc_STR("*float*: Condenser pressure ratio [none]\n\n**Required:**\nRequired if pc_config=0"), - NULL}, -{"T_ITD_des", (getter)Powerblock_get_T_ITD_des,(setter)Powerblock_set_T_ITD_des, - PyDoc_STR("*float*: ITD at design for dry system [C]\n\n**Required:**\nRequired if pc_config=0"), - NULL}, -{"T_amb_des", (getter)Powerblock_get_T_amb_des,(setter)Powerblock_set_T_amb_des, - PyDoc_STR("*float*: Reference ambient temperature at design point [C]\n\n**Required:**\nRequired if pc_config=0"), - NULL}, -{"T_approach", (getter)Powerblock_get_T_approach,(setter)Powerblock_set_T_approach, - PyDoc_STR("*float*: Cooling tower approach temperature [C]\n\n**Required:**\nRequired if pc_config=0"), - NULL}, -{"dT_cw_ref", (getter)Powerblock_get_dT_cw_ref,(setter)Powerblock_set_dT_cw_ref, - PyDoc_STR("*float*: Reference condenser cooling water inlet/outlet T diff [C]\n\n**Required:**\nRequired if pc_config=0"), - NULL}, -{"eta_ref", (getter)Powerblock_get_eta_ref,(setter)Powerblock_set_eta_ref, - PyDoc_STR("*float*: Reference conversion efficiency at design condition [none]\n\n**Required:**\nTrue"), - NULL}, -{"n_pl_inc", (getter)Powerblock_get_n_pl_inc,(setter)Powerblock_set_n_pl_inc, - PyDoc_STR("*float*: Number of part-load increments for the heat rejection system [none]\n\n**Required:**\nRequired if pc_config=0"), - NULL}, -{"pb_bd_frac", (getter)Powerblock_get_pb_bd_frac,(setter)Powerblock_set_pb_bd_frac, - PyDoc_STR("*float*: Power block blowdown steam fraction [none]\n\n**Required:**\nRequired if pc_config=0"), - NULL}, -{"pc_config", (getter)Powerblock_get_pc_config,(setter)Powerblock_set_pc_config, - PyDoc_STR("*float*: 0: Steam Rankine (224), 1: user defined [-]\n\n**Constraints:**\nINTEGER\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), - NULL}, -{"q_sby_frac", (getter)Powerblock_get_q_sby_frac,(setter)Powerblock_set_q_sby_frac, - PyDoc_STR("*float*: Fraction of thermal power required for standby mode [none]\n\n**Required:**\nTrue"), - NULL}, -{"startup_frac", (getter)Powerblock_get_startup_frac,(setter)Powerblock_set_startup_frac, - PyDoc_STR("*float*: Fraction of design thermal power needed for startup [none]\n\n**Required:**\nTrue"), - NULL}, -{"startup_time", (getter)Powerblock_get_startup_time,(setter)Powerblock_set_startup_time, - PyDoc_STR("*float*: Time needed for power block startup [hr]\n\n**Required:**\nTrue"), - NULL}, -{"tech_type", (getter)Powerblock_get_tech_type,(setter)Powerblock_set_tech_type, - PyDoc_STR("*float*: Turbine inlet pressure control flag (sliding=user, fixed=trough) [1/2/3]\n\n**Info:**\ntower/trough/user\n\n**Required:**\nRequired if pc_config=0"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject Powerblock_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalCspSolver.Powerblock", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - Powerblock_methods, /*tp_methods*/ - 0, /*tp_members*/ - Powerblock_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * UserDefinedPC Group - */ - -static PyTypeObject UserDefinedPC_Type; - -static PyObject * -UserDefinedPC_new(SAM_TroughPhysicalCspSolver data_ptr) -{ - PyObject* new_obj = UserDefinedPC_Type.tp_alloc(&UserDefinedPC_Type,0); - - VarGroupObject* UserDefinedPC_obj = (VarGroupObject*)new_obj; - - UserDefinedPC_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* UserDefinedPC methods */ - -static PyObject * -UserDefinedPC_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalCspSolver", "UserDefinedPC")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -UserDefinedPC_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &UserDefinedPC_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalCspSolver", "UserDefinedPC")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -UserDefinedPC_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &UserDefinedPC_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef UserDefinedPC_methods[] = { - {"assign", (PyCFunction)UserDefinedPC_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``UserDefinedPC_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)UserDefinedPC_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``UserDefinedPC_vals = { var: val, ...}``")}, - {"export", (PyCFunction)UserDefinedPC_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -UserDefinedPC_get_ud_T_amb_des(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_T_amb_des_nget, self->data_ptr); -} - -static int -UserDefinedPC_set_ud_T_amb_des(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_T_amb_des_nset, self->data_ptr); -} - -static PyObject * -UserDefinedPC_get_ud_T_amb_high(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_T_amb_high_nget, self->data_ptr); -} - -static int -UserDefinedPC_set_ud_T_amb_high(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_T_amb_high_nset, self->data_ptr); -} - -static PyObject * -UserDefinedPC_get_ud_T_amb_ind_od(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_T_amb_ind_od_mget, self->data_ptr); -} - -static int -UserDefinedPC_set_ud_T_amb_ind_od(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_T_amb_ind_od_mset, self->data_ptr); -} - -static PyObject * -UserDefinedPC_get_ud_T_amb_low(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_T_amb_low_nget, self->data_ptr); -} - -static int -UserDefinedPC_set_ud_T_amb_low(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_T_amb_low_nset, self->data_ptr); -} - -static PyObject * -UserDefinedPC_get_ud_T_htf_high(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_T_htf_high_nget, self->data_ptr); -} - -static int -UserDefinedPC_set_ud_T_htf_high(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_T_htf_high_nset, self->data_ptr); -} - -static PyObject * -UserDefinedPC_get_ud_T_htf_ind_od(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_T_htf_ind_od_mget, self->data_ptr); -} - -static int -UserDefinedPC_set_ud_T_htf_ind_od(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_T_htf_ind_od_mset, self->data_ptr); -} - -static PyObject * -UserDefinedPC_get_ud_T_htf_low(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_T_htf_low_nget, self->data_ptr); -} - -static int -UserDefinedPC_set_ud_T_htf_low(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_T_htf_low_nset, self->data_ptr); -} - -static PyObject * -UserDefinedPC_get_ud_f_W_dot_cool_des(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_f_W_dot_cool_des_nget, self->data_ptr); -} - -static int -UserDefinedPC_set_ud_f_W_dot_cool_des(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_f_W_dot_cool_des_nset, self->data_ptr); -} - -static PyObject * -UserDefinedPC_get_ud_ind_od(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_ind_od_mget, self->data_ptr); -} - -static int -UserDefinedPC_set_ud_ind_od(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_ind_od_mset, self->data_ptr); -} - -static PyObject * -UserDefinedPC_get_ud_m_dot_htf_high(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_m_dot_htf_high_nget, self->data_ptr); -} - -static int -UserDefinedPC_set_ud_m_dot_htf_high(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_m_dot_htf_high_nset, self->data_ptr); -} - -static PyObject * -UserDefinedPC_get_ud_m_dot_htf_ind_od(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_m_dot_htf_ind_od_mget, self->data_ptr); -} - -static int -UserDefinedPC_set_ud_m_dot_htf_ind_od(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_m_dot_htf_ind_od_mset, self->data_ptr); -} - -static PyObject * -UserDefinedPC_get_ud_m_dot_htf_low(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_m_dot_htf_low_nget, self->data_ptr); -} - -static int -UserDefinedPC_set_ud_m_dot_htf_low(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_m_dot_htf_low_nset, self->data_ptr); -} - -static PyObject * -UserDefinedPC_get_ud_m_dot_water_cool_des(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_m_dot_water_cool_des_nget, self->data_ptr); -} - -static int -UserDefinedPC_set_ud_m_dot_water_cool_des(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_UserDefinedPC_ud_m_dot_water_cool_des_nset, self->data_ptr); -} - -static PyGetSetDef UserDefinedPC_getset[] = { -{"ud_T_amb_des", (getter)UserDefinedPC_get_ud_T_amb_des,(setter)UserDefinedPC_set_ud_T_amb_des, - PyDoc_STR("*float*: Ambient temperature at user-defined power cycle design point [C]\n\n**Required:**\nRequired if pc_config=1"), - NULL}, -{"ud_T_amb_high", (getter)UserDefinedPC_get_ud_T_amb_high,(setter)UserDefinedPC_set_ud_T_amb_high, - PyDoc_STR("*float*: High level ambient temperature for HTF mass flow rate parametric [C]\n\n**Required:**\nRequired if pc_config=1"), - NULL}, -{"ud_T_amb_ind_od", (getter)UserDefinedPC_get_ud_T_amb_ind_od,(setter)UserDefinedPC_set_ud_T_amb_ind_od, - PyDoc_STR("*sequence[sequence]*: Off design table of user-defined power cycle performance formed from parametric on T_amb [C]\n\n**Required:**\nFalse. Automatically set to [[0]] if not assigned explicitly or loaded from defaults."), - NULL}, -{"ud_T_amb_low", (getter)UserDefinedPC_get_ud_T_amb_low,(setter)UserDefinedPC_set_ud_T_amb_low, - PyDoc_STR("*float*: Low level ambient temperature for HTF mass flow rate parametric [C]\n\n**Required:**\nRequired if pc_config=1"), - NULL}, -{"ud_T_htf_high", (getter)UserDefinedPC_get_ud_T_htf_high,(setter)UserDefinedPC_set_ud_T_htf_high, - PyDoc_STR("*float*: High level HTF inlet temperature for T_amb parametric [C]\n\n**Required:**\nRequired if pc_config=1"), - NULL}, -{"ud_T_htf_ind_od", (getter)UserDefinedPC_get_ud_T_htf_ind_od,(setter)UserDefinedPC_set_ud_T_htf_ind_od, - PyDoc_STR("*sequence[sequence]*: Off design table of user-defined power cycle performance formed from parametric on T_htf_hot [C]\n\n**Required:**\nFalse. Automatically set to [[0]] if not assigned explicitly or loaded from defaults."), - NULL}, -{"ud_T_htf_low", (getter)UserDefinedPC_get_ud_T_htf_low,(setter)UserDefinedPC_set_ud_T_htf_low, - PyDoc_STR("*float*: Low level HTF inlet temperature for T_amb parametric [C]\n\n**Required:**\nRequired if pc_config=1"), - NULL}, -{"ud_f_W_dot_cool_des", (getter)UserDefinedPC_get_ud_f_W_dot_cool_des,(setter)UserDefinedPC_set_ud_f_W_dot_cool_des, - PyDoc_STR("*float*: Percent of user-defined power cycle design gross output consumed by cooling [%]\n\n**Required:**\nRequired if pc_config=1"), - NULL}, -{"ud_ind_od", (getter)UserDefinedPC_get_ud_ind_od,(setter)UserDefinedPC_set_ud_ind_od, - PyDoc_STR("*sequence[sequence]*: Off design user-defined power cycle performance as function of T_htf, m_dot_htf [ND], and T_amb\n\n**Required:**\nFalse. Automatically set to [[0]] if not assigned explicitly or loaded from defaults."), - NULL}, -{"ud_m_dot_htf_high", (getter)UserDefinedPC_get_ud_m_dot_htf_high,(setter)UserDefinedPC_set_ud_m_dot_htf_high, - PyDoc_STR("*float*: High level normalized HTF mass flow rate for T_HTF parametric [-]\n\n**Required:**\nRequired if pc_config=1"), - NULL}, -{"ud_m_dot_htf_ind_od", (getter)UserDefinedPC_get_ud_m_dot_htf_ind_od,(setter)UserDefinedPC_set_ud_m_dot_htf_ind_od, - PyDoc_STR("*sequence[sequence]*: Off design table of user-defined power cycle performance formed from parametric on m_dot_htf [ND]\n\n**Required:**\nFalse. Automatically set to [[0]] if not assigned explicitly or loaded from defaults."), - NULL}, -{"ud_m_dot_htf_low", (getter)UserDefinedPC_get_ud_m_dot_htf_low,(setter)UserDefinedPC_set_ud_m_dot_htf_low, - PyDoc_STR("*float*: Low level normalized HTF mass flow rate for T_HTF parametric [-]\n\n**Required:**\nRequired if pc_config=1"), - NULL}, -{"ud_m_dot_water_cool_des", (getter)UserDefinedPC_get_ud_m_dot_water_cool_des,(setter)UserDefinedPC_set_ud_m_dot_water_cool_des, - PyDoc_STR("*float*: Mass flow rate of water required at user-defined power cycle design point [kg/s]\n\n**Required:**\nRequired if pc_config=1"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject UserDefinedPC_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalCspSolver.UserDefinedPC", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - UserDefinedPC_methods, /*tp_methods*/ - 0, /*tp_members*/ - UserDefinedPC_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * Enet Group - */ - -static PyTypeObject Enet_Type; - -static PyObject * -Enet_new(SAM_TroughPhysicalCspSolver data_ptr) -{ - PyObject* new_obj = Enet_Type.tp_alloc(&Enet_Type,0); - - VarGroupObject* Enet_obj = (VarGroupObject*)new_obj; - - Enet_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* Enet methods */ - -static PyObject * -Enet_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalCspSolver", "Enet")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Enet_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &Enet_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalCspSolver", "Enet")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Enet_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &Enet_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef Enet_methods[] = { - {"assign", (PyCFunction)Enet_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``Enet_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)Enet_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``Enet_vals = { var: val, ...}``")}, - {"export", (PyCFunction)Enet_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -Enet_get_eta_lhv(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Enet_eta_lhv_nget, self->data_ptr); -} - -static int -Enet_set_eta_lhv(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Enet_eta_lhv_nset, self->data_ptr); -} - -static PyObject * -Enet_get_eta_tes_htr(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Enet_eta_tes_htr_nget, self->data_ptr); -} - -static int -Enet_set_eta_tes_htr(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalCspSolver_Enet_eta_tes_htr_nset, self->data_ptr); -} - -static PyGetSetDef Enet_getset[] = { -{"eta_lhv", (getter)Enet_get_eta_lhv,(setter)Enet_set_eta_lhv, - PyDoc_STR("*float*: Fossil fuel lower heating value - Thermal power generated per unit fuel [MW/MMBTU]\n\n**Required:**\nTrue"), - NULL}, -{"eta_tes_htr", (getter)Enet_get_eta_tes_htr,(setter)Enet_set_eta_tes_htr, - PyDoc_STR("*float*: Thermal storage tank heater efficiency (fp_mode=1 only) [none]\n\n**Required:**\nTrue"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject Enet_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalCspSolver.Enet", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - Enet_methods, /*tp_methods*/ - 0, /*tp_members*/ - Enet_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * Outputs Group - */ - -static PyTypeObject Outputs_Type; - -static PyObject * -Outputs_new(SAM_TroughPhysicalCspSolver data_ptr) -{ - PyObject* new_obj = Outputs_Type.tp_alloc(&Outputs_Type,0); - - VarGroupObject* Outputs_obj = (VarGroupObject*)new_obj; - - Outputs_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* Outputs methods */ - -static PyObject * -Outputs_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalCspSolver", "Outputs")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Outputs_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &Outputs_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalCspSolver", "Outputs")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Outputs_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &Outputs_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef Outputs_methods[] = { - {"assign", (PyCFunction)Outputs_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``Outputs_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)Outputs_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``Outputs_vals = { var: val, ...}``")}, - {"export", (PyCFunction)Outputs_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -Outputs_get_P_cooling_tower_tot(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_P_cooling_tower_tot_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_P_fixed(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_P_fixed_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_P_out_net(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_P_out_net_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_P_plant_balance_tot(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_P_plant_balance_tot_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_P_tower_pump(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_P_tower_pump_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_Q_thermal(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_Q_thermal_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_T_tes_cold(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_T_tes_cold_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_T_tes_hot(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_T_tes_hot_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_annual_W_cycle_gross(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Outputs_annual_W_cycle_gross_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_annual_energy(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Outputs_annual_energy_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_annual_energy_distribution_time(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_Outputs_annual_energy_distribution_time_mget, self->data_ptr); -} - -static PyObject * -Outputs_get_annual_total_water_use(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Outputs_annual_total_water_use_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_beam(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_beam_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_capacity_factor(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Outputs_capacity_factor_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_conversion_factor(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Outputs_conversion_factor_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_defocus(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_defocus_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_iter_ann(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_iter_ann_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_obj_relax(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_obj_relax_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_objective(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_objective_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_objective_ann(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_objective_ann_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_pceff_expected(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_pceff_expected_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_presolve_nconstr(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_presolve_nconstr_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_presolve_nconstr_ann(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_presolve_nconstr_ann_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_presolve_nvar(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_presolve_nvar_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_presolve_nvar_ann(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_presolve_nvar_ann_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_qpbsu_expected(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_qpbsu_expected_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_qsf_expected(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_qsf_expected_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_qsfprod_expected(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_qsfprod_expected_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_qsfsu_expected(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_qsfsu_expected_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_rel_mip_gap(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_rel_mip_gap_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_rev_expected(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_rev_expected_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_solve_iter(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_solve_iter_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_solve_state(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_solve_state_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_solve_time(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_solve_time_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_solve_time_ann(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_solve_time_ann_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_subopt_flag(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_subopt_flag_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_tes_expected(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_tes_expected_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_thermeff_expected(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_thermeff_expected_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_disp_wpb_expected(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_disp_wpb_expected_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_e_ch_tes(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_e_ch_tes_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_eta_map_out(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_Outputs_eta_map_out_mget, self->data_ptr); -} - -static PyObject * -Outputs_get_flux_maps_out(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalCspSolver_Outputs_flux_maps_out_mget, self->data_ptr); -} - -static PyObject * -Outputs_get_gen(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_gen_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_htf_pump_power(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_htf_pump_power_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_is_pc_sb_allowed(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_is_pc_sb_allowed_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_is_pc_su_allowed(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_is_pc_su_allowed_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_is_rec_su_allowed(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_is_rec_su_allowed_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_kwh_per_kw(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalCspSolver_Outputs_kwh_per_kw_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_m_dot_balance(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_m_dot_balance_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_m_dot_pc(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_m_dot_pc_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_m_dot_rec(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_m_dot_rec_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_m_dot_tes_ch(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_m_dot_tes_ch_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_m_dot_tes_dc(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_m_dot_tes_dc_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_n_op_modes(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_n_op_modes_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_op_mode_1(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_op_mode_1_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_op_mode_2(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_op_mode_2_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_op_mode_3(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_op_mode_3_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_operating_modes_a(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_operating_modes_a_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_operating_modes_b(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_operating_modes_b_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_operating_modes_c(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_operating_modes_c_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_pparasi(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_pparasi_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_pricing_mult(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_pricing_mult_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_balance(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_q_balance_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_ch_tes(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_q_ch_tes_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dc_tes(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_q_dc_tes_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dot_est_cr_on(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_q_dot_est_cr_on_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dot_est_cr_su(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_q_dot_est_cr_su_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dot_est_tes_ch(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_q_dot_est_tes_ch_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dot_est_tes_dc(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_q_dot_est_tes_dc_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dot_pc_max(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_q_dot_pc_max_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dot_pc_min(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_q_dot_pc_min_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dot_pc_sb(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_q_dot_pc_sb_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dot_pc_startup(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_q_dot_pc_startup_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dot_pc_target(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_q_dot_pc_target_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_heater(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_q_heater_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_pb(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_q_pb_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_pc_startup(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_q_pc_startup_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_solzen(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_solzen_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_tank_losses(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_tank_losses_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_time_hr(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_time_hr_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_tou_value(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalCspSolver_Outputs_tou_value_aget, self->data_ptr); -} - -static PyGetSetDef Outputs_getset[] = { -{"P_cooling_tower_tot", (getter)Outputs_get_P_cooling_tower_tot,(setter)0, - PyDoc_STR("*sequence*: Parasitic power condenser operation [MWe]"), - NULL}, -{"P_fixed", (getter)Outputs_get_P_fixed,(setter)0, - PyDoc_STR("*sequence*: Parasitic power fixed load [MWe]"), - NULL}, -{"P_out_net", (getter)Outputs_get_P_out_net,(setter)0, - PyDoc_STR("*sequence*: Total electric power to grid [MWe]"), - NULL}, -{"P_plant_balance_tot", (getter)Outputs_get_P_plant_balance_tot,(setter)0, - PyDoc_STR("*sequence*: Parasitic power generation-dependent load [MWe]"), - NULL}, -{"P_tower_pump", (getter)Outputs_get_P_tower_pump,(setter)0, - PyDoc_STR("*sequence*: Parasitic power receiver/tower HTF pump [MWe]"), - NULL}, -{"Q_thermal", (getter)Outputs_get_Q_thermal,(setter)0, - PyDoc_STR("*sequence*: Rec. thermal power to HTF less piping loss [MWt]"), - NULL}, -{"T_tes_cold", (getter)Outputs_get_T_tes_cold,(setter)0, - PyDoc_STR("*sequence*: TES cold temperature [C]"), - NULL}, -{"T_tes_hot", (getter)Outputs_get_T_tes_hot,(setter)0, - PyDoc_STR("*sequence*: TES hot temperature [C]"), - NULL}, -{"annual_W_cycle_gross", (getter)Outputs_get_annual_W_cycle_gross,(setter)0, - PyDoc_STR("*float*: Electrical source - Power cycle gross output [kWhe]"), - NULL}, -{"annual_energy", (getter)Outputs_get_annual_energy,(setter)0, - PyDoc_STR("*float*: Annual total electric power to grid [kWhe]"), - NULL}, -{"annual_energy_distribution_time", (getter)Outputs_get_annual_energy_distribution_time,(setter)0, - PyDoc_STR("*sequence[sequence]*: Annual energy production as function of time [kW]"), - NULL}, -{"annual_total_water_use", (getter)Outputs_get_annual_total_water_use,(setter)0, - PyDoc_STR("*float*: Total Annual Water Usage: cycle + mirror washing [m3]"), - NULL}, -{"beam", (getter)Outputs_get_beam,(setter)0, - PyDoc_STR("*sequence*: Resource Beam normal irradiance [W/m2]"), - NULL}, -{"capacity_factor", (getter)Outputs_get_capacity_factor,(setter)0, - PyDoc_STR("*float*: Capacity factor [%]"), - NULL}, -{"conversion_factor", (getter)Outputs_get_conversion_factor,(setter)0, - PyDoc_STR("*float*: Gross to Net Conversion Factor [%]"), - NULL}, -{"defocus", (getter)Outputs_get_defocus,(setter)0, - PyDoc_STR("*sequence*: Field optical focus fraction"), - NULL}, -{"disp_iter_ann", (getter)Outputs_get_disp_iter_ann,(setter)0, - PyDoc_STR("*float*: Annual sum of dispatch solver iterations"), - NULL}, -{"disp_obj_relax", (getter)Outputs_get_disp_obj_relax,(setter)0, - PyDoc_STR("*sequence*: Dispatch objective function - relaxed max"), - NULL}, -{"disp_objective", (getter)Outputs_get_disp_objective,(setter)0, - PyDoc_STR("*sequence*: Dispatch objective function value"), - NULL}, -{"disp_objective_ann", (getter)Outputs_get_disp_objective_ann,(setter)0, - PyDoc_STR("*float*: Annual sum of dispatch objective func. value"), - NULL}, -{"disp_pceff_expected", (getter)Outputs_get_disp_pceff_expected,(setter)0, - PyDoc_STR("*sequence*: Dispatch expected power cycle efficiency adj."), - NULL}, -{"disp_presolve_nconstr", (getter)Outputs_get_disp_presolve_nconstr,(setter)0, - PyDoc_STR("*sequence*: Dispatch number of constraints in problem"), - NULL}, -{"disp_presolve_nconstr_ann", (getter)Outputs_get_disp_presolve_nconstr_ann,(setter)0, - PyDoc_STR("*float*: Annual sum of dispatch problem constraint count"), - NULL}, -{"disp_presolve_nvar", (getter)Outputs_get_disp_presolve_nvar,(setter)0, - PyDoc_STR("*sequence*: Dispatch number of variables in problem"), - NULL}, -{"disp_presolve_nvar_ann", (getter)Outputs_get_disp_presolve_nvar_ann,(setter)0, - PyDoc_STR("*float*: Annual sum of dispatch problem variable count"), - NULL}, -{"disp_qpbsu_expected", (getter)Outputs_get_disp_qpbsu_expected,(setter)0, - PyDoc_STR("*sequence*: Dispatch expected power cycle startup energy [MWht]"), - NULL}, -{"disp_qsf_expected", (getter)Outputs_get_disp_qsf_expected,(setter)0, - PyDoc_STR("*sequence*: Dispatch expected solar field available energy [MWt]"), - NULL}, -{"disp_qsfprod_expected", (getter)Outputs_get_disp_qsfprod_expected,(setter)0, - PyDoc_STR("*sequence*: Dispatch expected solar field generation [MWt]"), - NULL}, -{"disp_qsfsu_expected", (getter)Outputs_get_disp_qsfsu_expected,(setter)0, - PyDoc_STR("*sequence*: Dispatch expected solar field startup enegy [MWt]"), - NULL}, -{"disp_rel_mip_gap", (getter)Outputs_get_disp_rel_mip_gap,(setter)0, - PyDoc_STR("*sequence*: Dispatch relative MIP gap"), - NULL}, -{"disp_rev_expected", (getter)Outputs_get_disp_rev_expected,(setter)0, - PyDoc_STR("*sequence*: Dispatch expected revenue factor"), - NULL}, -{"disp_solve_iter", (getter)Outputs_get_disp_solve_iter,(setter)0, - PyDoc_STR("*sequence*: Dispatch iterations count"), - NULL}, -{"disp_solve_state", (getter)Outputs_get_disp_solve_state,(setter)0, - PyDoc_STR("*sequence*: Dispatch solver state"), - NULL}, -{"disp_solve_time", (getter)Outputs_get_disp_solve_time,(setter)0, - PyDoc_STR("*sequence*: Dispatch solver time [sec]"), - NULL}, -{"disp_solve_time_ann", (getter)Outputs_get_disp_solve_time_ann,(setter)0, - PyDoc_STR("*float*: Annual sum of dispatch solver time"), - NULL}, -{"disp_subopt_flag", (getter)Outputs_get_disp_subopt_flag,(setter)0, - PyDoc_STR("*sequence*: Dispatch suboptimal solution flag"), - NULL}, -{"disp_tes_expected", (getter)Outputs_get_disp_tes_expected,(setter)0, - PyDoc_STR("*sequence*: Dispatch expected TES charge level [MWht]"), - NULL}, -{"disp_thermeff_expected", (getter)Outputs_get_disp_thermeff_expected,(setter)0, - PyDoc_STR("*sequence*: Dispatch expected SF thermal efficiency adj."), - NULL}, -{"disp_wpb_expected", (getter)Outputs_get_disp_wpb_expected,(setter)0, - PyDoc_STR("*sequence*: Dispatch expected power generation [MWe]"), - NULL}, -{"e_ch_tes", (getter)Outputs_get_e_ch_tes,(setter)0, - PyDoc_STR("*sequence*: TES charge state [MWht]"), - NULL}, -{"eta_map_out", (getter)Outputs_get_eta_map_out,(setter)0, - PyDoc_STR("*sequence[sequence]*: Solar field optical efficiencies"), - NULL}, -{"flux_maps_out", (getter)Outputs_get_flux_maps_out,(setter)0, - PyDoc_STR("*sequence[sequence]*: Flux map intensities"), - NULL}, -{"gen", (getter)Outputs_get_gen,(setter)0, - PyDoc_STR("*sequence*: Total electric power to grid w/ avail. derate [kWe]"), - NULL}, -{"htf_pump_power", (getter)Outputs_get_htf_pump_power,(setter)0, - PyDoc_STR("*sequence*: Parasitic power TES and Cycle HTF pump [MWe]"), - NULL}, -{"is_pc_sb_allowed", (getter)Outputs_get_is_pc_sb_allowed,(setter)0, - PyDoc_STR("*sequence*: is power cycle standby allowed"), - NULL}, -{"is_pc_su_allowed", (getter)Outputs_get_is_pc_su_allowed,(setter)0, - PyDoc_STR("*sequence*: is power cycle startup allowed"), - NULL}, -{"is_rec_su_allowed", (getter)Outputs_get_is_rec_su_allowed,(setter)0, - PyDoc_STR("*sequence*: is receiver startup allowed"), - NULL}, -{"kwh_per_kw", (getter)Outputs_get_kwh_per_kw,(setter)0, - PyDoc_STR("*float*: First year kWh/kW [kWh/kW]"), - NULL}, -{"m_dot_balance", (getter)Outputs_get_m_dot_balance,(setter)0, - PyDoc_STR("*sequence*: Relative mass flow balance error"), - NULL}, -{"m_dot_pc", (getter)Outputs_get_m_dot_pc,(setter)0, - PyDoc_STR("*sequence*: PC HTF mass flow rate [kg/hr]"), - NULL}, -{"m_dot_rec", (getter)Outputs_get_m_dot_rec,(setter)0, - PyDoc_STR("*sequence*: Rec. mass flow rate [kg/hr]"), - NULL}, -{"m_dot_tes_ch", (getter)Outputs_get_m_dot_tes_ch,(setter)0, - PyDoc_STR("*sequence*: TES charge mass flow rate [kg/hr]"), - NULL}, -{"m_dot_tes_dc", (getter)Outputs_get_m_dot_tes_dc,(setter)0, - PyDoc_STR("*sequence*: TES discharge mass flow rate [kg/hr]"), - NULL}, -{"n_op_modes", (getter)Outputs_get_n_op_modes,(setter)0, - PyDoc_STR("*sequence*: Operating modes in reporting timestep"), - NULL}, -{"op_mode_1", (getter)Outputs_get_op_mode_1,(setter)0, - PyDoc_STR("*sequence*: 1st operating mode"), - NULL}, -{"op_mode_2", (getter)Outputs_get_op_mode_2,(setter)0, - PyDoc_STR("*sequence*: 2nd op. mode, if applicable"), - NULL}, -{"op_mode_3", (getter)Outputs_get_op_mode_3,(setter)0, - PyDoc_STR("*sequence*: 3rd op. mode, if applicable"), - NULL}, -{"operating_modes_a", (getter)Outputs_get_operating_modes_a,(setter)0, - PyDoc_STR("*sequence*: First 3 operating modes tried"), - NULL}, -{"operating_modes_b", (getter)Outputs_get_operating_modes_b,(setter)0, - PyDoc_STR("*sequence*: Next 3 operating modes tried"), - NULL}, -{"operating_modes_c", (getter)Outputs_get_operating_modes_c,(setter)0, - PyDoc_STR("*sequence*: Final 3 operating modes tried"), - NULL}, -{"pparasi", (getter)Outputs_get_pparasi,(setter)0, - PyDoc_STR("*sequence*: Parasitic power heliostat drives [MWe]"), - NULL}, -{"pricing_mult", (getter)Outputs_get_pricing_mult,(setter)0, - PyDoc_STR("*sequence*: PPA price multiplier"), - NULL}, -{"q_balance", (getter)Outputs_get_q_balance,(setter)0, - PyDoc_STR("*sequence*: Relative energy balance error"), - NULL}, -{"q_ch_tes", (getter)Outputs_get_q_ch_tes,(setter)0, - PyDoc_STR("*sequence*: TES charge thermal power [MWt]"), - NULL}, -{"q_dc_tes", (getter)Outputs_get_q_dc_tes,(setter)0, - PyDoc_STR("*sequence*: TES discharge thermal power [MWt]"), - NULL}, -{"q_dot_est_cr_on", (getter)Outputs_get_q_dot_est_cr_on,(setter)0, - PyDoc_STR("*sequence*: Estimate rec. thermal power TO HTF [MWt]"), - NULL}, -{"q_dot_est_cr_su", (getter)Outputs_get_q_dot_est_cr_su,(setter)0, - PyDoc_STR("*sequence*: Estimate rec. startup thermal power [MWt]"), - NULL}, -{"q_dot_est_tes_ch", (getter)Outputs_get_q_dot_est_tes_ch,(setter)0, - PyDoc_STR("*sequence*: Estimate max TES charge thermal power [MWt]"), - NULL}, -{"q_dot_est_tes_dc", (getter)Outputs_get_q_dot_est_tes_dc,(setter)0, - PyDoc_STR("*sequence*: Estimate max TES discharge thermal power [MWt]"), - NULL}, -{"q_dot_pc_max", (getter)Outputs_get_q_dot_pc_max,(setter)0, - PyDoc_STR("*sequence*: Max thermal power to PC [MWt]"), - NULL}, -{"q_dot_pc_min", (getter)Outputs_get_q_dot_pc_min,(setter)0, - PyDoc_STR("*sequence*: Thermal power for PC min operation [MWt]"), - NULL}, -{"q_dot_pc_sb", (getter)Outputs_get_q_dot_pc_sb,(setter)0, - PyDoc_STR("*sequence*: Thermal power for PC standby [MWt]"), - NULL}, -{"q_dot_pc_startup", (getter)Outputs_get_q_dot_pc_startup,(setter)0, - PyDoc_STR("*sequence*: PC startup thermal power [MWt]"), - NULL}, -{"q_dot_pc_target", (getter)Outputs_get_q_dot_pc_target,(setter)0, - PyDoc_STR("*sequence*: Target thermal power to PC [MWt]"), - NULL}, -{"q_heater", (getter)Outputs_get_q_heater,(setter)0, - PyDoc_STR("*sequence*: TES freeze protection power [MWe]"), - NULL}, -{"q_pb", (getter)Outputs_get_q_pb,(setter)0, - PyDoc_STR("*sequence*: PC input energy [MWt]"), - NULL}, -{"q_pc_startup", (getter)Outputs_get_q_pc_startup,(setter)0, - PyDoc_STR("*sequence*: PC startup thermal energy [MWht]"), - NULL}, -{"solzen", (getter)Outputs_get_solzen,(setter)0, - PyDoc_STR("*sequence*: Resource Solar Zenith [deg]"), - NULL}, -{"tank_losses", (getter)Outputs_get_tank_losses,(setter)0, - PyDoc_STR("*sequence*: TES thermal losses [MWt]"), - NULL}, -{"time_hr", (getter)Outputs_get_time_hr,(setter)0, - PyDoc_STR("*sequence*: Time at end of timestep [hr]"), - NULL}, -{"tou_value", (getter)Outputs_get_tou_value,(setter)0, - PyDoc_STR("*sequence*: CSP operating Time-of-use value"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject Outputs_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalCspSolver.Outputs", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - Outputs_methods, /*tp_methods*/ - 0, /*tp_members*/ - Outputs_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - -/* - * TroughPhysicalCspSolver - */ - -static PyTypeObject TroughPhysicalCspSolver_Type; - -static CmodObject * -newTroughPhysicalCspSolverObject(void* data_ptr) -{ - CmodObject *self; - self = PyObject_New(CmodObject, &TroughPhysicalCspSolver_Type); - - PySAM_TECH_ATTR() - - PyObject* Weather_obj = Weather_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "Weather", Weather_obj); - Py_DECREF(Weather_obj); - - PyObject* Trough_obj = Trough_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "Trough", Trough_obj); - Py_DECREF(Trough_obj); - - PyObject* TimeOfDelivery_obj = TimeOfDelivery_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "TimeOfDelivery", TimeOfDelivery_obj); - Py_DECREF(TimeOfDelivery_obj); - - PyObject* SolarField_obj = SolarField_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "SolarField", SolarField_obj); - Py_DECREF(SolarField_obj); - - PyObject* Controller_obj = Controller_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "Controller", Controller_obj); - Py_DECREF(Controller_obj); - - PyObject* TouTranslator_obj = TouTranslator_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "TouTranslator", TouTranslator_obj); - Py_DECREF(TouTranslator_obj); - - PyObject* Powerblock_obj = Powerblock_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "Powerblock", Powerblock_obj); - Py_DECREF(Powerblock_obj); - - PyObject* UserDefinedPC_obj = UserDefinedPC_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "UserDefinedPC", UserDefinedPC_obj); - Py_DECREF(UserDefinedPC_obj); - - PyObject* Enet_obj = Enet_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "Enet", Enet_obj); - Py_DECREF(Enet_obj); - - PyObject* AdjustmentFactorsModule = PyImport_ImportModule("AdjustmentFactors"); - - PyObject* data_cap = PyCapsule_New(self->data_ptr, NULL, NULL); - PyObject* Adjust_obj = PyObject_CallMethod(AdjustmentFactorsModule, "new", "(O)", data_cap); - Py_XDECREF(data_cap); - Py_XDECREF(AdjustmentFactorsModule); - - if (!Adjust_obj){ - PyErr_SetString(PyExc_Exception, "Couldn't create AdjustmentFactorsObject\n"); - return NULL; - } - - PyDict_SetItemString(attr_dict, "AdjustmentFactors", Adjust_obj); - Py_DECREF(Adjust_obj); - - PyObject* Outputs_obj = Outputs_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "Outputs", Outputs_obj); - Py_DECREF(Outputs_obj); - - return self; -} - -/* TroughPhysicalCspSolver methods */ - -static void -TroughPhysicalCspSolver_dealloc(CmodObject *self) -{ - Py_XDECREF(self->x_attr); - - if (!self->data_owner_ptr) { - SAM_error error = new_error(); - SAM_table_destruct(self->data_ptr, &error); - PySAM_has_error(error); - } - PyObject_Del(self); -} - - -static PyObject * -TroughPhysicalCspSolver_get_data_ptr(CmodObject *self, PyObject *args) -{ - PyObject* ptr = PyLong_FromVoidPtr((void*)self->data_ptr); - return ptr; -} - - -static PyObject * -TroughPhysicalCspSolver_execute(CmodObject *self, PyObject *args) -{ - int verbosity = 0; - - if (!PyArg_ParseTuple(args, "|i", &verbosity)) - return NULL; - - SAM_error error = new_error(); - SAM_TroughPhysicalCspSolver_execute(self->data_ptr, verbosity, &error); - if (PySAM_has_error(error )) return NULL; - Py_INCREF(Py_None); - return Py_None; -} - - -static PyObject * -TroughPhysicalCspSolver_assign(CmodObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_nested_dict((PyObject*)self, self->x_attr, self->data_ptr, dict, "TroughPhysicalCspSolver")) - return NULL; - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -TroughPhysicalCspSolver_replace(CmodObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_replace_from_nested_dict((PyObject*)self, self->x_attr, self->data_ptr, dict, "TroughPhysicalCspSolver")) - return NULL; - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -TroughPhysicalCspSolver_export(CmodObject *self, PyObject *args) -{ - return PySAM_export_to_nested_dict((PyObject *) self, self->x_attr); -} - -static PyObject * -TroughPhysicalCspSolver_value(CmodObject *self, PyObject *args) -{ - return Cmod_value(self, args); -} - -static PyObject * -TroughPhysicalCspSolver_unassign(CmodObject *self, PyObject *args) -{ - return Cmod_unassign(self, args); -} - -static PyMethodDef TroughPhysicalCspSolver_methods[] = { - {"execute", (PyCFunction)TroughPhysicalCspSolver_execute, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"assign", (PyCFunction)TroughPhysicalCspSolver_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'weather': { var: val, ...}, ...}``")}, - {"replace", (PyCFunction)TroughPhysicalCspSolver_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from nested dictionary, except for Outputs. Unassigns all values in each Group then assigns from the input dict.\n\n``nested_dict = { 'weather': { var: val, ...}, ...}``")}, - {"export", (PyCFunction)TroughPhysicalCspSolver_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into nested dictionary")}, - {"value", (PyCFunction)TroughPhysicalCspSolver_value, METH_VARARGS, - PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, - {"unassign", (PyCFunction)TroughPhysicalCspSolver_unassign, METH_VARARGS, - PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, - {"get_data_ptr", (PyCFunction)TroughPhysicalCspSolver_get_data_ptr, METH_VARARGS, - PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -TroughPhysicalCspSolver_getattro(CmodObject *self, PyObject *name) -{ - return PySAM_get_attr((PyObject*) self, (PyObject*) self->x_attr, name); -} - -static int -TroughPhysicalCspSolver_setattr(CmodObject *self, const char *name, PyObject *v) -{ - return PySAM_set_attr((PyObject*)self, (PyObject*)self->x_attr, name, v); -} - -static PyTypeObject TroughPhysicalCspSolver_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalCspSolver", /*tp_name*/ - sizeof(CmodObject),/*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - (destructor)TroughPhysicalCspSolver_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - (setattrfunc)TroughPhysicalCspSolver_setattr, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - (getattrofunc)TroughPhysicalCspSolver_getattro, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - "This class contains all the variable information for running a simulation. Variables are grouped together in the subclasses as properties. If property assignments are the wrong type, an error is thrown.", /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - TroughPhysicalCspSolver_methods, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - -/* --------------------------------------------------------------------- */ - - -/* Function of no arguments returning new TroughPhysicalCspSolver object */ - -static PyObject * -TroughPhysicalCspSolver_new(PyObject *self, PyObject *args) -{ - CmodObject *rv; - rv = newTroughPhysicalCspSolverObject(0); - if (rv == NULL) - return NULL; - - rv->data_owner_ptr = NULL; - return (PyObject *)rv; -} - -static PyObject * -TroughPhysicalCspSolver_wrap(PyObject *self, PyObject *args) -{ - CmodObject *rv; - long long int ptr = 0; // 64 bit arch - if (!PyArg_ParseTuple(args, "L:wrap", &ptr)){ - PyErr_BadArgument(); - return NULL; - } - rv = newTroughPhysicalCspSolverObject((void*)ptr); - if (rv == NULL) - return NULL; - - rv->data_owner_ptr = NULL; - return (PyObject *)rv; -} - -static PyObject * -TroughPhysicalCspSolver_default(PyObject *self, PyObject *args) -{ - CmodObject *rv; - char* def = 0; - if (!PyArg_ParseTuple(args, "s:default", &def)){ - PyErr_BadArgument(); - return NULL; - } - rv = newTroughPhysicalCspSolverObject(0); - if (rv == NULL) - return NULL; - - rv->data_owner_ptr = NULL; - if (PySAM_load_defaults((PyObject*)rv, rv->x_attr, rv->data_ptr, "TroughPhysicalCspSolver", def) < 0) { - TroughPhysicalCspSolver_dealloc(rv); - return NULL; - } - return (PyObject *)rv; -} - -static PyObject * -TroughPhysicalCspSolver_from_existing(PyObject *self, PyObject *args) -{ - CmodObject *rv; - PyObject * module = 0; - char* def = 0; - if (!PyArg_ParseTuple(args, "O|s:from_existing", &module, &def)){ - PyErr_BadArgument(); - return NULL; - } - CmodObject *module_obj = (CmodObject *)module; - SAM_table ptr = module_obj->data_ptr; - - // do a rough validity check on the data by checking its size - SAM_error error = new_error(); - int data_size = SAM_table_size(ptr, &error); - if (PySAM_has_error(error)) - goto fail; - if (data_size < 0) - goto fail; - - rv = newTroughPhysicalCspSolverObject((void*)ptr); - if (rv == NULL) - goto fail; - rv->data_owner_ptr = module; - if (!def) - return (PyObject *)rv; - PySAM_load_defaults((PyObject*)rv, rv->x_attr, rv->data_ptr, "TroughPhysicalCspSolver", def); - return (PyObject *)rv; - - fail: - Py_DECREF(module); - return NULL; -}/* ---------- */ - - -/* List of functions defined in the module */ - -static PyMethodDef TroughPhysicalCspSolverModule_methods[] = { - {"new", TroughPhysicalCspSolver_new, METH_VARARGS, - PyDoc_STR("new() -> TroughPhysicalCspSolver")}, - {"default", TroughPhysicalCspSolver_default, METH_VARARGS, - PyDoc_STR("default(config) -> TroughPhysicalCspSolver\n\nLoad defaults for the configuration ``config``. Available configurations are:\n\n- None\n\n.. note::\n\n Some inputs do not have default values and may be assigned a value from the variable's **Required** attribute. See variable attribute descriptions below.")}, - {"wrap", TroughPhysicalCspSolver_wrap, METH_VARARGS, - PyDoc_STR("wrap(ssc_data_t) -> TroughPhysicalCspSolver\n\nLoad data from a PySSC object.\n\n.. warning::\n\n Do not call PySSC.data_free on the ssc_data_t provided to ``wrap()``")}, - {"from_existing", TroughPhysicalCspSolver_from_existing, METH_VARARGS, - PyDoc_STR("from_existing(data, optional config) -> TroughPhysicalCspSolver\n\nShare data with an existing PySAM class. If ``optional config`` is a valid configuration name, load the module's defaults for that configuration.")}, - {NULL, NULL} /* sentinel */ -}; - -PyDoc_STRVAR(module_doc, - "TroughPhysicalCspSolver"); - - -static int -TroughPhysicalCspSolverModule_exec(PyObject *m) -{ - /* Finalize the type object including setting type of the new type - * object; doing it here is required for portability, too. */ - - if (PySAM_load_lib(m) < 0) goto fail; - - TroughPhysicalCspSolver_Type.tp_dict = PyDict_New(); - if (!TroughPhysicalCspSolver_Type.tp_dict) { goto fail; } - - /// Add the Weather type object to TroughPhysicalCspSolver_Type - if (PyType_Ready(&Weather_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalCspSolver_Type.tp_dict, - "Weather", - (PyObject*)&Weather_Type); - Py_DECREF(&Weather_Type); - - /// Add the Trough type object to TroughPhysicalCspSolver_Type - if (PyType_Ready(&Trough_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalCspSolver_Type.tp_dict, - "Trough", - (PyObject*)&Trough_Type); - Py_DECREF(&Trough_Type); - - /// Add the TimeOfDelivery type object to TroughPhysicalCspSolver_Type - if (PyType_Ready(&TimeOfDelivery_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalCspSolver_Type.tp_dict, - "TimeOfDelivery", - (PyObject*)&TimeOfDelivery_Type); - Py_DECREF(&TimeOfDelivery_Type); - - /// Add the SolarField type object to TroughPhysicalCspSolver_Type - if (PyType_Ready(&SolarField_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalCspSolver_Type.tp_dict, - "SolarField", - (PyObject*)&SolarField_Type); - Py_DECREF(&SolarField_Type); - - /// Add the Controller type object to TroughPhysicalCspSolver_Type - if (PyType_Ready(&Controller_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalCspSolver_Type.tp_dict, - "Controller", - (PyObject*)&Controller_Type); - Py_DECREF(&Controller_Type); - - /// Add the TouTranslator type object to TroughPhysicalCspSolver_Type - if (PyType_Ready(&TouTranslator_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalCspSolver_Type.tp_dict, - "TouTranslator", - (PyObject*)&TouTranslator_Type); - Py_DECREF(&TouTranslator_Type); - - /// Add the Powerblock type object to TroughPhysicalCspSolver_Type - if (PyType_Ready(&Powerblock_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalCspSolver_Type.tp_dict, - "Powerblock", - (PyObject*)&Powerblock_Type); - Py_DECREF(&Powerblock_Type); - - /// Add the UserDefinedPC type object to TroughPhysicalCspSolver_Type - if (PyType_Ready(&UserDefinedPC_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalCspSolver_Type.tp_dict, - "UserDefinedPC", - (PyObject*)&UserDefinedPC_Type); - Py_DECREF(&UserDefinedPC_Type); - - /// Add the Enet type object to TroughPhysicalCspSolver_Type - if (PyType_Ready(&Enet_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalCspSolver_Type.tp_dict, - "Enet", - (PyObject*)&Enet_Type); - Py_DECREF(&Enet_Type); - - /// Add the Outputs type object to TroughPhysicalCspSolver_Type - if (PyType_Ready(&Outputs_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalCspSolver_Type.tp_dict, - "Outputs", - (PyObject*)&Outputs_Type); - Py_DECREF(&Outputs_Type); - - /// Add the TroughPhysicalCspSolver type object to the module - if (PyType_Ready(&TroughPhysicalCspSolver_Type) < 0) { goto fail; } - PyModule_AddObject(m, - "TroughPhysicalCspSolver", - (PyObject*)&TroughPhysicalCspSolver_Type); - - return 0; - fail: - Py_XDECREF(m); - return -1; -} - -static struct PyModuleDef_Slot TroughPhysicalCspSolverModule_slots[] = { - {Py_mod_exec, TroughPhysicalCspSolverModule_exec}, - {0, NULL}, -}; - -static struct PyModuleDef TroughPhysicalCspSolverModule = { - PyModuleDef_HEAD_INIT, - "TroughPhysicalCspSolver", - module_doc, - 0, - TroughPhysicalCspSolverModule_methods, - TroughPhysicalCspSolverModule_slots, - NULL, - NULL, - NULL -}; - -/* Export function for the module */ - -PyMODINIT_FUNC -PyInit_TroughPhysicalCspSolver(void) -{ - return PyModuleDef_Init(&TroughPhysicalCspSolverModule); -} \ No newline at end of file diff --git a/modules/TroughPhysicalIph.c b/modules/TroughPhysicalIph.c index 80577a0..8c25b75 100644 --- a/modules/TroughPhysicalIph.c +++ b/modules/TroughPhysicalIph.c @@ -1445,6 +1445,30 @@ SolarField_set_eta_pump(VarGroupObject *self, PyObject *value, void *closure) return PySAM_double_setter(value, SAM_TroughPhysicalIph_SolarField_eta_pump_nset, self->data_ptr); } +static PyObject * +SolarField_get_f_htfmax(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysicalIph_SolarField_f_htfmax_nget, self->data_ptr); +} + +static int +SolarField_set_f_htfmax(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysicalIph_SolarField_f_htfmax_nset, self->data_ptr); +} + +static PyObject * +SolarField_get_f_htfmin(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysicalIph_SolarField_f_htfmin_nget, self->data_ptr); +} + +static int +SolarField_set_f_htfmin(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysicalIph_SolarField_f_htfmin_nset, self->data_ptr); +} + static PyObject * SolarField_get_field_fl_props(VarGroupObject *self, void *closure) { @@ -1721,6 +1745,18 @@ SolarField_set_tilt(VarGroupObject *self, PyObject *value, void *closure) return PySAM_double_setter(value, SAM_TroughPhysicalIph_SolarField_tilt_nset, self->data_ptr); } +static PyObject * +SolarField_get_use_abs_or_rel_mdot_limit(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysicalIph_SolarField_use_abs_or_rel_mdot_limit_nget, self->data_ptr); +} + +static int +SolarField_set_use_abs_or_rel_mdot_limit(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_TroughPhysicalIph_SolarField_use_abs_or_rel_mdot_limit_nset, self->data_ptr); +} + static PyObject * SolarField_get_wind_stow_speed(VarGroupObject *self, void *closure) { @@ -1962,14 +1998,20 @@ static PyGetSetDef SolarField_getset[] = { {"eta_pump", (getter)SolarField_get_eta_pump,(setter)SolarField_set_eta_pump, PyDoc_STR("*float*: HTF pump efficiency [none]\n\n**Required:**\nTrue"), NULL}, +{"f_htfmax", (getter)SolarField_get_f_htfmax,(setter)SolarField_set_f_htfmax, + PyDoc_STR("*float*: Maximum loop mass flow rate fraction of design\n\n**Required:**\nRequired if use_abs_or_rel_mdot_limit=1"), + NULL}, +{"f_htfmin", (getter)SolarField_get_f_htfmin,(setter)SolarField_set_f_htfmin, + PyDoc_STR("*float*: Minimum loop mass flow rate fraction of design\n\n**Required:**\nRequired if use_abs_or_rel_mdot_limit=1"), + NULL}, {"field_fl_props", (getter)SolarField_get_field_fl_props,(setter)SolarField_set_field_fl_props, PyDoc_STR("*sequence[sequence]*: User defined field fluid property data [-]\n\n**Required:**\nTrue"), NULL}, {"m_dot_htfmax", (getter)SolarField_get_m_dot_htfmax,(setter)SolarField_set_m_dot_htfmax, - PyDoc_STR("*float*: Maximum loop HTF flow rate [kg/s]\n\n**Required:**\nTrue"), + PyDoc_STR("*float*: Maximum loop HTF flow rate [kg/s]\n\n**Required:**\nRequired if use_abs_or_rel_mdot_limit=0"), NULL}, {"m_dot_htfmin", (getter)SolarField_get_m_dot_htfmin,(setter)SolarField_set_m_dot_htfmin, - PyDoc_STR("*float*: Minimum loop HTF flow rate [kg/s]\n\n**Required:**\nTrue"), + PyDoc_STR("*float*: Minimum loop HTF flow rate [kg/s]\n\n**Required:**\nRequired if use_abs_or_rel_mdot_limit=0"), NULL}, {"mc_bal_cold", (getter)SolarField_get_mc_bal_cold,(setter)SolarField_set_mc_bal_cold, PyDoc_STR("*float*: Heat capacity of the balance of plant on the cold side [kWht/K-MWt]\n\n**Required:**\nTrue"), @@ -2031,6 +2073,9 @@ static PyGetSetDef SolarField_getset[] = { {"tilt", (getter)SolarField_get_tilt,(setter)SolarField_set_tilt, PyDoc_STR("*float*: Tilt angle of surface/axis [none]\n\n**Required:**\nTrue"), NULL}, +{"use_abs_or_rel_mdot_limit", (getter)SolarField_get_use_abs_or_rel_mdot_limit,(setter)SolarField_set_use_abs_or_rel_mdot_limit, + PyDoc_STR("*float*: Use mass flow abs (0) or relative (1) limits\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, {"wind_stow_speed", (getter)SolarField_get_wind_stow_speed,(setter)SolarField_set_wind_stow_speed, PyDoc_STR("*float*: Trough wind stow speed [m/s]\n\n**Required:**\nFalse. Automatically set to 50 if not assigned explicitly or loaded from defaults."), NULL}, @@ -2693,18 +2738,6 @@ Tou_set_dispatch_sched_weekend(VarGroupObject *self, PyObject *value, void *clos return PySAM_matrix_setter(value, SAM_TroughPhysicalIph_Tou_dispatch_sched_weekend_mset, self->data_ptr); } -static PyObject * -Tou_get_dispatch_series(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalIph_Tou_dispatch_series_aget, self->data_ptr); -} - -static int -Tou_set_dispatch_series(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalIph_Tou_dispatch_series_aset, self->data_ptr); -} - static PyObject * Tou_get_f_turb_tou_periods(VarGroupObject *self, void *closure) { @@ -2729,18 +2762,6 @@ Tou_set_is_ampl_engine(VarGroupObject *self, PyObject *value, void *closure) return PySAM_double_setter(value, SAM_TroughPhysicalIph_Tou_is_ampl_engine_nset, self->data_ptr); } -static PyObject * -Tou_get_is_dispatch_series(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalIph_Tou_is_dispatch_series_nget, self->data_ptr); -} - -static int -Tou_set_is_dispatch_series(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalIph_Tou_is_dispatch_series_nset, self->data_ptr); -} - static PyObject * Tou_get_is_timestep_load_fractions(VarGroupObject *self, void *closure) { @@ -2871,18 +2892,12 @@ static PyGetSetDef Tou_getset[] = { {"dispatch_sched_weekend", (getter)Tou_get_dispatch_sched_weekend,(setter)Tou_set_dispatch_sched_weekend, PyDoc_STR("*sequence[sequence]*: 12x24 PPA pricing Weekend schedule\n\n**Required:**\nRequired if ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1"), NULL}, -{"dispatch_series", (getter)Tou_get_dispatch_series,(setter)Tou_set_dispatch_series, - PyDoc_STR("*sequence*: Time series dispatch factors"), - NULL}, {"f_turb_tou_periods", (getter)Tou_get_f_turb_tou_periods,(setter)Tou_set_f_turb_tou_periods, PyDoc_STR("*sequence*: Dispatch logic for turbine load fraction [-]\n\n**Required:**\nTrue"), NULL}, {"is_ampl_engine", (getter)Tou_get_is_ampl_engine,(setter)Tou_set_is_ampl_engine, PyDoc_STR("*float*: Run dispatch optimization with external AMPL engine [-]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, -{"is_dispatch_series", (getter)Tou_get_is_dispatch_series,(setter)Tou_set_is_dispatch_series, - PyDoc_STR("*float*: Use time-series dispatch factors\n\n**Required:**\nFalse. Automatically set to 1 if not assigned explicitly or loaded from defaults."), - NULL}, {"is_timestep_load_fractions", (getter)Tou_get_is_timestep_load_fractions,(setter)Tou_set_is_timestep_load_fractions, PyDoc_STR("*float*: Use turbine load fraction for each timestep instead of block dispatch?\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, @@ -4508,143 +4523,6 @@ static PyTypeObject TowerAndReceiver_Type = { }; -/* - * SolarResourceData Group - */ - -static PyTypeObject SolarResourceData_Type; - -static PyObject * -SolarResourceData_new(SAM_TroughPhysicalIph data_ptr) -{ - PyObject* new_obj = SolarResourceData_Type.tp_alloc(&SolarResourceData_Type,0); - - VarGroupObject* SolarResourceData_obj = (VarGroupObject*)new_obj; - - SolarResourceData_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* SolarResourceData methods */ - -static PyObject * -SolarResourceData_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalIph", "SolarResourceData")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -SolarResourceData_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &SolarResourceData_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalIph", "SolarResourceData")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -SolarResourceData_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &SolarResourceData_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef SolarResourceData_methods[] = { - {"assign", (PyCFunction)SolarResourceData_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``SolarResourceData_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)SolarResourceData_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``SolarResourceData_vals = { var: val, ...}``")}, - {"export", (PyCFunction)SolarResourceData_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -SolarResourceData_get_lat(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalIph_SolarResourceData_lat_nget, self->data_ptr); -} - -static int -SolarResourceData_set_lat(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalIph_SolarResourceData_lat_nset, self->data_ptr); -} - -static PyGetSetDef SolarResourceData_getset[] = { -{"lat", (getter)SolarResourceData_get_lat,(setter)SolarResourceData_set_lat, - PyDoc_STR("*float*: Latitude [degree]\n\n**Required:**\nTrue"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject SolarResourceData_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalIph.SolarResourceData", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - SolarResourceData_methods, /*tp_methods*/ - 0, /*tp_members*/ - SolarResourceData_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - /* * CapitalCosts Group */ @@ -5683,6 +5561,12 @@ Outputs_get_W_dot_pc_pump(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_TroughPhysicalIph_Outputs_W_dot_pc_pump_aget, self->data_ptr); } +static PyObject * +Outputs_get_W_dot_pump_SS(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysicalIph_Outputs_W_dot_pump_SS_nget, self->data_ptr); +} + static PyObject * Outputs_get_W_dot_sca_track(VarGroupObject *self, void *closure) { @@ -6037,6 +5921,12 @@ Outputs_get_csp_pt_tes_tank_diameter(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_TroughPhysicalIph_Outputs_csp_pt_tes_tank_diameter_nget, self->data_ptr); } +static PyObject * +Outputs_get_dP_sf_SS(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysicalIph_Outputs_dP_sf_SS_nget, self->data_ptr); +} + static PyObject * Outputs_get_defocus(VarGroupObject *self, void *closure) { @@ -6073,6 +5963,18 @@ Outputs_get_e_dot_field_int_energy(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_TroughPhysicalIph_Outputs_e_dot_field_int_energy_aget, self->data_ptr); } +static PyObject * +Outputs_get_f_htfmax_actual(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysicalIph_Outputs_f_htfmax_actual_nget, self->data_ptr); +} + +static PyObject * +Outputs_get_f_htfmin_actual(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysicalIph_Outputs_f_htfmin_actual_nget, self->data_ptr); +} + static PyObject * Outputs_get_field_htf_cp_avg_des(VarGroupObject *self, void *closure) { @@ -6205,6 +6107,18 @@ Outputs_get_m_dot_htf_heat_sink(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_TroughPhysicalIph_Outputs_m_dot_htf_heat_sink_aget, self->data_ptr); } +static PyObject * +Outputs_get_m_dot_htfmax_actual(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysicalIph_Outputs_m_dot_htfmax_actual_nget, self->data_ptr); +} + +static PyObject * +Outputs_get_m_dot_htfmin_actual(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysicalIph_Outputs_m_dot_htfmin_actual_nget, self->data_ptr); +} + static PyObject * Outputs_get_m_dot_loop(VarGroupObject *self, void *closure) { @@ -6247,6 +6161,12 @@ Outputs_get_max_field_flow_velocity(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_TroughPhysicalIph_Outputs_max_field_flow_velocity_nget, self->data_ptr); } +static PyObject * +Outputs_get_max_loop_flow_vel_des(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysicalIph_Outputs_max_loop_flow_vel_des_nget, self->data_ptr); +} + static PyObject * Outputs_get_min_field_flow_velocity(VarGroupObject *self, void *closure) { @@ -6259,6 +6179,12 @@ Outputs_get_min_inner_diameter(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_TroughPhysicalIph_Outputs_min_inner_diameter_nget, self->data_ptr); } +static PyObject * +Outputs_get_min_loop_flow_vel_des(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysicalIph_Outputs_min_loop_flow_vel_des_nget, self->data_ptr); +} + static PyObject * Outputs_get_month(VarGroupObject *self, void *closure) { @@ -6793,6 +6719,18 @@ Outputs_get_twet(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_TroughPhysicalIph_Outputs_twet_aget, self->data_ptr); } +static PyObject * +Outputs_get_vel_loop_max(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysicalIph_Outputs_vel_loop_max_aget, self->data_ptr); +} + +static PyObject * +Outputs_get_vel_loop_min(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_TroughPhysicalIph_Outputs_vel_loop_min_aget, self->data_ptr); +} + static PyObject * Outputs_get_vol_min(VarGroupObject *self, void *closure) { @@ -6896,6 +6834,9 @@ static PyGetSetDef Outputs_getset[] = { {"W_dot_pc_pump", (getter)Outputs_get_W_dot_pc_pump,(setter)0, PyDoc_STR("*sequence*: Heat sink pumping power [MWe]"), NULL}, +{"W_dot_pump_SS", (getter)Outputs_get_W_dot_pump_SS,(setter)0, + PyDoc_STR("*float*: Steady State pumping power [MWe]"), + NULL}, {"W_dot_sca_track", (getter)Outputs_get_W_dot_sca_track,(setter)0, PyDoc_STR("*sequence*: Field collector tracking power [MWe]"), NULL}, @@ -7073,6 +7014,9 @@ static PyGetSetDef Outputs_getset[] = { {"csp_pt_tes_tank_diameter", (getter)Outputs_get_csp_pt_tes_tank_diameter,(setter)0, PyDoc_STR("*float*: Tank diameter [m]"), NULL}, +{"dP_sf_SS", (getter)Outputs_get_dP_sf_SS,(setter)0, + PyDoc_STR("*float*: Steady State field pressure drop [bar]"), + NULL}, {"defocus", (getter)Outputs_get_defocus,(setter)0, PyDoc_STR("*sequence*: Field optical focus fraction"), NULL}, @@ -7091,6 +7035,12 @@ static PyGetSetDef Outputs_getset[] = { {"e_dot_field_int_energy", (getter)Outputs_get_e_dot_field_int_energy,(setter)0, PyDoc_STR("*sequence*: Field change in material/htf internal energy [MWt]"), NULL}, +{"f_htfmax_actual", (getter)Outputs_get_f_htfmax_actual,(setter)0, + PyDoc_STR("*float*: Actual maximum loop mass flow rate fraction of design"), + NULL}, +{"f_htfmin_actual", (getter)Outputs_get_f_htfmin_actual,(setter)0, + PyDoc_STR("*float*: Actual minimum loop mass flow rate fraction of design"), + NULL}, {"field_htf_cp_avg_des", (getter)Outputs_get_field_htf_cp_avg_des,(setter)0, PyDoc_STR("*float*: Field average htf cp at design [kJ/kgK]"), NULL}, @@ -7157,6 +7107,12 @@ static PyGetSetDef Outputs_getset[] = { {"m_dot_htf_heat_sink", (getter)Outputs_get_m_dot_htf_heat_sink,(setter)0, PyDoc_STR("*sequence*: Heat sink HTF mass flow [kg/s]"), NULL}, +{"m_dot_htfmax_actual", (getter)Outputs_get_m_dot_htfmax_actual,(setter)0, + PyDoc_STR("*float*: Actual maximum loop HTF flow rate [kg/s]"), + NULL}, +{"m_dot_htfmin_actual", (getter)Outputs_get_m_dot_htfmin_actual,(setter)0, + PyDoc_STR("*float*: Actual minimum loop HTF flow rate [kg/s]"), + NULL}, {"m_dot_loop", (getter)Outputs_get_m_dot_loop,(setter)0, PyDoc_STR("*sequence*: Receiver mass flow rate [kg/s]"), NULL}, @@ -7178,12 +7134,18 @@ static PyGetSetDef Outputs_getset[] = { {"max_field_flow_velocity", (getter)Outputs_get_max_field_flow_velocity,(setter)0, PyDoc_STR("*float*: Maximum field flow velocity [m/s]"), NULL}, +{"max_loop_flow_vel_des", (getter)Outputs_get_max_loop_flow_vel_des,(setter)0, + PyDoc_STR("*float*: Maximum loop flow velocity at design [m/s]"), + NULL}, {"min_field_flow_velocity", (getter)Outputs_get_min_field_flow_velocity,(setter)0, PyDoc_STR("*float*: Minimum field flow velocity [m/s]"), NULL}, {"min_inner_diameter", (getter)Outputs_get_min_inner_diameter,(setter)0, PyDoc_STR("*float*: Minimum absorber inner diameter in loop [m]"), NULL}, +{"min_loop_flow_vel_des", (getter)Outputs_get_min_loop_flow_vel_des,(setter)0, + PyDoc_STR("*float*: Minimum loop flow velocity at design [m/s]"), + NULL}, {"month", (getter)Outputs_get_month,(setter)0, PyDoc_STR("*sequence*: Resource Month"), NULL}, @@ -7451,6 +7413,12 @@ static PyGetSetDef Outputs_getset[] = { {"twet", (getter)Outputs_get_twet,(setter)0, PyDoc_STR("*sequence*: Resource Wet bulb temperature [C]"), NULL}, +{"vel_loop_max", (getter)Outputs_get_vel_loop_max,(setter)0, + PyDoc_STR("*sequence*: Receiver max HTF velocity in loop [m/s]"), + NULL}, +{"vel_loop_min", (getter)Outputs_get_vel_loop_min,(setter)0, + PyDoc_STR("*sequence*: Receiver min HTF velocity in loop [m/s]"), + NULL}, {"vol_min", (getter)Outputs_get_vol_min,(setter)0, PyDoc_STR("*float*: Minimum Fluid Volume [m3]"), NULL}, @@ -7587,10 +7555,6 @@ newTroughPhysicalIphObject(void* data_ptr) PyDict_SetItemString(attr_dict, "TowerAndReceiver", TowerAndReceiver_obj); Py_DECREF(TowerAndReceiver_obj); - PyObject* SolarResourceData_obj = SolarResourceData_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "SolarResourceData", SolarResourceData_obj); - Py_DECREF(SolarResourceData_obj); - PyObject* CapitalCosts_obj = CapitalCosts_new(self->data_ptr); PyDict_SetItemString(attr_dict, "CapitalCosts", CapitalCosts_obj); Py_DECREF(CapitalCosts_obj); @@ -8017,13 +7981,6 @@ TroughPhysicalIphModule_exec(PyObject *m) (PyObject*)&TowerAndReceiver_Type); Py_DECREF(&TowerAndReceiver_Type); - /// Add the SolarResourceData type object to TroughPhysicalIph_Type - if (PyType_Ready(&SolarResourceData_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalIph_Type.tp_dict, - "SolarResourceData", - (PyObject*)&SolarResourceData_Type); - Py_DECREF(&SolarResourceData_Type); - /// Add the CapitalCosts type object to TroughPhysicalIph_Type if (PyType_Ready(&CapitalCosts_Type) < 0) { goto fail; } PyDict_SetItemString(TroughPhysicalIph_Type.tp_dict, diff --git a/modules/TroughPhysicalProcessHeat.c b/modules/TroughPhysicalProcessHeat.c deleted file mode 100644 index 261dc37..0000000 --- a/modules/TroughPhysicalProcessHeat.c +++ /dev/null @@ -1,5135 +0,0 @@ -#include - -#include -#include - -#include "PySAM_utils.h" - - -/* - * Weather Group - */ - -static PyTypeObject Weather_Type; - -static PyObject * -Weather_new(SAM_TroughPhysicalProcessHeat data_ptr) -{ - PyObject* new_obj = Weather_Type.tp_alloc(&Weather_Type,0); - - VarGroupObject* Weather_obj = (VarGroupObject*)new_obj; - - Weather_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* Weather methods */ - -static PyObject * -Weather_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalProcessHeat", "Weather")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Weather_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &Weather_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalProcessHeat", "Weather")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Weather_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &Weather_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef Weather_methods[] = { - {"assign", (PyCFunction)Weather_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``Weather_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)Weather_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``Weather_vals = { var: val, ...}``")}, - {"export", (PyCFunction)Weather_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -Weather_get_azimuth(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Weather_azimuth_nget, self->data_ptr); -} - -static int -Weather_set_azimuth(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Weather_azimuth_nset, self->data_ptr); -} - -static PyObject * -Weather_get_file_name(VarGroupObject *self, void *closure) -{ - return PySAM_string_getter(SAM_TroughPhysicalProcessHeat_Weather_file_name_sget, self->data_ptr); -} - -static int -Weather_set_file_name(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_string_setter(value, SAM_TroughPhysicalProcessHeat_Weather_file_name_sset, self->data_ptr); -} - -static PyObject * -Weather_get_solar_resource_data(VarGroupObject *self, void *closure) -{ - return PySAM_table_getter(SAM_TroughPhysicalProcessHeat_Weather_solar_resource_data_tget, self->data_ptr); -} - -static int -Weather_set_solar_resource_data(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_table_setter(value, SAM_TroughPhysicalProcessHeat_Weather_solar_resource_data_tset, self->data_ptr); -} - -static PyObject * -Weather_get_tilt(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Weather_tilt_nget, self->data_ptr); -} - -static int -Weather_set_tilt(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Weather_tilt_nset, self->data_ptr); -} - -static PyObject * -Weather_get_track_mode(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Weather_track_mode_nget, self->data_ptr); -} - -static int -Weather_set_track_mode(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Weather_track_mode_nset, self->data_ptr); -} - -static PyGetSetDef Weather_getset[] = { -{"azimuth", (getter)Weather_get_azimuth,(setter)Weather_set_azimuth, - PyDoc_STR("*float*: Azimuth angle of surface/axis [none]\n\n**Required:**\nTrue"), - NULL}, -{"file_name", (getter)Weather_get_file_name,(setter)Weather_set_file_name, - PyDoc_STR("*str*: Local weather file with path [none]\n\n**Constraints:**\nLOCAL_FILE\n\n**Required:**\nFalse for configuration with default inputs. May be required if a variable dependent on its value changes. Example: For the Detailed PV - Single Owner configuration, only Subarray 1 is enabled in the configuration defaults, so Subarray 2 inputs would not be required; if Subarray 2 is enabled, then Subarray 2 inputs is required."), - NULL}, -{"solar_resource_data", (getter)Weather_get_solar_resource_data,(setter)Weather_set_solar_resource_data, - PyDoc_STR("*dict*: Weather resource data in memory\n\n**Required:**\nFalse for configuration with default inputs. May be required if a variable dependent on its value changes. Example: For the Detailed PV - Single Owner configuration, only Subarray 1 is enabled in the configuration defaults, so Subarray 2 inputs would not be required; if Subarray 2 is enabled, then Subarray 2 inputs is required."), - NULL}, -{"tilt", (getter)Weather_get_tilt,(setter)Weather_set_tilt, - PyDoc_STR("*float*: Tilt angle of surface/axis [none]\n\n**Required:**\nTrue"), - NULL}, -{"track_mode", (getter)Weather_get_track_mode,(setter)Weather_set_track_mode, - PyDoc_STR("*float*: Tracking mode [none]\n\n**Required:**\nTrue"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject Weather_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalProcessHeat.Weather", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - Weather_methods, /*tp_methods*/ - 0, /*tp_members*/ - Weather_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * SolarField Group - */ - -static PyTypeObject SolarField_Type; - -static PyObject * -SolarField_new(SAM_TroughPhysicalProcessHeat data_ptr) -{ - PyObject* new_obj = SolarField_Type.tp_alloc(&SolarField_Type,0); - - VarGroupObject* SolarField_obj = (VarGroupObject*)new_obj; - - SolarField_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* SolarField methods */ - -static PyObject * -SolarField_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalProcessHeat", "SolarField")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -SolarField_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &SolarField_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalProcessHeat", "SolarField")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -SolarField_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &SolarField_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef SolarField_methods[] = { - {"assign", (PyCFunction)SolarField_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``SolarField_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)SolarField_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``SolarField_vals = { var: val, ...}``")}, - {"export", (PyCFunction)SolarField_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -SolarField_get_A_aperture(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_SolarField_A_aperture_aget, self->data_ptr); -} - -static int -SolarField_set_A_aperture(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_A_aperture_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_AbsorberMaterial(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_AbsorberMaterial_mget, self->data_ptr); -} - -static int -SolarField_set_AbsorberMaterial(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_AbsorberMaterial_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_AnnulusGas(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_AnnulusGas_mget, self->data_ptr); -} - -static int -SolarField_set_AnnulusGas(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_AnnulusGas_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_Ave_Focal_Length(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_SolarField_Ave_Focal_Length_aget, self->data_ptr); -} - -static int -SolarField_set_Ave_Focal_Length(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_Ave_Focal_Length_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_ColperSCA(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_SolarField_ColperSCA_aget, self->data_ptr); -} - -static int -SolarField_set_ColperSCA(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_ColperSCA_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_D_2(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_D_2_mget, self->data_ptr); -} - -static int -SolarField_set_D_2(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_D_2_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_D_3(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_D_3_mget, self->data_ptr); -} - -static int -SolarField_set_D_3(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_D_3_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_D_4(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_D_4_mget, self->data_ptr); -} - -static int -SolarField_set_D_4(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_D_4_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_D_5(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_D_5_mget, self->data_ptr); -} - -static int -SolarField_set_D_5(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_D_5_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_D_cpnt(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_D_cpnt_mget, self->data_ptr); -} - -static int -SolarField_set_D_cpnt(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_D_cpnt_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_D_p(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_D_p_mget, self->data_ptr); -} - -static int -SolarField_set_D_p(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_D_p_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_Design_loss(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_Design_loss_mget, self->data_ptr); -} - -static int -SolarField_set_Design_loss(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_Design_loss_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_Dirt_HCE(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_Dirt_HCE_mget, self->data_ptr); -} - -static int -SolarField_set_Dirt_HCE(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_Dirt_HCE_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_Dirt_mirror(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_SolarField_Dirt_mirror_aget, self->data_ptr); -} - -static int -SolarField_set_Dirt_mirror(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_Dirt_mirror_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_Distance_SCA(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_SolarField_Distance_SCA_aget, self->data_ptr); -} - -static int -SolarField_set_Distance_SCA(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_Distance_SCA_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_EPSILON_4(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_EPSILON_4_mget, self->data_ptr); -} - -static int -SolarField_set_EPSILON_4(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_EPSILON_4_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_EPSILON_5(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_EPSILON_5_mget, self->data_ptr); -} - -static int -SolarField_set_EPSILON_5(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_EPSILON_5_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_Error(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_SolarField_Error_aget, self->data_ptr); -} - -static int -SolarField_set_Error(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_Error_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_FieldConfig(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_FieldConfig_nget, self->data_ptr); -} - -static int -SolarField_set_FieldConfig(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_FieldConfig_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_Flow_type(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_Flow_type_mget, self->data_ptr); -} - -static int -SolarField_set_Flow_type(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_Flow_type_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_Fluid(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_Fluid_nget, self->data_ptr); -} - -static int -SolarField_set_Fluid(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_Fluid_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_GeomEffects(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_SolarField_GeomEffects_aget, self->data_ptr); -} - -static int -SolarField_set_GeomEffects(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_GeomEffects_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_GlazingIntactIn(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_GlazingIntactIn_mget, self->data_ptr); -} - -static int -SolarField_set_GlazingIntactIn(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_GlazingIntactIn_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_HCE_FieldFrac(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_HCE_FieldFrac_mget, self->data_ptr); -} - -static int -SolarField_set_HCE_FieldFrac(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_HCE_FieldFrac_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_HDR_rough(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_HDR_rough_nget, self->data_ptr); -} - -static int -SolarField_set_HDR_rough(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_HDR_rough_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_IAM_matrix(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_IAM_matrix_mget, self->data_ptr); -} - -static int -SolarField_set_IAM_matrix(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_IAM_matrix_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_I_bn_des(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_I_bn_des_nget, self->data_ptr); -} - -static int -SolarField_set_I_bn_des(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_I_bn_des_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_K_cpnt(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_K_cpnt_mget, self->data_ptr); -} - -static int -SolarField_set_K_cpnt(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_K_cpnt_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_L_SCA(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_SolarField_L_SCA_aget, self->data_ptr); -} - -static int -SolarField_set_L_SCA(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_L_SCA_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_L_aperture(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_SolarField_L_aperture_aget, self->data_ptr); -} - -static int -SolarField_set_L_aperture(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_L_aperture_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_L_cpnt(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_L_cpnt_mget, self->data_ptr); -} - -static int -SolarField_set_L_cpnt(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_L_cpnt_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_L_heat_sink_piping(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_L_heat_sink_piping_nget, self->data_ptr); -} - -static int -SolarField_set_L_heat_sink_piping(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_L_heat_sink_piping_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_L_rnr_per_xpan(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_L_rnr_per_xpan_nget, self->data_ptr); -} - -static int -SolarField_set_L_rnr_per_xpan(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_L_rnr_per_xpan_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_L_xpan_hdr(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_L_xpan_hdr_nget, self->data_ptr); -} - -static int -SolarField_set_L_xpan_hdr(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_L_xpan_hdr_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_L_xpan_rnr(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_L_xpan_rnr_nget, self->data_ptr); -} - -static int -SolarField_set_L_xpan_rnr(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_L_xpan_rnr_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_Min_rnr_xpans(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_Min_rnr_xpans_nget, self->data_ptr); -} - -static int -SolarField_set_Min_rnr_xpans(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_Min_rnr_xpans_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_N_hdr_per_xpan(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_N_hdr_per_xpan_nget, self->data_ptr); -} - -static int -SolarField_set_N_hdr_per_xpan(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_N_hdr_per_xpan_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_N_max_hdr_diams(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_N_max_hdr_diams_nget, self->data_ptr); -} - -static int -SolarField_set_N_max_hdr_diams(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_N_max_hdr_diams_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_P_a(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_P_a_mget, self->data_ptr); -} - -static int -SolarField_set_P_a(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_P_a_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_Pipe_hl_coef(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_Pipe_hl_coef_nget, self->data_ptr); -} - -static int -SolarField_set_Pipe_hl_coef(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_Pipe_hl_coef_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_Rho_mirror_clean(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_SolarField_Rho_mirror_clean_aget, self->data_ptr); -} - -static int -SolarField_set_Rho_mirror_clean(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_Rho_mirror_clean_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_Rough(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_Rough_mget, self->data_ptr); -} - -static int -SolarField_set_Rough(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_Rough_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_Row_Distance(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_Row_Distance_nget, self->data_ptr); -} - -static int -SolarField_set_Row_Distance(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_Row_Distance_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_SCA_drives_elec(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_SCA_drives_elec_nget, self->data_ptr); -} - -static int -SolarField_set_SCA_drives_elec(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_SCA_drives_elec_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_Shadowing(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_Shadowing_mget, self->data_ptr); -} - -static int -SolarField_set_Shadowing(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_Shadowing_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_T_fp(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_T_fp_nget, self->data_ptr); -} - -static int -SolarField_set_T_fp(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_T_fp_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_T_loop_in_des(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_T_loop_in_des_nget, self->data_ptr); -} - -static int -SolarField_set_T_loop_in_des(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_T_loop_in_des_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_T_loop_out(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_T_loop_out_nget, self->data_ptr); -} - -static int -SolarField_set_T_loop_out(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_T_loop_out_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_Tau_envelope(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_Tau_envelope_mget, self->data_ptr); -} - -static int -SolarField_set_Tau_envelope(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_Tau_envelope_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_TrackingError(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_SolarField_TrackingError_aget, self->data_ptr); -} - -static int -SolarField_set_TrackingError(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_TrackingError_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_Type_cpnt(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_Type_cpnt_mget, self->data_ptr); -} - -static int -SolarField_set_Type_cpnt(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_Type_cpnt_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_V_hdr_cold_max(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_V_hdr_cold_max_nget, self->data_ptr); -} - -static int -SolarField_set_V_hdr_cold_max(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_V_hdr_cold_max_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_V_hdr_cold_min(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_V_hdr_cold_min_nget, self->data_ptr); -} - -static int -SolarField_set_V_hdr_cold_min(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_V_hdr_cold_min_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_V_hdr_hot_max(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_V_hdr_hot_max_nget, self->data_ptr); -} - -static int -SolarField_set_V_hdr_hot_max(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_V_hdr_hot_max_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_V_hdr_hot_min(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_V_hdr_hot_min_nget, self->data_ptr); -} - -static int -SolarField_set_V_hdr_hot_min(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_V_hdr_hot_min_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_W_aperture(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_SolarField_W_aperture_aget, self->data_ptr); -} - -static int -SolarField_set_W_aperture(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_W_aperture_aset, self->data_ptr); -} - -static PyObject * -SolarField_get_accept_init(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_accept_init_nget, self->data_ptr); -} - -static int -SolarField_set_accept_init(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_accept_init_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_accept_loc(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_accept_loc_nget, self->data_ptr); -} - -static int -SolarField_set_accept_loc(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_accept_loc_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_accept_mode(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_accept_mode_nget, self->data_ptr); -} - -static int -SolarField_set_accept_mode(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_accept_mode_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_alpha_abs(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_alpha_abs_mget, self->data_ptr); -} - -static int -SolarField_set_alpha_abs(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_alpha_abs_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_alpha_env(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_alpha_env_mget, self->data_ptr); -} - -static int -SolarField_set_alpha_env(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_alpha_env_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_calc_design_pipe_vals(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_calc_design_pipe_vals_nget, self->data_ptr); -} - -static int -SolarField_set_calc_design_pipe_vals(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_calc_design_pipe_vals_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_custom_sf_pipe_sizes(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_custom_sf_pipe_sizes_nget, self->data_ptr); -} - -static int -SolarField_set_custom_sf_pipe_sizes(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_custom_sf_pipe_sizes_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_11(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_11_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_11(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_11_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_12(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_12_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_12(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_12_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_13(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_13_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_13(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_13_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_14(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_14_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_14(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_14_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_21(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_21_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_21(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_21_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_22(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_22_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_22(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_22_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_23(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_23_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_23(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_23_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_24(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_24_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_24(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_24_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_31(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_31_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_31(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_31_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_32(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_32_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_32(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_32_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_33(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_33_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_33(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_33_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_34(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_34_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_34(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_34_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_41(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_41_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_41(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_41_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_42(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_42_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_42(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_42_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_43(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_43_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_43(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_43_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_epsilon_3_44(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_44_mget, self->data_ptr); -} - -static int -SolarField_set_epsilon_3_44(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_epsilon_3_44_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_eta_pump(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_eta_pump_nget, self->data_ptr); -} - -static int -SolarField_set_eta_pump(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_eta_pump_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_is_model_heat_sink_piping(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_is_model_heat_sink_piping_nget, self->data_ptr); -} - -static int -SolarField_set_is_model_heat_sink_piping(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_is_model_heat_sink_piping_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_m_dot_htfmax(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_m_dot_htfmax_nget, self->data_ptr); -} - -static int -SolarField_set_m_dot_htfmax(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_m_dot_htfmax_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_m_dot_htfmin(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_m_dot_htfmin_nget, self->data_ptr); -} - -static int -SolarField_set_m_dot_htfmin(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_m_dot_htfmin_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_mc_bal_cold(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_mc_bal_cold_nget, self->data_ptr); -} - -static int -SolarField_set_mc_bal_cold(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_mc_bal_cold_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_mc_bal_hot(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_mc_bal_hot_nget, self->data_ptr); -} - -static int -SolarField_set_mc_bal_hot(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_mc_bal_hot_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_mc_bal_sca(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_mc_bal_sca_nget, self->data_ptr); -} - -static int -SolarField_set_mc_bal_sca(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_mc_bal_sca_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_nColt(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_nColt_nget, self->data_ptr); -} - -static int -SolarField_set_nColt(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_nColt_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_nHCEVar(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_nHCEVar_nget, self->data_ptr); -} - -static int -SolarField_set_nHCEVar(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_nHCEVar_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_nHCEt(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_nHCEt_nget, self->data_ptr); -} - -static int -SolarField_set_nHCEt(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_nHCEt_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_nLoops(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_nLoops_nget, self->data_ptr); -} - -static int -SolarField_set_nLoops(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_nLoops_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_nSCA(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_nSCA_nget, self->data_ptr); -} - -static int -SolarField_set_nSCA(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_nSCA_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_northsouth_field_sep(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_northsouth_field_sep_nget, self->data_ptr); -} - -static int -SolarField_set_northsouth_field_sep(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_northsouth_field_sep_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_offset_xpan_hdr(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_offset_xpan_hdr_nget, self->data_ptr); -} - -static int -SolarField_set_offset_xpan_hdr(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_offset_xpan_hdr_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_sf_hdr_diams(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_sf_hdr_diams_mget, self->data_ptr); -} - -static int -SolarField_set_sf_hdr_diams(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_sf_hdr_diams_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_sf_hdr_lengths(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_sf_hdr_lengths_mget, self->data_ptr); -} - -static int -SolarField_set_sf_hdr_lengths(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_sf_hdr_lengths_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_sf_hdr_wallthicks(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_sf_hdr_wallthicks_mget, self->data_ptr); -} - -static int -SolarField_set_sf_hdr_wallthicks(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_sf_hdr_wallthicks_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_sf_rnr_diams(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_sf_rnr_diams_mget, self->data_ptr); -} - -static int -SolarField_set_sf_rnr_diams(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_sf_rnr_diams_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_sf_rnr_lengths(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_sf_rnr_lengths_mget, self->data_ptr); -} - -static int -SolarField_set_sf_rnr_lengths(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_sf_rnr_lengths_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_sf_rnr_wallthicks(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_SolarField_sf_rnr_wallthicks_mget, self->data_ptr); -} - -static int -SolarField_set_sf_rnr_wallthicks(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_sf_rnr_wallthicks_mset, self->data_ptr); -} - -static PyObject * -SolarField_get_theta_dep(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_theta_dep_nget, self->data_ptr); -} - -static int -SolarField_set_theta_dep(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_theta_dep_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_theta_stow(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_theta_stow_nget, self->data_ptr); -} - -static int -SolarField_set_theta_stow(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_theta_stow_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_washing_frequency(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_washing_frequency_nget, self->data_ptr); -} - -static int -SolarField_set_washing_frequency(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_washing_frequency_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_water_usage_per_wash(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_water_usage_per_wash_nget, self->data_ptr); -} - -static int -SolarField_set_water_usage_per_wash(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_water_usage_per_wash_nset, self->data_ptr); -} - -static PyObject * -SolarField_get_wind_stow_speed(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SolarField_wind_stow_speed_nget, self->data_ptr); -} - -static int -SolarField_set_wind_stow_speed(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SolarField_wind_stow_speed_nset, self->data_ptr); -} - -static PyGetSetDef SolarField_getset[] = { -{"A_aperture", (getter)SolarField_get_A_aperture,(setter)SolarField_set_A_aperture, - PyDoc_STR("*sequence*: Reflective aperture area of the collector [m2]\n\n**Required:**\nTrue"), - NULL}, -{"AbsorberMaterial", (getter)SolarField_get_AbsorberMaterial,(setter)SolarField_set_AbsorberMaterial, - PyDoc_STR("*sequence[sequence]*: Absorber material type [none]\n\n**Required:**\nTrue"), - NULL}, -{"AnnulusGas", (getter)SolarField_get_AnnulusGas,(setter)SolarField_set_AnnulusGas, - PyDoc_STR("*sequence[sequence]*: Annulus gas type (1=air, 26=Ar, 27=H2) [none]\n\n**Required:**\nTrue"), - NULL}, -{"Ave_Focal_Length", (getter)SolarField_get_Ave_Focal_Length,(setter)SolarField_set_Ave_Focal_Length, - PyDoc_STR("*sequence*: Average focal length of the collector [m]\n\n**Required:**\nTrue"), - NULL}, -{"ColperSCA", (getter)SolarField_get_ColperSCA,(setter)SolarField_set_ColperSCA, - PyDoc_STR("*sequence*: Number of individual collector sections in an SCA [none]\n\n**Required:**\nTrue"), - NULL}, -{"D_2", (getter)SolarField_get_D_2,(setter)SolarField_set_D_2, - PyDoc_STR("*sequence[sequence]*: Inner absorber tube diameter [m]\n\n**Required:**\nTrue"), - NULL}, -{"D_3", (getter)SolarField_get_D_3,(setter)SolarField_set_D_3, - PyDoc_STR("*sequence[sequence]*: Outer absorber tube diameter [m]\n\n**Required:**\nTrue"), - NULL}, -{"D_4", (getter)SolarField_get_D_4,(setter)SolarField_set_D_4, - PyDoc_STR("*sequence[sequence]*: Inner glass envelope diameter [m]\n\n**Required:**\nTrue"), - NULL}, -{"D_5", (getter)SolarField_get_D_5,(setter)SolarField_set_D_5, - PyDoc_STR("*sequence[sequence]*: Outer glass envelope diameter [m]\n\n**Required:**\nTrue"), - NULL}, -{"D_cpnt", (getter)SolarField_get_D_cpnt,(setter)SolarField_set_D_cpnt, - PyDoc_STR("*sequence[sequence]*: Interconnect component diameters, row=intc, col=cpnt [none]\n\n**Required:**\nTrue"), - NULL}, -{"D_p", (getter)SolarField_get_D_p,(setter)SolarField_set_D_p, - PyDoc_STR("*sequence[sequence]*: Diameter of the absorber flow plug (optional) [m]\n\n**Required:**\nTrue"), - NULL}, -{"Design_loss", (getter)SolarField_get_Design_loss,(setter)SolarField_set_Design_loss, - PyDoc_STR("*sequence[sequence]*: Receiver heat loss at design [W/m]\n\n**Required:**\nTrue"), - NULL}, -{"Dirt_HCE", (getter)SolarField_get_Dirt_HCE,(setter)SolarField_set_Dirt_HCE, - PyDoc_STR("*sequence[sequence]*: Loss due to dirt on the receiver envelope [none]\n\n**Required:**\nTrue"), - NULL}, -{"Dirt_mirror", (getter)SolarField_get_Dirt_mirror,(setter)SolarField_set_Dirt_mirror, - PyDoc_STR("*sequence*: User-defined dirt on mirror derate [none]\n\n**Required:**\nTrue"), - NULL}, -{"Distance_SCA", (getter)SolarField_get_Distance_SCA,(setter)SolarField_set_Distance_SCA, - PyDoc_STR("*sequence*: Piping distance between SCA's in the field [m]\n\n**Required:**\nTrue"), - NULL}, -{"EPSILON_4", (getter)SolarField_get_EPSILON_4,(setter)SolarField_set_EPSILON_4, - PyDoc_STR("*sequence[sequence]*: Inner glass envelope emissivities (Pyrex) [none]\n\n**Required:**\nTrue"), - NULL}, -{"EPSILON_5", (getter)SolarField_get_EPSILON_5,(setter)SolarField_set_EPSILON_5, - PyDoc_STR("*sequence[sequence]*: Outer glass envelope emissivities (Pyrex) [none]\n\n**Required:**\nTrue"), - NULL}, -{"Error", (getter)SolarField_get_Error,(setter)SolarField_set_Error, - PyDoc_STR("*sequence*: User-defined general optical error derate [none]\n\n**Required:**\nTrue"), - NULL}, -{"FieldConfig", (getter)SolarField_get_FieldConfig,(setter)SolarField_set_FieldConfig, - PyDoc_STR("*float*: Number of subfield headers [none]\n\n**Required:**\nTrue"), - NULL}, -{"Flow_type", (getter)SolarField_get_Flow_type,(setter)SolarField_set_Flow_type, - PyDoc_STR("*sequence[sequence]*: Flow type through the absorber [none]\n\n**Required:**\nTrue"), - NULL}, -{"Fluid", (getter)SolarField_get_Fluid,(setter)SolarField_set_Fluid, - PyDoc_STR("*float*: Field HTF fluid ID number [none]\n\n**Required:**\nTrue"), - NULL}, -{"GeomEffects", (getter)SolarField_get_GeomEffects,(setter)SolarField_set_GeomEffects, - PyDoc_STR("*sequence*: User-defined geometry effects derate [none]\n\n**Required:**\nTrue"), - NULL}, -{"GlazingIntactIn", (getter)SolarField_get_GlazingIntactIn,(setter)SolarField_set_GlazingIntactIn, - PyDoc_STR("*sequence[sequence]*: Glazing intact (broken glass) flag {1=true, else=false} [none]\n\n**Required:**\nTrue"), - NULL}, -{"HCE_FieldFrac", (getter)SolarField_get_HCE_FieldFrac,(setter)SolarField_set_HCE_FieldFrac, - PyDoc_STR("*sequence[sequence]*: Fraction of the field occupied by this HCE type [none]\n\n**Required:**\nTrue"), - NULL}, -{"HDR_rough", (getter)SolarField_get_HDR_rough,(setter)SolarField_set_HDR_rough, - PyDoc_STR("*float*: Header pipe roughness [m]\n\n**Required:**\nTrue"), - NULL}, -{"IAM_matrix", (getter)SolarField_get_IAM_matrix,(setter)SolarField_set_IAM_matrix, - PyDoc_STR("*sequence[sequence]*: IAM coefficients, matrix for 4 collectors [none]\n\n**Required:**\nTrue"), - NULL}, -{"I_bn_des", (getter)SolarField_get_I_bn_des,(setter)SolarField_set_I_bn_des, - PyDoc_STR("*float*: Solar irradiation at design [C]\n\n**Required:**\nTrue"), - NULL}, -{"K_cpnt", (getter)SolarField_get_K_cpnt,(setter)SolarField_set_K_cpnt, - PyDoc_STR("*sequence[sequence]*: Interconnect component minor loss coefficients, row=intc, col=cpnt [none]\n\n**Required:**\nTrue"), - NULL}, -{"L_SCA", (getter)SolarField_get_L_SCA,(setter)SolarField_set_L_SCA, - PyDoc_STR("*sequence*: Length of the SCA [m]\n\n**Required:**\nTrue"), - NULL}, -{"L_aperture", (getter)SolarField_get_L_aperture,(setter)SolarField_set_L_aperture, - PyDoc_STR("*sequence*: Length of a single mirror/HCE unit [m]\n\n**Required:**\nTrue"), - NULL}, -{"L_cpnt", (getter)SolarField_get_L_cpnt,(setter)SolarField_set_L_cpnt, - PyDoc_STR("*sequence[sequence]*: Interconnect component lengths, row=intc, col=cpnt [none]\n\n**Required:**\nTrue"), - NULL}, -{"L_heat_sink_piping", (getter)SolarField_get_L_heat_sink_piping,(setter)SolarField_set_L_heat_sink_piping, - PyDoc_STR("*float*: Length of piping (full mass flow) through heat sink (if applicable) [none]\n\n**Required:**\nTrue"), - NULL}, -{"L_rnr_per_xpan", (getter)SolarField_get_L_rnr_per_xpan,(setter)SolarField_set_L_rnr_per_xpan, - PyDoc_STR("*float*: Threshold length of straight runner pipe without an expansion loop [m]\n\n**Required:**\nTrue"), - NULL}, -{"L_xpan_hdr", (getter)SolarField_get_L_xpan_hdr,(setter)SolarField_set_L_xpan_hdr, - PyDoc_STR("*float*: Compined perpendicular lengths of each header expansion loop [m]\n\n**Required:**\nTrue"), - NULL}, -{"L_xpan_rnr", (getter)SolarField_get_L_xpan_rnr,(setter)SolarField_set_L_xpan_rnr, - PyDoc_STR("*float*: Compined perpendicular lengths of each runner expansion loop [m]\n\n**Required:**\nTrue"), - NULL}, -{"Min_rnr_xpans", (getter)SolarField_get_Min_rnr_xpans,(setter)SolarField_set_Min_rnr_xpans, - PyDoc_STR("*float*: Minimum number of expansion loops per single-diameter runner section [none]\n\n**Required:**\nTrue"), - NULL}, -{"N_hdr_per_xpan", (getter)SolarField_get_N_hdr_per_xpan,(setter)SolarField_set_N_hdr_per_xpan, - PyDoc_STR("*float*: Number of collector loops per expansion loop [none]\n\n**Required:**\nTrue"), - NULL}, -{"N_max_hdr_diams", (getter)SolarField_get_N_max_hdr_diams,(setter)SolarField_set_N_max_hdr_diams, - PyDoc_STR("*float*: Maximum number of diameters in each of the hot and cold headers [none]\n\n**Required:**\nTrue"), - NULL}, -{"P_a", (getter)SolarField_get_P_a,(setter)SolarField_set_P_a, - PyDoc_STR("*sequence[sequence]*: Annulus gas pressure [torr]\n\n**Required:**\nTrue"), - NULL}, -{"Pipe_hl_coef", (getter)SolarField_get_Pipe_hl_coef,(setter)SolarField_set_Pipe_hl_coef, - PyDoc_STR("*float*: Loss coefficient from the header, runner pipe, and non-HCE piping [m/s]\n\n**Required:**\nTrue"), - NULL}, -{"Rho_mirror_clean", (getter)SolarField_get_Rho_mirror_clean,(setter)SolarField_set_Rho_mirror_clean, - PyDoc_STR("*sequence*: User-defined clean mirror reflectivity [none]\n\n**Required:**\nTrue"), - NULL}, -{"Rough", (getter)SolarField_get_Rough,(setter)SolarField_set_Rough, - PyDoc_STR("*sequence[sequence]*: Roughness of the internal surface [m]\n\n**Required:**\nTrue"), - NULL}, -{"Row_Distance", (getter)SolarField_get_Row_Distance,(setter)SolarField_set_Row_Distance, - PyDoc_STR("*float*: Spacing between rows (centerline to centerline) [m]\n\n**Required:**\nTrue"), - NULL}, -{"SCA_drives_elec", (getter)SolarField_get_SCA_drives_elec,(setter)SolarField_set_SCA_drives_elec, - PyDoc_STR("*float*: Tracking power, in Watts per SCA drive [W/m2-K]\n\n**Required:**\nTrue"), - NULL}, -{"Shadowing", (getter)SolarField_get_Shadowing,(setter)SolarField_set_Shadowing, - PyDoc_STR("*sequence[sequence]*: Receiver bellows shadowing loss factor [none]\n\n**Required:**\nTrue"), - NULL}, -{"T_fp", (getter)SolarField_get_T_fp,(setter)SolarField_set_T_fp, - PyDoc_STR("*float*: Freeze protection temperature (heat trace activation temperature) [none]\n\n**Required:**\nTrue"), - NULL}, -{"T_loop_in_des", (getter)SolarField_get_T_loop_in_des,(setter)SolarField_set_T_loop_in_des, - PyDoc_STR("*float*: Design loop inlet temperature [C]\n\n**Required:**\nTrue"), - NULL}, -{"T_loop_out", (getter)SolarField_get_T_loop_out,(setter)SolarField_set_T_loop_out, - PyDoc_STR("*float*: Target loop outlet temperature [C]\n\n**Required:**\nTrue"), - NULL}, -{"Tau_envelope", (getter)SolarField_get_Tau_envelope,(setter)SolarField_set_Tau_envelope, - PyDoc_STR("*sequence[sequence]*: Envelope transmittance [none]\n\n**Required:**\nTrue"), - NULL}, -{"TrackingError", (getter)SolarField_get_TrackingError,(setter)SolarField_set_TrackingError, - PyDoc_STR("*sequence*: User-defined tracking error derate [none]\n\n**Required:**\nTrue"), - NULL}, -{"Type_cpnt", (getter)SolarField_get_Type_cpnt,(setter)SolarField_set_Type_cpnt, - PyDoc_STR("*sequence[sequence]*: Interconnect component type, row=intc, col=cpnt [none]\n\n**Required:**\nTrue"), - NULL}, -{"V_hdr_cold_max", (getter)SolarField_get_V_hdr_cold_max,(setter)SolarField_set_V_hdr_cold_max, - PyDoc_STR("*float*: Maximum HTF velocity in the cold headers at design [m/s]\n\n**Required:**\nTrue"), - NULL}, -{"V_hdr_cold_min", (getter)SolarField_get_V_hdr_cold_min,(setter)SolarField_set_V_hdr_cold_min, - PyDoc_STR("*float*: Minimum HTF velocity in the cold headers at design [m/s]\n\n**Required:**\nTrue"), - NULL}, -{"V_hdr_hot_max", (getter)SolarField_get_V_hdr_hot_max,(setter)SolarField_set_V_hdr_hot_max, - PyDoc_STR("*float*: Maximum HTF velocity in the hot headers at design [m/s]\n\n**Required:**\nTrue"), - NULL}, -{"V_hdr_hot_min", (getter)SolarField_get_V_hdr_hot_min,(setter)SolarField_set_V_hdr_hot_min, - PyDoc_STR("*float*: Minimum HTF velocity in the hot headers at design [m/s]\n\n**Required:**\nTrue"), - NULL}, -{"W_aperture", (getter)SolarField_get_W_aperture,(setter)SolarField_set_W_aperture, - PyDoc_STR("*sequence*: The collector aperture width (Total structural area used for shadowing) [m]\n\n**Required:**\nTrue"), - NULL}, -{"accept_init", (getter)SolarField_get_accept_init,(setter)SolarField_set_accept_init, - PyDoc_STR("*float*: In acceptance testing mode - require steady-state startup [none]\n\n**Required:**\nTrue"), - NULL}, -{"accept_loc", (getter)SolarField_get_accept_loc,(setter)SolarField_set_accept_loc, - PyDoc_STR("*float*: In acceptance testing mode - temperature sensor location [1/2]\n\n**Info:**\nhx/loop\n\n**Required:**\nTrue"), - NULL}, -{"accept_mode", (getter)SolarField_get_accept_mode,(setter)SolarField_set_accept_mode, - PyDoc_STR("*float*: Acceptance testing mode? [0/1]\n\n**Info:**\nno/yes\n\n**Required:**\nTrue"), - NULL}, -{"alpha_abs", (getter)SolarField_get_alpha_abs,(setter)SolarField_set_alpha_abs, - PyDoc_STR("*sequence[sequence]*: Absorber absorptance [none]\n\n**Required:**\nTrue"), - NULL}, -{"alpha_env", (getter)SolarField_get_alpha_env,(setter)SolarField_set_alpha_env, - PyDoc_STR("*sequence[sequence]*: Envelope absorptance [none]\n\n**Required:**\nTrue"), - NULL}, -{"calc_design_pipe_vals", (getter)SolarField_get_calc_design_pipe_vals,(setter)SolarField_set_calc_design_pipe_vals, - PyDoc_STR("*float*: Calculate temps and pressures at design conditions for runners and headers [none]\n\n**Required:**\nTrue"), - NULL}, -{"custom_sf_pipe_sizes", (getter)SolarField_get_custom_sf_pipe_sizes,(setter)SolarField_set_custom_sf_pipe_sizes, - PyDoc_STR("*float*: Use custom solar field pipe diams, wallthks, and lengths [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_11", (getter)SolarField_get_epsilon_3_11,(setter)SolarField_set_epsilon_3_11, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 1 variation 1 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_12", (getter)SolarField_get_epsilon_3_12,(setter)SolarField_set_epsilon_3_12, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 1 variation 2 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_13", (getter)SolarField_get_epsilon_3_13,(setter)SolarField_set_epsilon_3_13, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 1 variation 3 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_14", (getter)SolarField_get_epsilon_3_14,(setter)SolarField_set_epsilon_3_14, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 1 variation 4 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_21", (getter)SolarField_get_epsilon_3_21,(setter)SolarField_set_epsilon_3_21, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 2 variation 1 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_22", (getter)SolarField_get_epsilon_3_22,(setter)SolarField_set_epsilon_3_22, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 2 variation 2 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_23", (getter)SolarField_get_epsilon_3_23,(setter)SolarField_set_epsilon_3_23, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 2 variation 3 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_24", (getter)SolarField_get_epsilon_3_24,(setter)SolarField_set_epsilon_3_24, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 2 variation 4 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_31", (getter)SolarField_get_epsilon_3_31,(setter)SolarField_set_epsilon_3_31, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 3 variation 1 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_32", (getter)SolarField_get_epsilon_3_32,(setter)SolarField_set_epsilon_3_32, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 3 variation 2 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_33", (getter)SolarField_get_epsilon_3_33,(setter)SolarField_set_epsilon_3_33, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 3 variation 3 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_34", (getter)SolarField_get_epsilon_3_34,(setter)SolarField_set_epsilon_3_34, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 3 variation 4 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_41", (getter)SolarField_get_epsilon_3_41,(setter)SolarField_set_epsilon_3_41, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 4 variation 1 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_42", (getter)SolarField_get_epsilon_3_42,(setter)SolarField_set_epsilon_3_42, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 4 variation 2 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_43", (getter)SolarField_get_epsilon_3_43,(setter)SolarField_set_epsilon_3_43, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 4 variation 3 [none]\n\n**Required:**\nTrue"), - NULL}, -{"epsilon_3_44", (getter)SolarField_get_epsilon_3_44,(setter)SolarField_set_epsilon_3_44, - PyDoc_STR("*sequence[sequence]*: Absorber emittance for receiver type 4 variation 4 [none]\n\n**Required:**\nTrue"), - NULL}, -{"eta_pump", (getter)SolarField_get_eta_pump,(setter)SolarField_set_eta_pump, - PyDoc_STR("*float*: HTF pump efficiency [none]\n\n**Required:**\nTrue"), - NULL}, -{"is_model_heat_sink_piping", (getter)SolarField_get_is_model_heat_sink_piping,(setter)SolarField_set_is_model_heat_sink_piping, - PyDoc_STR("*float*: Should model consider piping through heat sink? [none]\n\n**Required:**\nTrue"), - NULL}, -{"m_dot_htfmax", (getter)SolarField_get_m_dot_htfmax,(setter)SolarField_set_m_dot_htfmax, - PyDoc_STR("*float*: Maximum loop HTF flow rate [kg/s]\n\n**Required:**\nTrue"), - NULL}, -{"m_dot_htfmin", (getter)SolarField_get_m_dot_htfmin,(setter)SolarField_set_m_dot_htfmin, - PyDoc_STR("*float*: Minimum loop HTF flow rate [kg/s]\n\n**Required:**\nTrue"), - NULL}, -{"mc_bal_cold", (getter)SolarField_get_mc_bal_cold,(setter)SolarField_set_mc_bal_cold, - PyDoc_STR("*float*: Heat capacity of the balance of plant on the cold side [kWht/K-MWt]\n\n**Required:**\nTrue"), - NULL}, -{"mc_bal_hot", (getter)SolarField_get_mc_bal_hot,(setter)SolarField_set_mc_bal_hot, - PyDoc_STR("*float*: Heat capacity of the balance of plant on the hot side [kWht/K-MWt]\n\n**Info:**\nnone\n\n**Required:**\nTrue"), - NULL}, -{"mc_bal_sca", (getter)SolarField_get_mc_bal_sca,(setter)SolarField_set_mc_bal_sca, - PyDoc_STR("*float*: Non-HTF heat capacity associated with each SCA - per meter basis [Wht/K-m]\n\n**Required:**\nTrue"), - NULL}, -{"nColt", (getter)SolarField_get_nColt,(setter)SolarField_set_nColt, - PyDoc_STR("*float*: Number of collector types [none]\n\n**Options:**\nconstant=4\n\n**Required:**\nTrue"), - NULL}, -{"nHCEVar", (getter)SolarField_get_nHCEVar,(setter)SolarField_set_nHCEVar, - PyDoc_STR("*float*: Number of HCE variants per type [none]\n\n**Required:**\nTrue"), - NULL}, -{"nHCEt", (getter)SolarField_get_nHCEt,(setter)SolarField_set_nHCEt, - PyDoc_STR("*float*: Number of HCE types [none]\n\n**Required:**\nTrue"), - NULL}, -{"nLoops", (getter)SolarField_get_nLoops,(setter)SolarField_set_nLoops, - PyDoc_STR("*float*: Number of loops in the field [none]\n\n**Required:**\nTrue"), - NULL}, -{"nSCA", (getter)SolarField_get_nSCA,(setter)SolarField_set_nSCA, - PyDoc_STR("*float*: Number of SCAs in a loop [none]\n\n**Required:**\nTrue"), - NULL}, -{"northsouth_field_sep", (getter)SolarField_get_northsouth_field_sep,(setter)SolarField_set_northsouth_field_sep, - PyDoc_STR("*float*: North/south separation between subfields. 0 = SCAs are touching [m]\n\n**Required:**\nTrue"), - NULL}, -{"offset_xpan_hdr", (getter)SolarField_get_offset_xpan_hdr,(setter)SolarField_set_offset_xpan_hdr, - PyDoc_STR("*float*: Location of first header expansion loop. 1 = after first collector loop [none]\n\n**Required:**\nTrue"), - NULL}, -{"sf_hdr_diams", (getter)SolarField_get_sf_hdr_diams,(setter)SolarField_set_sf_hdr_diams, - PyDoc_STR("*sequence[sequence]*: Custom header diameters [m]\n\n**Required:**\nTrue"), - NULL}, -{"sf_hdr_lengths", (getter)SolarField_get_sf_hdr_lengths,(setter)SolarField_set_sf_hdr_lengths, - PyDoc_STR("*sequence[sequence]*: Custom header lengths [m]\n\n**Required:**\nTrue"), - NULL}, -{"sf_hdr_wallthicks", (getter)SolarField_get_sf_hdr_wallthicks,(setter)SolarField_set_sf_hdr_wallthicks, - PyDoc_STR("*sequence[sequence]*: Custom header wall thicknesses [m]\n\n**Required:**\nTrue"), - NULL}, -{"sf_rnr_diams", (getter)SolarField_get_sf_rnr_diams,(setter)SolarField_set_sf_rnr_diams, - PyDoc_STR("*sequence[sequence]*: Custom runner diameters [m]\n\n**Required:**\nTrue"), - NULL}, -{"sf_rnr_lengths", (getter)SolarField_get_sf_rnr_lengths,(setter)SolarField_set_sf_rnr_lengths, - PyDoc_STR("*sequence[sequence]*: Custom runner lengths [m]\n\n**Required:**\nTrue"), - NULL}, -{"sf_rnr_wallthicks", (getter)SolarField_get_sf_rnr_wallthicks,(setter)SolarField_set_sf_rnr_wallthicks, - PyDoc_STR("*sequence[sequence]*: Custom runner wall thicknesses [m]\n\n**Required:**\nTrue"), - NULL}, -{"theta_dep", (getter)SolarField_get_theta_dep,(setter)SolarField_set_theta_dep, - PyDoc_STR("*float*: Deploy angle [deg]\n\n**Required:**\nTrue"), - NULL}, -{"theta_stow", (getter)SolarField_get_theta_stow,(setter)SolarField_set_theta_stow, - PyDoc_STR("*float*: Stow angle [deg]\n\n**Required:**\nTrue"), - NULL}, -{"washing_frequency", (getter)SolarField_get_washing_frequency,(setter)SolarField_set_washing_frequency, - PyDoc_STR("*float*: Mirror washing frequency [-/year]\n\n**Required:**\nTrue"), - NULL}, -{"water_usage_per_wash", (getter)SolarField_get_water_usage_per_wash,(setter)SolarField_set_water_usage_per_wash, - PyDoc_STR("*float*: Water usage per wash [L/m2_aper]\n\n**Required:**\nTrue"), - NULL}, -{"wind_stow_speed", (getter)SolarField_get_wind_stow_speed,(setter)SolarField_set_wind_stow_speed, - PyDoc_STR("*float*: Trough wind stow speed [m/s]\n\n**Required:**\nFalse. Automatically set to 50 if not assigned explicitly or loaded from defaults."), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject SolarField_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalProcessHeat.SolarField", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - SolarField_methods, /*tp_methods*/ - 0, /*tp_members*/ - SolarField_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * Controller Group - */ - -static PyTypeObject Controller_Type; - -static PyObject * -Controller_new(SAM_TroughPhysicalProcessHeat data_ptr) -{ - PyObject* new_obj = Controller_Type.tp_alloc(&Controller_Type,0); - - VarGroupObject* Controller_obj = (VarGroupObject*)new_obj; - - Controller_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* Controller methods */ - -static PyObject * -Controller_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalProcessHeat", "Controller")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Controller_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &Controller_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalProcessHeat", "Controller")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Controller_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &Controller_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef Controller_methods[] = { - {"assign", (PyCFunction)Controller_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``Controller_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)Controller_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``Controller_vals = { var: val, ...}``")}, - {"export", (PyCFunction)Controller_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -Controller_get_disp_wlim_maxspec(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Controller_disp_wlim_maxspec_nget, self->data_ptr); -} - -static int -Controller_set_disp_wlim_maxspec(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Controller_disp_wlim_maxspec_nset, self->data_ptr); -} - -static PyObject * -Controller_get_field_fl_props(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_Controller_field_fl_props_mget, self->data_ptr); -} - -static int -Controller_set_field_fl_props(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_Controller_field_fl_props_mset, self->data_ptr); -} - -static PyObject * -Controller_get_non_solar_field_land_area_multiplier(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Controller_non_solar_field_land_area_multiplier_nget, self->data_ptr); -} - -static int -Controller_set_non_solar_field_land_area_multiplier(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Controller_non_solar_field_land_area_multiplier_nset, self->data_ptr); -} - -static PyObject * -Controller_get_pb_pump_coef(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Controller_pb_pump_coef_nget, self->data_ptr); -} - -static int -Controller_set_pb_pump_coef(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Controller_pb_pump_coef_nset, self->data_ptr); -} - -static PyObject * -Controller_get_q_pb_design(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Controller_q_pb_design_nget, self->data_ptr); -} - -static int -Controller_set_q_pb_design(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Controller_q_pb_design_nset, self->data_ptr); -} - -static PyObject * -Controller_get_specified_solar_multiple(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Controller_specified_solar_multiple_nget, self->data_ptr); -} - -static int -Controller_set_specified_solar_multiple(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Controller_specified_solar_multiple_nset, self->data_ptr); -} - -static PyObject * -Controller_get_tanks_in_parallel(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Controller_tanks_in_parallel_nget, self->data_ptr); -} - -static int -Controller_set_tanks_in_parallel(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Controller_tanks_in_parallel_nset, self->data_ptr); -} - -static PyObject * -Controller_get_trough_loop_control(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Controller_trough_loop_control_aget, self->data_ptr); -} - -static int -Controller_set_trough_loop_control(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_Controller_trough_loop_control_aset, self->data_ptr); -} - -static PyGetSetDef Controller_getset[] = { -{"disp_wlim_maxspec", (getter)Controller_get_disp_wlim_maxspec,(setter)Controller_set_disp_wlim_maxspec, - PyDoc_STR("*float*: disp_wlim_maxspec [-]\n\n**Required:**\nTrue"), - NULL}, -{"field_fl_props", (getter)Controller_get_field_fl_props,(setter)Controller_set_field_fl_props, - PyDoc_STR("*sequence[sequence]*: User defined field fluid property data [-]\n\n**Required:**\nTrue"), - NULL}, -{"non_solar_field_land_area_multiplier", (getter)Controller_get_non_solar_field_land_area_multiplier,(setter)Controller_set_non_solar_field_land_area_multiplier, - PyDoc_STR("*float*: non_solar_field_land_area_multiplier [-]\n\n**Required:**\nTrue"), - NULL}, -{"pb_pump_coef", (getter)Controller_get_pb_pump_coef,(setter)Controller_set_pb_pump_coef, - PyDoc_STR("*float*: Pumping power to move 1kg of HTF through PB loop [kW/kg]\n\n**Required:**\nTrue"), - NULL}, -{"q_pb_design", (getter)Controller_get_q_pb_design,(setter)Controller_set_q_pb_design, - PyDoc_STR("*float*: Design heat input to power block [MWt]\n\n**Required:**\nTrue"), - NULL}, -{"specified_solar_multiple", (getter)Controller_get_specified_solar_multiple,(setter)Controller_set_specified_solar_multiple, - PyDoc_STR("*float*: specified_solar_multiple [-]\n\n**Required:**\nTrue"), - NULL}, -{"tanks_in_parallel", (getter)Controller_get_tanks_in_parallel,(setter)Controller_set_tanks_in_parallel, - PyDoc_STR("*float*: Tanks are in parallel, not in series, with solar field [-]\n\n**Required:**\nTrue"), - NULL}, -{"trough_loop_control", (getter)Controller_get_trough_loop_control,(setter)Controller_set_trough_loop_control, - PyDoc_STR("*sequence*: trough_loop_control [-]\n\n**Required:**\nTrue"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject Controller_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalProcessHeat.Controller", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - Controller_methods, /*tp_methods*/ - 0, /*tp_members*/ - Controller_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * SystemDesign Group - */ - -static PyTypeObject SystemDesign_Type; - -static PyObject * -SystemDesign_new(SAM_TroughPhysicalProcessHeat data_ptr) -{ - PyObject* new_obj = SystemDesign_Type.tp_alloc(&SystemDesign_Type,0); - - VarGroupObject* SystemDesign_obj = (VarGroupObject*)new_obj; - - SystemDesign_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* SystemDesign methods */ - -static PyObject * -SystemDesign_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalProcessHeat", "SystemDesign")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -SystemDesign_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &SystemDesign_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalProcessHeat", "SystemDesign")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -SystemDesign_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &SystemDesign_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef SystemDesign_methods[] = { - {"assign", (PyCFunction)SystemDesign_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``SystemDesign_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)SystemDesign_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``SystemDesign_vals = { var: val, ...}``")}, - {"export", (PyCFunction)SystemDesign_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -SystemDesign_get_tshours(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SystemDesign_tshours_nget, self->data_ptr); -} - -static int -SystemDesign_set_tshours(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SystemDesign_tshours_nset, self->data_ptr); -} - -static PyGetSetDef SystemDesign_getset[] = { -{"tshours", (getter)SystemDesign_get_tshours,(setter)SystemDesign_set_tshours, - PyDoc_STR("*float*: Equivalent full-load thermal storage hours [hr]\n\n**Required:**\nTrue"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject SystemDesign_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalProcessHeat.SystemDesign", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - SystemDesign_methods, /*tp_methods*/ - 0, /*tp_members*/ - SystemDesign_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * TES Group - */ - -static PyTypeObject TES_Type; - -static PyObject * -TES_new(SAM_TroughPhysicalProcessHeat data_ptr) -{ - PyObject* new_obj = TES_Type.tp_alloc(&TES_Type,0); - - VarGroupObject* TES_obj = (VarGroupObject*)new_obj; - - TES_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* TES methods */ - -static PyObject * -TES_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalProcessHeat", "TES")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -TES_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &TES_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalProcessHeat", "TES")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -TES_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &TES_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef TES_methods[] = { - {"assign", (PyCFunction)TES_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``TES_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)TES_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``TES_vals = { var: val, ...}``")}, - {"export", (PyCFunction)TES_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -TES_get_cold_tank_Thtr(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_TES_cold_tank_Thtr_nget, self->data_ptr); -} - -static int -TES_set_cold_tank_Thtr(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_TES_cold_tank_Thtr_nset, self->data_ptr); -} - -static PyObject * -TES_get_cold_tank_max_heat(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_TES_cold_tank_max_heat_nget, self->data_ptr); -} - -static int -TES_set_cold_tank_max_heat(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_TES_cold_tank_max_heat_nset, self->data_ptr); -} - -static PyObject * -TES_get_h_tank(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_TES_h_tank_nget, self->data_ptr); -} - -static int -TES_set_h_tank(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_TES_h_tank_nset, self->data_ptr); -} - -static PyObject * -TES_get_init_hot_htf_percent(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_TES_init_hot_htf_percent_nget, self->data_ptr); -} - -static int -TES_set_init_hot_htf_percent(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_TES_init_hot_htf_percent_nset, self->data_ptr); -} - -static PyObject * -TES_get_tank_pairs(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_TES_tank_pairs_nget, self->data_ptr); -} - -static int -TES_set_tank_pairs(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_TES_tank_pairs_nset, self->data_ptr); -} - -static PyObject * -TES_get_u_tank(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_TES_u_tank_nget, self->data_ptr); -} - -static int -TES_set_u_tank(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_TES_u_tank_nset, self->data_ptr); -} - -static PyGetSetDef TES_getset[] = { -{"cold_tank_Thtr", (getter)TES_get_cold_tank_Thtr,(setter)TES_set_cold_tank_Thtr, - PyDoc_STR("*float*: Minimum allowable cold tank HTF temp [C]\n\n**Required:**\nTrue"), - NULL}, -{"cold_tank_max_heat", (getter)TES_get_cold_tank_max_heat,(setter)TES_set_cold_tank_max_heat, - PyDoc_STR("*float*: Rated heater capacity for cold tank heating [MW]\n\n**Required:**\nTrue"), - NULL}, -{"h_tank", (getter)TES_get_h_tank,(setter)TES_set_h_tank, - PyDoc_STR("*float*: Total height of tank (height of HTF when tank is full [m]\n\n**Required:**\nTrue"), - NULL}, -{"init_hot_htf_percent", (getter)TES_get_init_hot_htf_percent,(setter)TES_set_init_hot_htf_percent, - PyDoc_STR("*float*: Initial fraction of avail. vol that is hot [%]\n\n**Required:**\nTrue"), - NULL}, -{"tank_pairs", (getter)TES_get_tank_pairs,(setter)TES_set_tank_pairs, - PyDoc_STR("*float*: Number of equivalent tank pairs [-]\n\n**Constraints:**\nINTEGER\n\n**Required:**\nTrue"), - NULL}, -{"u_tank", (getter)TES_get_u_tank,(setter)TES_set_u_tank, - PyDoc_STR("*float*: Loss coefficient from the tank [W/m2-K]\n\n**Required:**\nTrue"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject TES_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalProcessHeat.TES", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - TES_methods, /*tp_methods*/ - 0, /*tp_members*/ - TES_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * TES2tank Group - */ - -static PyTypeObject TES2tank_Type; - -static PyObject * -TES2tank_new(SAM_TroughPhysicalProcessHeat data_ptr) -{ - PyObject* new_obj = TES2tank_Type.tp_alloc(&TES2tank_Type,0); - - VarGroupObject* TES2tank_obj = (VarGroupObject*)new_obj; - - TES2tank_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* TES2tank methods */ - -static PyObject * -TES2tank_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalProcessHeat", "TES2tank")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -TES2tank_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &TES2tank_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalProcessHeat", "TES2tank")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -TES2tank_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &TES2tank_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef TES2tank_methods[] = { - {"assign", (PyCFunction)TES2tank_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``TES2tank_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)TES2tank_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``TES2tank_vals = { var: val, ...}``")}, - {"export", (PyCFunction)TES2tank_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -TES2tank_get_h_tank_min(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_TES2tank_h_tank_min_nget, self->data_ptr); -} - -static int -TES2tank_set_h_tank_min(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_TES2tank_h_tank_min_nset, self->data_ptr); -} - -static PyObject * -TES2tank_get_hot_tank_Thtr(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_TES2tank_hot_tank_Thtr_nget, self->data_ptr); -} - -static int -TES2tank_set_hot_tank_Thtr(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_TES2tank_hot_tank_Thtr_nset, self->data_ptr); -} - -static PyObject * -TES2tank_get_hot_tank_max_heat(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_TES2tank_hot_tank_max_heat_nget, self->data_ptr); -} - -static int -TES2tank_set_hot_tank_max_heat(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_TES2tank_hot_tank_max_heat_nset, self->data_ptr); -} - -static PyGetSetDef TES2tank_getset[] = { -{"h_tank_min", (getter)TES2tank_get_h_tank_min,(setter)TES2tank_set_h_tank_min, - PyDoc_STR("*float*: Minimum allowable HTF height in storage tank [m]\n\n**Required:**\nTrue"), - NULL}, -{"hot_tank_Thtr", (getter)TES2tank_get_hot_tank_Thtr,(setter)TES2tank_set_hot_tank_Thtr, - PyDoc_STR("*float*: Minimum allowable hot tank HTF temp [C]\n\n**Required:**\nTrue"), - NULL}, -{"hot_tank_max_heat", (getter)TES2tank_get_hot_tank_max_heat,(setter)TES2tank_set_hot_tank_max_heat, - PyDoc_STR("*float*: Rated heater capacity for hot tank heating [MW]\n\n**Required:**\nTrue"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject TES2tank_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalProcessHeat.TES2tank", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - TES2tank_methods, /*tp_methods*/ - 0, /*tp_members*/ - TES2tank_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * Tou Group - */ - -static PyTypeObject Tou_Type; - -static PyObject * -Tou_new(SAM_TroughPhysicalProcessHeat data_ptr) -{ - PyObject* new_obj = Tou_Type.tp_alloc(&Tou_Type,0); - - VarGroupObject* Tou_obj = (VarGroupObject*)new_obj; - - Tou_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* Tou methods */ - -static PyObject * -Tou_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalProcessHeat", "Tou")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Tou_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &Tou_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalProcessHeat", "Tou")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Tou_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &Tou_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef Tou_methods[] = { - {"assign", (PyCFunction)Tou_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``Tou_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)Tou_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``Tou_vals = { var: val, ...}``")}, - {"export", (PyCFunction)Tou_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -Tou_get_ampl_data_dir(VarGroupObject *self, void *closure) -{ - return PySAM_string_getter(SAM_TroughPhysicalProcessHeat_Tou_ampl_data_dir_sget, self->data_ptr); -} - -static int -Tou_set_ampl_data_dir(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_string_setter(value, SAM_TroughPhysicalProcessHeat_Tou_ampl_data_dir_sset, self->data_ptr); -} - -static PyObject * -Tou_get_ampl_exec_call(VarGroupObject *self, void *closure) -{ - return PySAM_string_getter(SAM_TroughPhysicalProcessHeat_Tou_ampl_exec_call_sget, self->data_ptr); -} - -static int -Tou_set_ampl_exec_call(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_string_setter(value, SAM_TroughPhysicalProcessHeat_Tou_ampl_exec_call_sset, self->data_ptr); -} - -static PyObject * -Tou_get_disp_csu_cost_rel(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_disp_csu_cost_rel_nget, self->data_ptr); -} - -static int -Tou_set_disp_csu_cost_rel(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_disp_csu_cost_rel_nset, self->data_ptr); -} - -static PyObject * -Tou_get_disp_frequency(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_disp_frequency_nget, self->data_ptr); -} - -static int -Tou_set_disp_frequency(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_disp_frequency_nset, self->data_ptr); -} - -static PyObject * -Tou_get_disp_horizon(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_disp_horizon_nget, self->data_ptr); -} - -static int -Tou_set_disp_horizon(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_disp_horizon_nset, self->data_ptr); -} - -static PyObject * -Tou_get_disp_max_iter(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_disp_max_iter_nget, self->data_ptr); -} - -static int -Tou_set_disp_max_iter(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_disp_max_iter_nset, self->data_ptr); -} - -static PyObject * -Tou_get_disp_mip_gap(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_disp_mip_gap_nget, self->data_ptr); -} - -static int -Tou_set_disp_mip_gap(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_disp_mip_gap_nset, self->data_ptr); -} - -static PyObject * -Tou_get_disp_pen_ramping(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_disp_pen_ramping_nget, self->data_ptr); -} - -static int -Tou_set_disp_pen_ramping(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_disp_pen_ramping_nset, self->data_ptr); -} - -static PyObject * -Tou_get_disp_reporting(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_disp_reporting_nget, self->data_ptr); -} - -static int -Tou_set_disp_reporting(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_disp_reporting_nset, self->data_ptr); -} - -static PyObject * -Tou_get_disp_rsu_cost_rel(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_disp_rsu_cost_rel_nget, self->data_ptr); -} - -static int -Tou_set_disp_rsu_cost_rel(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_disp_rsu_cost_rel_nset, self->data_ptr); -} - -static PyObject * -Tou_get_disp_spec_bb(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_disp_spec_bb_nget, self->data_ptr); -} - -static int -Tou_set_disp_spec_bb(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_disp_spec_bb_nset, self->data_ptr); -} - -static PyObject * -Tou_get_disp_spec_presolve(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_disp_spec_presolve_nget, self->data_ptr); -} - -static int -Tou_set_disp_spec_presolve(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_disp_spec_presolve_nset, self->data_ptr); -} - -static PyObject * -Tou_get_disp_spec_scaling(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_disp_spec_scaling_nget, self->data_ptr); -} - -static int -Tou_set_disp_spec_scaling(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_disp_spec_scaling_nset, self->data_ptr); -} - -static PyObject * -Tou_get_disp_steps_per_hour(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_disp_steps_per_hour_nget, self->data_ptr); -} - -static int -Tou_set_disp_steps_per_hour(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_disp_steps_per_hour_nset, self->data_ptr); -} - -static PyObject * -Tou_get_disp_time_weighting(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_disp_time_weighting_nget, self->data_ptr); -} - -static int -Tou_set_disp_time_weighting(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_disp_time_weighting_nset, self->data_ptr); -} - -static PyObject * -Tou_get_disp_timeout(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_disp_timeout_nget, self->data_ptr); -} - -static int -Tou_set_disp_timeout(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_disp_timeout_nset, self->data_ptr); -} - -static PyObject * -Tou_get_dispatch_factors_ts(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Tou_dispatch_factors_ts_aget, self->data_ptr); -} - -static int -Tou_set_dispatch_factors_ts(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_Tou_dispatch_factors_ts_aset, self->data_ptr); -} - -static PyObject * -Tou_get_dispatch_sched_weekday(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_Tou_dispatch_sched_weekday_mget, self->data_ptr); -} - -static int -Tou_set_dispatch_sched_weekday(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_Tou_dispatch_sched_weekday_mset, self->data_ptr); -} - -static PyObject * -Tou_get_dispatch_sched_weekend(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_Tou_dispatch_sched_weekend_mget, self->data_ptr); -} - -static int -Tou_set_dispatch_sched_weekend(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_Tou_dispatch_sched_weekend_mset, self->data_ptr); -} - -static PyObject * -Tou_get_dispatch_series(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Tou_dispatch_series_aget, self->data_ptr); -} - -static int -Tou_set_dispatch_series(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_Tou_dispatch_series_aset, self->data_ptr); -} - -static PyObject * -Tou_get_f_turb_tou_periods(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Tou_f_turb_tou_periods_aget, self->data_ptr); -} - -static int -Tou_set_f_turb_tou_periods(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_Tou_f_turb_tou_periods_aset, self->data_ptr); -} - -static PyObject * -Tou_get_is_ampl_engine(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_is_ampl_engine_nget, self->data_ptr); -} - -static int -Tou_set_is_ampl_engine(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_is_ampl_engine_nset, self->data_ptr); -} - -static PyObject * -Tou_get_is_dispatch(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_is_dispatch_nget, self->data_ptr); -} - -static int -Tou_set_is_dispatch(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_is_dispatch_nset, self->data_ptr); -} - -static PyObject * -Tou_get_is_dispatch_series(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_is_dispatch_series_nget, self->data_ptr); -} - -static int -Tou_set_is_dispatch_series(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_is_dispatch_series_nset, self->data_ptr); -} - -static PyObject * -Tou_get_is_tod_pc_target_also_pc_max(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_is_tod_pc_target_also_pc_max_nget, self->data_ptr); -} - -static int -Tou_set_is_tod_pc_target_also_pc_max(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_is_tod_pc_target_also_pc_max_nset, self->data_ptr); -} - -static PyObject * -Tou_get_is_wlim_series(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_is_wlim_series_nget, self->data_ptr); -} - -static int -Tou_set_is_wlim_series(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_is_wlim_series_nset, self->data_ptr); -} - -static PyObject * -Tou_get_is_write_ampl_dat(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_is_write_ampl_dat_nget, self->data_ptr); -} - -static int -Tou_set_is_write_ampl_dat(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_is_write_ampl_dat_nset, self->data_ptr); -} - -static PyObject * -Tou_get_ppa_multiplier_model(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_ppa_multiplier_model_nget, self->data_ptr); -} - -static int -Tou_set_ppa_multiplier_model(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_ppa_multiplier_model_nset, self->data_ptr); -} - -static PyObject * -Tou_get_q_rec_heattrace(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_q_rec_heattrace_nget, self->data_ptr); -} - -static int -Tou_set_q_rec_heattrace(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_q_rec_heattrace_nset, self->data_ptr); -} - -static PyObject * -Tou_get_q_rec_standby(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Tou_q_rec_standby_nget, self->data_ptr); -} - -static int -Tou_set_q_rec_standby(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Tou_q_rec_standby_nset, self->data_ptr); -} - -static PyObject * -Tou_get_timestep_load_fractions(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Tou_timestep_load_fractions_aget, self->data_ptr); -} - -static int -Tou_set_timestep_load_fractions(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_Tou_timestep_load_fractions_aset, self->data_ptr); -} - -static PyObject * -Tou_get_weekday_schedule(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_Tou_weekday_schedule_mget, self->data_ptr); -} - -static int -Tou_set_weekday_schedule(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_Tou_weekday_schedule_mset, self->data_ptr); -} - -static PyObject * -Tou_get_weekend_schedule(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_Tou_weekend_schedule_mget, self->data_ptr); -} - -static int -Tou_set_weekend_schedule(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_matrix_setter(value, SAM_TroughPhysicalProcessHeat_Tou_weekend_schedule_mset, self->data_ptr); -} - -static PyObject * -Tou_get_wlim_series(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Tou_wlim_series_aget, self->data_ptr); -} - -static int -Tou_set_wlim_series(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_Tou_wlim_series_aset, self->data_ptr); -} - -static PyGetSetDef Tou_getset[] = { -{"ampl_data_dir", (getter)Tou_get_ampl_data_dir,(setter)Tou_set_ampl_data_dir, - PyDoc_STR("*str*: AMPL data file directory [-]\n\n**Required:**\nFalse. Automatically set to '' if not assigned explicitly or loaded from defaults."), - NULL}, -{"ampl_exec_call", (getter)Tou_get_ampl_exec_call,(setter)Tou_set_ampl_exec_call, - PyDoc_STR("*str*: System command to run AMPL code [-]\n\n**Required:**\nFalse. Automatically set to 'ampl sdk_solution.run' if not assigned explicitly or loaded from defaults."), - NULL}, -{"disp_csu_cost_rel", (getter)Tou_get_disp_csu_cost_rel,(setter)Tou_set_disp_csu_cost_rel, - PyDoc_STR("*float*: Heat sink startup cost [$/MWe-cycle/start]\n\n**Required:**\nRequired if is_dispatch=1"), - NULL}, -{"disp_frequency", (getter)Tou_get_disp_frequency,(setter)Tou_set_disp_frequency, - PyDoc_STR("*float*: Frequency for dispatch optimization calculations [hour]\n\n**Required:**\nRequired if is_dispatch=1"), - NULL}, -{"disp_horizon", (getter)Tou_get_disp_horizon,(setter)Tou_set_disp_horizon, - PyDoc_STR("*float*: Time horizon for dispatch optimization [hour]\n\n**Required:**\nRequired if is_dispatch=1"), - NULL}, -{"disp_max_iter", (getter)Tou_get_disp_max_iter,(setter)Tou_set_disp_max_iter, - PyDoc_STR("*float*: Max. no. dispatch optimization iterations [-]\n\n**Required:**\nRequired if is_dispatch=1"), - NULL}, -{"disp_mip_gap", (getter)Tou_get_disp_mip_gap,(setter)Tou_set_disp_mip_gap, - PyDoc_STR("*float*: Dispatch optimization solution tolerance [-]\n\n**Required:**\nRequired if is_dispatch=1"), - NULL}, -{"disp_pen_ramping", (getter)Tou_get_disp_pen_ramping,(setter)Tou_set_disp_pen_ramping, - PyDoc_STR("*float*: Dispatch heat production change penalty [$/MWt-change]\n\n**Required:**\nRequired if is_dispatch=1"), - NULL}, -{"disp_reporting", (getter)Tou_get_disp_reporting,(setter)Tou_set_disp_reporting, - PyDoc_STR("*float*: Dispatch optimization reporting level [-]\n\n**Required:**\nFalse. Automatically set to -1 if not assigned explicitly or loaded from defaults."), - NULL}, -{"disp_rsu_cost_rel", (getter)Tou_get_disp_rsu_cost_rel,(setter)Tou_set_disp_rsu_cost_rel, - PyDoc_STR("*float*: Receiver startup cost [$/MWt/start]\n\n**Required:**\nRequired if is_dispatch=1"), - NULL}, -{"disp_spec_bb", (getter)Tou_get_disp_spec_bb,(setter)Tou_set_disp_spec_bb, - PyDoc_STR("*float*: Dispatch optimization B&B heuristic [-]\n\n**Required:**\nFalse. Automatically set to -1 if not assigned explicitly or loaded from defaults."), - NULL}, -{"disp_spec_presolve", (getter)Tou_get_disp_spec_presolve,(setter)Tou_set_disp_spec_presolve, - PyDoc_STR("*float*: Dispatch optimization presolve heuristic [-]\n\n**Required:**\nFalse. Automatically set to -1 if not assigned explicitly or loaded from defaults."), - NULL}, -{"disp_spec_scaling", (getter)Tou_get_disp_spec_scaling,(setter)Tou_set_disp_spec_scaling, - PyDoc_STR("*float*: Dispatch optimization scaling heuristic [-]\n\n**Required:**\nFalse. Automatically set to -1 if not assigned explicitly or loaded from defaults."), - NULL}, -{"disp_steps_per_hour", (getter)Tou_get_disp_steps_per_hour,(setter)Tou_set_disp_steps_per_hour, - PyDoc_STR("*float*: Time steps per hour for dispatch optimization calculations [-]\n\n**Required:**\nFalse. Automatically set to 1 if not assigned explicitly or loaded from defaults."), - NULL}, -{"disp_time_weighting", (getter)Tou_get_disp_time_weighting,(setter)Tou_set_disp_time_weighting, - PyDoc_STR("*float*: Dispatch optimization future time discounting factor [-]\n\n**Required:**\nFalse. Automatically set to 0.99 if not assigned explicitly or loaded from defaults."), - NULL}, -{"disp_timeout", (getter)Tou_get_disp_timeout,(setter)Tou_set_disp_timeout, - PyDoc_STR("*float*: Max. dispatch optimization solve duration [s]\n\n**Required:**\nRequired if is_dispatch=1"), - NULL}, -{"dispatch_factors_ts", (getter)Tou_get_dispatch_factors_ts,(setter)Tou_set_dispatch_factors_ts, - PyDoc_STR("*sequence*: Dispatch payment factor array"), - NULL}, -{"dispatch_sched_weekday", (getter)Tou_get_dispatch_sched_weekday,(setter)Tou_set_dispatch_sched_weekday, - PyDoc_STR("*sequence[sequence]*: 12x24 PPA pricing Weekday schedule\n\n**Required:**\nFalse. Automatically set to 1 if not assigned explicitly or loaded from defaults."), - NULL}, -{"dispatch_sched_weekend", (getter)Tou_get_dispatch_sched_weekend,(setter)Tou_set_dispatch_sched_weekend, - PyDoc_STR("*sequence[sequence]*: 12x24 PPA pricing Weekend schedule\n\n**Required:**\nFalse. Automatically set to 1 if not assigned explicitly or loaded from defaults."), - NULL}, -{"dispatch_series", (getter)Tou_get_dispatch_series,(setter)Tou_set_dispatch_series, - PyDoc_STR("*sequence*: Time series dispatch factors"), - NULL}, -{"f_turb_tou_periods", (getter)Tou_get_f_turb_tou_periods,(setter)Tou_set_f_turb_tou_periods, - PyDoc_STR("*sequence*: Dispatch logic for heat sink load fraction [-]\n\n**Required:**\nTrue"), - NULL}, -{"is_ampl_engine", (getter)Tou_get_is_ampl_engine,(setter)Tou_set_is_ampl_engine, - PyDoc_STR("*float*: Run dispatch optimization with external AMPL engine [-]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), - NULL}, -{"is_dispatch", (getter)Tou_get_is_dispatch,(setter)Tou_set_is_dispatch, - PyDoc_STR("*float*: Allow dispatch optimization? [-]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), - NULL}, -{"is_dispatch_series", (getter)Tou_get_is_dispatch_series,(setter)Tou_set_is_dispatch_series, - PyDoc_STR("*float*: Use time-series dispatch factors\n\n**Required:**\nFalse. Automatically set to 1 if not assigned explicitly or loaded from defaults."), - NULL}, -{"is_tod_pc_target_also_pc_max", (getter)Tou_get_is_tod_pc_target_also_pc_max,(setter)Tou_set_is_tod_pc_target_also_pc_max, - PyDoc_STR("*float*: Is the TOD target cycle heat input also the max cycle heat input?\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), - NULL}, -{"is_wlim_series", (getter)Tou_get_is_wlim_series,(setter)Tou_set_is_wlim_series, - PyDoc_STR("*float*: Use time-series net heat generation limits\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), - NULL}, -{"is_write_ampl_dat", (getter)Tou_get_is_write_ampl_dat,(setter)Tou_set_is_write_ampl_dat, - PyDoc_STR("*float*: Write AMPL data files for dispatch run [-]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), - NULL}, -{"ppa_multiplier_model", (getter)Tou_get_ppa_multiplier_model,(setter)Tou_set_ppa_multiplier_model, - PyDoc_STR("*float*: PPA multiplier model [0/1]\n\n**Options:**\n0=diurnal,1=timestep\n\n**Constraints:**\nINTEGER,MIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), - NULL}, -{"q_rec_heattrace", (getter)Tou_get_q_rec_heattrace,(setter)Tou_set_q_rec_heattrace, - PyDoc_STR("*float*: Receiver heat trace energy consumption during startup [kWe-hr]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), - NULL}, -{"q_rec_standby", (getter)Tou_get_q_rec_standby,(setter)Tou_set_q_rec_standby, - PyDoc_STR("*float*: Receiver standby energy consumption [kWt]\n\n**Required:**\nFalse. Automatically set to 9e99 if not assigned explicitly or loaded from defaults."), - NULL}, -{"timestep_load_fractions", (getter)Tou_get_timestep_load_fractions,(setter)Tou_set_timestep_load_fractions, - PyDoc_STR("*sequence*: Turbine load fraction for each timestep, alternative to block dispatch\n\n**Required:**\nFalse for configuration with default inputs. May be required if a variable dependent on its value changes. Example: For the Detailed PV - Single Owner configuration, only Subarray 1 is enabled in the configuration defaults, so Subarray 2 inputs would not be required; if Subarray 2 is enabled, then Subarray 2 inputs is required."), - NULL}, -{"weekday_schedule", (getter)Tou_get_weekday_schedule,(setter)Tou_set_weekday_schedule, - PyDoc_STR("*sequence[sequence]*: 12x24 CSP operation Time-of-Use Weekday schedule [-]\n\n**Required:**\nTrue"), - NULL}, -{"weekend_schedule", (getter)Tou_get_weekend_schedule,(setter)Tou_set_weekend_schedule, - PyDoc_STR("*sequence[sequence]*: 12x24 CSP operation Time-of-Use Weekend schedule [-]\n\n**Required:**\nTrue"), - NULL}, -{"wlim_series", (getter)Tou_get_wlim_series,(setter)Tou_set_wlim_series, - PyDoc_STR("*sequence*: Time series net heat generation limits [kWt]\n\n**Required:**\nRequired if is_wlim_series=1"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject Tou_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalProcessHeat.Tou", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - Tou_methods, /*tp_methods*/ - 0, /*tp_members*/ - Tou_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * SystemControl Group - */ - -static PyTypeObject SystemControl_Type; - -static PyObject * -SystemControl_new(SAM_TroughPhysicalProcessHeat data_ptr) -{ - PyObject* new_obj = SystemControl_Type.tp_alloc(&SystemControl_Type,0); - - VarGroupObject* SystemControl_obj = (VarGroupObject*)new_obj; - - SystemControl_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* SystemControl methods */ - -static PyObject * -SystemControl_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalProcessHeat", "SystemControl")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -SystemControl_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &SystemControl_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalProcessHeat", "SystemControl")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -SystemControl_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &SystemControl_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef SystemControl_methods[] = { - {"assign", (PyCFunction)SystemControl_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``SystemControl_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)SystemControl_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``SystemControl_vals = { var: val, ...}``")}, - {"export", (PyCFunction)SystemControl_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -SystemControl_get_disp_inventory_incentive(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_SystemControl_disp_inventory_incentive_nget, self->data_ptr); -} - -static int -SystemControl_set_disp_inventory_incentive(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_SystemControl_disp_inventory_incentive_nset, self->data_ptr); -} - -static PyGetSetDef SystemControl_getset[] = { -{"disp_inventory_incentive", (getter)SystemControl_get_disp_inventory_incentive,(setter)SystemControl_set_disp_inventory_incentive, - PyDoc_STR("*float*: Dispatch storage terminal inventory incentive multiplier\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject SystemControl_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalProcessHeat.SystemControl", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - SystemControl_methods, /*tp_methods*/ - 0, /*tp_members*/ - SystemControl_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * TimeOfDeliveryFactors Group - */ - -static PyTypeObject TimeOfDeliveryFactors_Type; - -static PyObject * -TimeOfDeliveryFactors_new(SAM_TroughPhysicalProcessHeat data_ptr) -{ - PyObject* new_obj = TimeOfDeliveryFactors_Type.tp_alloc(&TimeOfDeliveryFactors_Type,0); - - VarGroupObject* TimeOfDeliveryFactors_obj = (VarGroupObject*)new_obj; - - TimeOfDeliveryFactors_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* TimeOfDeliveryFactors methods */ - -static PyObject * -TimeOfDeliveryFactors_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalProcessHeat", "TimeOfDeliveryFactors")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -TimeOfDeliveryFactors_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &TimeOfDeliveryFactors_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalProcessHeat", "TimeOfDeliveryFactors")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -TimeOfDeliveryFactors_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &TimeOfDeliveryFactors_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef TimeOfDeliveryFactors_methods[] = { - {"assign", (PyCFunction)TimeOfDeliveryFactors_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``TimeOfDeliveryFactors_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)TimeOfDeliveryFactors_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``TimeOfDeliveryFactors_vals = { var: val, ...}``")}, - {"export", (PyCFunction)TimeOfDeliveryFactors_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -TimeOfDeliveryFactors_get_dispatch_tod_factors(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_TimeOfDeliveryFactors_dispatch_tod_factors_aget, self->data_ptr); -} - -static int -TimeOfDeliveryFactors_set_dispatch_tod_factors(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_TimeOfDeliveryFactors_dispatch_tod_factors_aset, self->data_ptr); -} - -static PyGetSetDef TimeOfDeliveryFactors_getset[] = { -{"dispatch_tod_factors", (getter)TimeOfDeliveryFactors_get_dispatch_tod_factors,(setter)TimeOfDeliveryFactors_set_dispatch_tod_factors, - PyDoc_STR("*sequence*: TOD factors for periods 1 through 9\n\n**Info:**\nWe added this array input after SAM 2022.12.21 to replace the functionality of former single value inputs dispatch_factor1 through dispatch_factor9\n\n**Required:**\nRequired if is_dispatch=1&sim_type=1"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject TimeOfDeliveryFactors_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalProcessHeat.TimeOfDeliveryFactors", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - TimeOfDeliveryFactors_methods, /*tp_methods*/ - 0, /*tp_members*/ - TimeOfDeliveryFactors_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * System Group - */ - -static PyTypeObject System_Type; - -static PyObject * -System_new(SAM_TroughPhysicalProcessHeat data_ptr) -{ - PyObject* new_obj = System_Type.tp_alloc(&System_Type,0); - - VarGroupObject* System_obj = (VarGroupObject*)new_obj; - - System_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* System methods */ - -static PyObject * -System_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalProcessHeat", "System")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -System_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &System_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalProcessHeat", "System")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -System_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &System_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef System_methods[] = { - {"assign", (PyCFunction)System_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``System_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)System_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``System_vals = { var: val, ...}``")}, - {"export", (PyCFunction)System_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -System_get_aux_array(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_System_aux_array_aget, self->data_ptr); -} - -static int -System_set_aux_array(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_System_aux_array_aset, self->data_ptr); -} - -static PyObject * -System_get_bop_array(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_System_bop_array_aget, self->data_ptr); -} - -static int -System_set_bop_array(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_array_setter(value, SAM_TroughPhysicalProcessHeat_System_bop_array_aset, self->data_ptr); -} - -static PyObject * -System_get_pb_fixed_par(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_System_pb_fixed_par_nget, self->data_ptr); -} - -static int -System_set_pb_fixed_par(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_System_pb_fixed_par_nset, self->data_ptr); -} - -static PyGetSetDef System_getset[] = { -{"aux_array", (getter)System_get_aux_array,(setter)System_set_aux_array, - PyDoc_STR("*sequence*: Auxiliary heater, mult frac and const, linear and quad coeff\n\n**Required:**\nTrue"), - NULL}, -{"bop_array", (getter)System_get_bop_array,(setter)System_set_bop_array, - PyDoc_STR("*sequence*: Balance of plant parasitic power fraction, mult frac and const, linear and quad coeff\n\n**Required:**\nTrue"), - NULL}, -{"pb_fixed_par", (getter)System_get_pb_fixed_par,(setter)System_set_pb_fixed_par, - PyDoc_STR("*float*: Fraction of rated gross power constantly consumed [MWe/MWcap]\n\n**Required:**\nTrue"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject System_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalProcessHeat.System", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - System_methods, /*tp_methods*/ - 0, /*tp_members*/ - System_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * Powerblock Group - */ - -static PyTypeObject Powerblock_Type; - -static PyObject * -Powerblock_new(SAM_TroughPhysicalProcessHeat data_ptr) -{ - PyObject* new_obj = Powerblock_Type.tp_alloc(&Powerblock_Type,0); - - VarGroupObject* Powerblock_obj = (VarGroupObject*)new_obj; - - Powerblock_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* Powerblock methods */ - -static PyObject * -Powerblock_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalProcessHeat", "Powerblock")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Powerblock_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &Powerblock_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalProcessHeat", "Powerblock")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Powerblock_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &Powerblock_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef Powerblock_methods[] = { - {"assign", (PyCFunction)Powerblock_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``Powerblock_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)Powerblock_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``Powerblock_vals = { var: val, ...}``")}, - {"export", (PyCFunction)Powerblock_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -Powerblock_get_L_rnr_pb(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Powerblock_L_rnr_pb_nget, self->data_ptr); -} - -static int -Powerblock_set_L_rnr_pb(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalProcessHeat_Powerblock_L_rnr_pb_nset, self->data_ptr); -} - -static PyGetSetDef Powerblock_getset[] = { -{"L_rnr_pb", (getter)Powerblock_get_L_rnr_pb,(setter)Powerblock_set_L_rnr_pb, - PyDoc_STR("*float*: Length of runner pipe in power block [m]\n\n**Required:**\nTrue"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject Powerblock_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalProcessHeat.Powerblock", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - Powerblock_methods, /*tp_methods*/ - 0, /*tp_members*/ - Powerblock_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* - * Outputs Group - */ - -static PyTypeObject Outputs_Type; - -static PyObject * -Outputs_new(SAM_TroughPhysicalProcessHeat data_ptr) -{ - PyObject* new_obj = Outputs_Type.tp_alloc(&Outputs_Type,0); - - VarGroupObject* Outputs_obj = (VarGroupObject*)new_obj; - - Outputs_obj->data_ptr = (SAM_table)data_ptr; - - return new_obj; -} - -/* Outputs methods */ - -static PyObject * -Outputs_assign(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_dict(self->data_ptr, dict, "TroughPhysicalProcessHeat", "Outputs")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Outputs_replace(VarGroupObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - PyTypeObject* tp = &Outputs_Type; - - if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "TroughPhysicalProcessHeat", "Outputs")){ - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -Outputs_export(VarGroupObject *self, PyObject *args) -{ - PyTypeObject* tp = &Outputs_Type; - PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); - return dict; -} - -static PyMethodDef Outputs_methods[] = { - {"assign", (PyCFunction)Outputs_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``Outputs_vals = { var: val, ...}``")}, - {"replace", (PyCFunction)Outputs_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``Outputs_vals = { var: val, ...}``")}, - {"export", (PyCFunction)Outputs_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -Outputs_get_CosTh_ave(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_CosTh_ave_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_EndLoss_ave(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_EndLoss_ave_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_EqOpteff(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_EqOpteff_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_IAM_ave(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_IAM_ave_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_RowShadow_ave(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_RowShadow_ave_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_SCAs_def(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_SCAs_def_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_T_field_cold_in(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_T_field_cold_in_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_T_field_hot_out(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_T_field_hot_out_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_T_heat_sink_in(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_T_heat_sink_in_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_T_heat_sink_out(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_T_heat_sink_out_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_T_rec_cold_in(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_T_rec_cold_in_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_T_rec_hot_out(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_T_rec_hot_out_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_T_tes_cold(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_T_tes_cold_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_T_tes_hot(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_T_tes_hot_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_Theta_ave(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_Theta_ave_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_W_dot_field_pump(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_W_dot_field_pump_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_W_dot_parasitic_tot(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_W_dot_parasitic_tot_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_W_dot_pc_pump(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_W_dot_pc_pump_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_W_dot_sca_track(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_W_dot_sca_track_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_annual_electricity_consumption(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Outputs_annual_electricity_consumption_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_annual_energy(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Outputs_annual_energy_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_annual_energy_distribution_time(VarGroupObject *self, void *closure) -{ - return PySAM_matrix_getter(SAM_TroughPhysicalProcessHeat_Outputs_annual_energy_distribution_time_mget, self->data_ptr); -} - -static PyObject * -Outputs_get_annual_field_freeze_protection(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Outputs_annual_field_freeze_protection_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_annual_gross_energy(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Outputs_annual_gross_energy_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_annual_tes_freeze_protection(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Outputs_annual_tes_freeze_protection_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_annual_thermal_consumption(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Outputs_annual_thermal_consumption_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_annual_total_water_use(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Outputs_annual_total_water_use_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_beam(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_beam_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_capacity_factor(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Outputs_capacity_factor_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_deltaP_field(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_deltaP_field_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_dni_costh(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_dni_costh_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_e_ch_tes(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_e_ch_tes_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_e_dot_field_int_energy(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_e_dot_field_int_energy_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_gen(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_gen_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_hour_day(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_hour_day_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_kwh_per_kw(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Outputs_kwh_per_kw_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_m_dot_balance(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_m_dot_balance_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_m_dot_cr_to_tes_hot(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_m_dot_cr_to_tes_hot_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_m_dot_cycle_to_field(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_m_dot_cycle_to_field_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_m_dot_field_delivered(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_m_dot_field_delivered_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_m_dot_field_recirc(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_m_dot_field_recirc_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_m_dot_field_to_cycle(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_m_dot_field_to_cycle_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_m_dot_htf_heat_sink(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_m_dot_htf_heat_sink_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_m_dot_loop(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_m_dot_loop_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_m_dot_pc_to_tes_cold(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_m_dot_pc_to_tes_cold_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_m_dot_tes_cold_out(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_m_dot_tes_cold_out_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_m_dot_tes_hot_out(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_m_dot_tes_hot_out_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_mass_tes_cold(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_mass_tes_cold_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_mass_tes_hot(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_mass_tes_hot_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_month(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_month_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_op_mode_1(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_op_mode_1_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_op_mode_2(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_op_mode_2_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_op_mode_3(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_op_mode_3_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_pres(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_pres_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_balance(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_q_balance_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_ch_tes(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_q_ch_tes_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dc_tes(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_q_dc_tes_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dot_freeze_prot(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_q_dot_freeze_prot_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dot_htf_sf_out(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_q_dot_htf_sf_out_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dot_piping_loss(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_q_dot_piping_loss_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dot_rec_abs(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_q_dot_rec_abs_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dot_rec_inc(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_q_dot_rec_inc_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dot_rec_thermal_loss(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_q_dot_rec_thermal_loss_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_dot_to_heat_sink(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_q_dot_to_heat_sink_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_inc_sf_tot(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_q_inc_sf_tot_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_q_tes_heater(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_q_tes_heater_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_qinc_costh(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_qinc_costh_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_solar_multiple_actual(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalProcessHeat_Outputs_solar_multiple_actual_nget, self->data_ptr); -} - -static PyObject * -Outputs_get_solazi(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_solazi_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_solzen(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_solzen_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_tank_losses(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_tank_losses_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_tdry(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_tdry_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_time_hr(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_time_hr_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_twet(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_twet_aget, self->data_ptr); -} - -static PyObject * -Outputs_get_wspd(VarGroupObject *self, void *closure) -{ - return PySAM_array_getter(SAM_TroughPhysicalProcessHeat_Outputs_wspd_aget, self->data_ptr); -} - -static PyGetSetDef Outputs_getset[] = { -{"CosTh_ave", (getter)Outputs_get_CosTh_ave,(setter)0, - PyDoc_STR("*sequence*: Field collector cosine efficiency"), - NULL}, -{"EndLoss_ave", (getter)Outputs_get_EndLoss_ave,(setter)0, - PyDoc_STR("*sequence*: Field collector optical end loss"), - NULL}, -{"EqOpteff", (getter)Outputs_get_EqOpteff,(setter)0, - PyDoc_STR("*sequence*: Field optical efficiency before defocus"), - NULL}, -{"IAM_ave", (getter)Outputs_get_IAM_ave,(setter)0, - PyDoc_STR("*sequence*: Field collector incidence angle modifier"), - NULL}, -{"RowShadow_ave", (getter)Outputs_get_RowShadow_ave,(setter)0, - PyDoc_STR("*sequence*: Field collector row shadowing loss"), - NULL}, -{"SCAs_def", (getter)Outputs_get_SCAs_def,(setter)0, - PyDoc_STR("*sequence*: Field fraction of focused SCAs"), - NULL}, -{"T_field_cold_in", (getter)Outputs_get_T_field_cold_in,(setter)0, - PyDoc_STR("*sequence*: Field timestep-averaged inlet temperature [C]"), - NULL}, -{"T_field_hot_out", (getter)Outputs_get_T_field_hot_out,(setter)0, - PyDoc_STR("*sequence*: Field timestep-averaged outlet temperature [C]"), - NULL}, -{"T_heat_sink_in", (getter)Outputs_get_T_heat_sink_in,(setter)0, - PyDoc_STR("*sequence*: Heat sink HTF inlet temp [C]"), - NULL}, -{"T_heat_sink_out", (getter)Outputs_get_T_heat_sink_out,(setter)0, - PyDoc_STR("*sequence*: Heat sink HTF outlet temp [C]"), - NULL}, -{"T_rec_cold_in", (getter)Outputs_get_T_rec_cold_in,(setter)0, - PyDoc_STR("*sequence*: Loop timestep-averaged inlet temperature [C]"), - NULL}, -{"T_rec_hot_out", (getter)Outputs_get_T_rec_hot_out,(setter)0, - PyDoc_STR("*sequence*: Loop timestep-averaged outlet temperature [C]"), - NULL}, -{"T_tes_cold", (getter)Outputs_get_T_tes_cold,(setter)0, - PyDoc_STR("*sequence*: TES cold temperature [C]"), - NULL}, -{"T_tes_hot", (getter)Outputs_get_T_tes_hot,(setter)0, - PyDoc_STR("*sequence*: TES hot temperature [C]"), - NULL}, -{"Theta_ave", (getter)Outputs_get_Theta_ave,(setter)0, - PyDoc_STR("*sequence*: Field collector solar incidence angle [deg]"), - NULL}, -{"W_dot_field_pump", (getter)Outputs_get_W_dot_field_pump,(setter)0, - PyDoc_STR("*sequence*: Field htf pumping power [MWe]"), - NULL}, -{"W_dot_parasitic_tot", (getter)Outputs_get_W_dot_parasitic_tot,(setter)0, - PyDoc_STR("*sequence*: System total electrical parasitic [MWe]"), - NULL}, -{"W_dot_pc_pump", (getter)Outputs_get_W_dot_pc_pump,(setter)0, - PyDoc_STR("*sequence*: Heat sink pumping power [MWe]"), - NULL}, -{"W_dot_sca_track", (getter)Outputs_get_W_dot_sca_track,(setter)0, - PyDoc_STR("*sequence*: Field collector tracking power [MWe]"), - NULL}, -{"annual_electricity_consumption", (getter)Outputs_get_annual_electricity_consumption,(setter)0, - PyDoc_STR("*float*: Annual electricity consumption w/ avail derate [kWe-hr]"), - NULL}, -{"annual_energy", (getter)Outputs_get_annual_energy,(setter)0, - PyDoc_STR("*float*: Annual Net Thermal Energy Production w/ avail derate [kWt-hr]"), - NULL}, -{"annual_energy_distribution_time", (getter)Outputs_get_annual_energy_distribution_time,(setter)0, - PyDoc_STR("*sequence[sequence]*: Annual energy production as function of time [kW]"), - NULL}, -{"annual_field_freeze_protection", (getter)Outputs_get_annual_field_freeze_protection,(setter)0, - PyDoc_STR("*float*: Annual thermal power for field freeze protection [kWt-hr]"), - NULL}, -{"annual_gross_energy", (getter)Outputs_get_annual_gross_energy,(setter)0, - PyDoc_STR("*float*: Annual Gross Thermal Energy Production w/ avail derate [kWt-hr]"), - NULL}, -{"annual_tes_freeze_protection", (getter)Outputs_get_annual_tes_freeze_protection,(setter)0, - PyDoc_STR("*float*: Annual thermal power for TES freeze protection [kWt-hr]"), - NULL}, -{"annual_thermal_consumption", (getter)Outputs_get_annual_thermal_consumption,(setter)0, - PyDoc_STR("*float*: Annual thermal freeze protection required [kWt-hr]"), - NULL}, -{"annual_total_water_use", (getter)Outputs_get_annual_total_water_use,(setter)0, - PyDoc_STR("*float*: Total Annual Water Usage [m^3]"), - NULL}, -{"beam", (getter)Outputs_get_beam,(setter)0, - PyDoc_STR("*sequence*: Resource Beam normal irradiance [W/m2]"), - NULL}, -{"capacity_factor", (getter)Outputs_get_capacity_factor,(setter)0, - PyDoc_STR("*float*: Capacity factor [%]"), - NULL}, -{"deltaP_field", (getter)Outputs_get_deltaP_field,(setter)0, - PyDoc_STR("*sequence*: Field pressure drop [bar]"), - NULL}, -{"dni_costh", (getter)Outputs_get_dni_costh,(setter)0, - PyDoc_STR("*sequence*: Field collector DNI-cosine product [W/m2]"), - NULL}, -{"e_ch_tes", (getter)Outputs_get_e_ch_tes,(setter)0, - PyDoc_STR("*sequence*: TES charge state [MWht]"), - NULL}, -{"e_dot_field_int_energy", (getter)Outputs_get_e_dot_field_int_energy,(setter)0, - PyDoc_STR("*sequence*: Field change in material/htf internal energy [MWt]"), - NULL}, -{"gen", (getter)Outputs_get_gen,(setter)0, - PyDoc_STR("*sequence*: System power generated [kW]"), - NULL}, -{"hour_day", (getter)Outputs_get_hour_day,(setter)0, - PyDoc_STR("*sequence*: Resource Hour of Day"), - NULL}, -{"kwh_per_kw", (getter)Outputs_get_kwh_per_kw,(setter)0, - PyDoc_STR("*float*: First year kWh/kW [kWht/kWt]"), - NULL}, -{"m_dot_balance", (getter)Outputs_get_m_dot_balance,(setter)0, - PyDoc_STR("*sequence*: Relative mass flow balance error"), - NULL}, -{"m_dot_cr_to_tes_hot", (getter)Outputs_get_m_dot_cr_to_tes_hot,(setter)0, - PyDoc_STR("*sequence*: Mass flow: field to hot TES [kg/s]"), - NULL}, -{"m_dot_cycle_to_field", (getter)Outputs_get_m_dot_cycle_to_field,(setter)0, - PyDoc_STR("*sequence*: Mass flow: cycle to field [kg/s]"), - NULL}, -{"m_dot_field_delivered", (getter)Outputs_get_m_dot_field_delivered,(setter)0, - PyDoc_STR("*sequence*: Field total mass flow delivered [kg/s]"), - NULL}, -{"m_dot_field_recirc", (getter)Outputs_get_m_dot_field_recirc,(setter)0, - PyDoc_STR("*sequence*: Field total mass flow recirculated [kg/s]"), - NULL}, -{"m_dot_field_to_cycle", (getter)Outputs_get_m_dot_field_to_cycle,(setter)0, - PyDoc_STR("*sequence*: Mass flow: field to cycle [kg/s]"), - NULL}, -{"m_dot_htf_heat_sink", (getter)Outputs_get_m_dot_htf_heat_sink,(setter)0, - PyDoc_STR("*sequence*: Heat sink HTF mass flow [kg/s]"), - NULL}, -{"m_dot_loop", (getter)Outputs_get_m_dot_loop,(setter)0, - PyDoc_STR("*sequence*: Receiver mass flow rate [kg/s]"), - NULL}, -{"m_dot_pc_to_tes_cold", (getter)Outputs_get_m_dot_pc_to_tes_cold,(setter)0, - PyDoc_STR("*sequence*: Mass flow: cycle to cold TES [kg/s]"), - NULL}, -{"m_dot_tes_cold_out", (getter)Outputs_get_m_dot_tes_cold_out,(setter)0, - PyDoc_STR("*sequence*: Mass flow: TES cold out [kg/s]"), - NULL}, -{"m_dot_tes_hot_out", (getter)Outputs_get_m_dot_tes_hot_out,(setter)0, - PyDoc_STR("*sequence*: Mass flow: TES hot out [kg/s]"), - NULL}, -{"mass_tes_cold", (getter)Outputs_get_mass_tes_cold,(setter)0, - PyDoc_STR("*sequence*: TES cold tank mass (end) [kg]"), - NULL}, -{"mass_tes_hot", (getter)Outputs_get_mass_tes_hot,(setter)0, - PyDoc_STR("*sequence*: TES hot tank mass (end) [kg]"), - NULL}, -{"month", (getter)Outputs_get_month,(setter)0, - PyDoc_STR("*sequence*: Resource Month"), - NULL}, -{"op_mode_1", (getter)Outputs_get_op_mode_1,(setter)0, - PyDoc_STR("*sequence*: 1st operating mode"), - NULL}, -{"op_mode_2", (getter)Outputs_get_op_mode_2,(setter)0, - PyDoc_STR("*sequence*: 2nd op. mode, if applicable"), - NULL}, -{"op_mode_3", (getter)Outputs_get_op_mode_3,(setter)0, - PyDoc_STR("*sequence*: 3rd op. mode, if applicable"), - NULL}, -{"pres", (getter)Outputs_get_pres,(setter)0, - PyDoc_STR("*sequence*: Resource Pressure [mbar]"), - NULL}, -{"q_balance", (getter)Outputs_get_q_balance,(setter)0, - PyDoc_STR("*sequence*: Relative energy balance error"), - NULL}, -{"q_ch_tes", (getter)Outputs_get_q_ch_tes,(setter)0, - PyDoc_STR("*sequence*: TES charge thermal power [MWt]"), - NULL}, -{"q_dc_tes", (getter)Outputs_get_q_dc_tes,(setter)0, - PyDoc_STR("*sequence*: TES discharge thermal power [MWt]"), - NULL}, -{"q_dot_freeze_prot", (getter)Outputs_get_q_dot_freeze_prot,(setter)0, - PyDoc_STR("*sequence*: Field freeze protection required [MWt]"), - NULL}, -{"q_dot_htf_sf_out", (getter)Outputs_get_q_dot_htf_sf_out,(setter)0, - PyDoc_STR("*sequence*: Field thermal power leaving in HTF [MWt]"), - NULL}, -{"q_dot_piping_loss", (getter)Outputs_get_q_dot_piping_loss,(setter)0, - PyDoc_STR("*sequence*: Field piping thermal losses [MWt]"), - NULL}, -{"q_dot_rec_abs", (getter)Outputs_get_q_dot_rec_abs,(setter)0, - PyDoc_STR("*sequence*: Receiver thermal power absorbed [MWt]"), - NULL}, -{"q_dot_rec_inc", (getter)Outputs_get_q_dot_rec_inc,(setter)0, - PyDoc_STR("*sequence*: Receiver thermal power incident [MWt]"), - NULL}, -{"q_dot_rec_thermal_loss", (getter)Outputs_get_q_dot_rec_thermal_loss,(setter)0, - PyDoc_STR("*sequence*: Receiver thermal losses [MWt]"), - NULL}, -{"q_dot_to_heat_sink", (getter)Outputs_get_q_dot_to_heat_sink,(setter)0, - PyDoc_STR("*sequence*: Heat sink thermal power [MWt]"), - NULL}, -{"q_inc_sf_tot", (getter)Outputs_get_q_inc_sf_tot,(setter)0, - PyDoc_STR("*sequence*: Field thermal power incident [MWt]"), - NULL}, -{"q_tes_heater", (getter)Outputs_get_q_tes_heater,(setter)0, - PyDoc_STR("*sequence*: TES freeze protection power [MWe]"), - NULL}, -{"qinc_costh", (getter)Outputs_get_qinc_costh,(setter)0, - PyDoc_STR("*sequence*: Field thermal power incident after cosine [MWt]"), - NULL}, -{"solar_multiple_actual", (getter)Outputs_get_solar_multiple_actual,(setter)0, - PyDoc_STR("*float*: Actual solar multiple of system [-]"), - NULL}, -{"solazi", (getter)Outputs_get_solazi,(setter)0, - PyDoc_STR("*sequence*: Resource Solar Azimuth [deg]"), - NULL}, -{"solzen", (getter)Outputs_get_solzen,(setter)0, - PyDoc_STR("*sequence*: Resource Solar Zenith [deg]"), - NULL}, -{"tank_losses", (getter)Outputs_get_tank_losses,(setter)0, - PyDoc_STR("*sequence*: TES thermal losses [MWt]"), - NULL}, -{"tdry", (getter)Outputs_get_tdry,(setter)0, - PyDoc_STR("*sequence*: Resource Dry bulb temperature [C]"), - NULL}, -{"time_hr", (getter)Outputs_get_time_hr,(setter)0, - PyDoc_STR("*sequence*: Time at end of timestep [hr]"), - NULL}, -{"twet", (getter)Outputs_get_twet,(setter)0, - PyDoc_STR("*sequence*: Resource Wet bulb temperature [C]"), - NULL}, -{"wspd", (getter)Outputs_get_wspd,(setter)0, - PyDoc_STR("*sequence*: Resource Wind Speed [m/s]"), - NULL}, - {NULL} /* Sentinel */ -}; - -static PyTypeObject Outputs_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalProcessHeat.Outputs", /*tp_name*/ - sizeof(VarGroupObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - Outputs_methods, /*tp_methods*/ - 0, /*tp_members*/ - Outputs_getset, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - -/* - * TroughPhysicalProcessHeat - */ - -static PyTypeObject TroughPhysicalProcessHeat_Type; - -static CmodObject * -newTroughPhysicalProcessHeatObject(void* data_ptr) -{ - CmodObject *self; - self = PyObject_New(CmodObject, &TroughPhysicalProcessHeat_Type); - - PySAM_TECH_ATTR() - - PyObject* Weather_obj = Weather_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "Weather", Weather_obj); - Py_DECREF(Weather_obj); - - PyObject* SolarField_obj = SolarField_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "SolarField", SolarField_obj); - Py_DECREF(SolarField_obj); - - PyObject* Controller_obj = Controller_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "Controller", Controller_obj); - Py_DECREF(Controller_obj); - - PyObject* SystemDesign_obj = SystemDesign_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "SystemDesign", SystemDesign_obj); - Py_DECREF(SystemDesign_obj); - - PyObject* TES_obj = TES_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "TES", TES_obj); - Py_DECREF(TES_obj); - - PyObject* TES2tank_obj = TES2tank_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "TES2tank", TES2tank_obj); - Py_DECREF(TES2tank_obj); - - PyObject* Tou_obj = Tou_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "Tou", Tou_obj); - Py_DECREF(Tou_obj); - - PyObject* SystemControl_obj = SystemControl_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "SystemControl", SystemControl_obj); - Py_DECREF(SystemControl_obj); - - PyObject* TimeOfDeliveryFactors_obj = TimeOfDeliveryFactors_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "TimeOfDeliveryFactors", TimeOfDeliveryFactors_obj); - Py_DECREF(TimeOfDeliveryFactors_obj); - - PyObject* System_obj = System_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "System", System_obj); - Py_DECREF(System_obj); - - PyObject* Powerblock_obj = Powerblock_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "Powerblock", Powerblock_obj); - Py_DECREF(Powerblock_obj); - - PyObject* AdjustmentFactorsModule = PyImport_ImportModule("AdjustmentFactors"); - - PyObject* data_cap = PyCapsule_New(self->data_ptr, NULL, NULL); - PyObject* Adjust_obj = PyObject_CallMethod(AdjustmentFactorsModule, "new", "(O)", data_cap); - Py_XDECREF(data_cap); - Py_XDECREF(AdjustmentFactorsModule); - - if (!Adjust_obj){ - PyErr_SetString(PyExc_Exception, "Couldn't create AdjustmentFactorsObject\n"); - return NULL; - } - - PyDict_SetItemString(attr_dict, "AdjustmentFactors", Adjust_obj); - Py_DECREF(Adjust_obj); - - PyObject* Outputs_obj = Outputs_new(self->data_ptr); - PyDict_SetItemString(attr_dict, "Outputs", Outputs_obj); - Py_DECREF(Outputs_obj); - - return self; -} - -/* TroughPhysicalProcessHeat methods */ - -static void -TroughPhysicalProcessHeat_dealloc(CmodObject *self) -{ - Py_XDECREF(self->x_attr); - - if (!self->data_owner_ptr) { - SAM_error error = new_error(); - SAM_table_destruct(self->data_ptr, &error); - PySAM_has_error(error); - } - PyObject_Del(self); -} - - -static PyObject * -TroughPhysicalProcessHeat_get_data_ptr(CmodObject *self, PyObject *args) -{ - PyObject* ptr = PyLong_FromVoidPtr((void*)self->data_ptr); - return ptr; -} - - -static PyObject * -TroughPhysicalProcessHeat_execute(CmodObject *self, PyObject *args) -{ - int verbosity = 0; - - if (!PyArg_ParseTuple(args, "|i", &verbosity)) - return NULL; - - SAM_error error = new_error(); - SAM_TroughPhysicalProcessHeat_execute(self->data_ptr, verbosity, &error); - if (PySAM_has_error(error )) return NULL; - Py_INCREF(Py_None); - return Py_None; -} - - -static PyObject * -TroughPhysicalProcessHeat_assign(CmodObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_assign_from_nested_dict((PyObject*)self, self->x_attr, self->data_ptr, dict, "TroughPhysicalProcessHeat")) - return NULL; - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -TroughPhysicalProcessHeat_replace(CmodObject *self, PyObject *args) -{ - PyObject* dict; - if (!PyArg_ParseTuple(args, "O:assign", &dict)){ - return NULL; - } - - if (!PySAM_replace_from_nested_dict((PyObject*)self, self->x_attr, self->data_ptr, dict, "TroughPhysicalProcessHeat")) - return NULL; - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -TroughPhysicalProcessHeat_export(CmodObject *self, PyObject *args) -{ - return PySAM_export_to_nested_dict((PyObject *) self, self->x_attr); -} - -static PyObject * -TroughPhysicalProcessHeat_value(CmodObject *self, PyObject *args) -{ - return Cmod_value(self, args); -} - -static PyObject * -TroughPhysicalProcessHeat_unassign(CmodObject *self, PyObject *args) -{ - return Cmod_unassign(self, args); -} - -static PyMethodDef TroughPhysicalProcessHeat_methods[] = { - {"execute", (PyCFunction)TroughPhysicalProcessHeat_execute, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"assign", (PyCFunction)TroughPhysicalProcessHeat_assign, METH_VARARGS, - PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'weather': { var: val, ...}, ...}``")}, - {"replace", (PyCFunction)TroughPhysicalProcessHeat_replace, METH_VARARGS, - PyDoc_STR("replace(dict) -> None\n Replace attributes from nested dictionary, except for Outputs. Unassigns all values in each Group then assigns from the input dict.\n\n``nested_dict = { 'weather': { var: val, ...}, ...}``")}, - {"export", (PyCFunction)TroughPhysicalProcessHeat_export, METH_VARARGS, - PyDoc_STR("export() -> dict\n Export attributes into nested dictionary")}, - {"value", (PyCFunction)TroughPhysicalProcessHeat_value, METH_VARARGS, - PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, - {"unassign", (PyCFunction)TroughPhysicalProcessHeat_unassign, METH_VARARGS, - PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, - {"get_data_ptr", (PyCFunction)TroughPhysicalProcessHeat_get_data_ptr, METH_VARARGS, - PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -TroughPhysicalProcessHeat_getattro(CmodObject *self, PyObject *name) -{ - return PySAM_get_attr((PyObject*) self, (PyObject*) self->x_attr, name); -} - -static int -TroughPhysicalProcessHeat_setattr(CmodObject *self, const char *name, PyObject *v) -{ - return PySAM_set_attr((PyObject*)self, (PyObject*)self->x_attr, name, v); -} - -static PyTypeObject TroughPhysicalProcessHeat_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "TroughPhysicalProcessHeat", /*tp_name*/ - sizeof(CmodObject),/*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - (destructor)TroughPhysicalProcessHeat_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - (setattrfunc)TroughPhysicalProcessHeat_setattr, /*tp_setattr*/ - 0, /*tp_reserved*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - (getattrofunc)TroughPhysicalProcessHeat_getattro, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - "This class contains all the variable information for running a simulation. Variables are grouped together in the subclasses as properties. If property assignments are the wrong type, an error is thrown.", /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistofnset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - TroughPhysicalProcessHeat_methods, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictofnset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - -/* --------------------------------------------------------------------- */ - - -/* Function of no arguments returning new TroughPhysicalProcessHeat object */ - -static PyObject * -TroughPhysicalProcessHeat_new(PyObject *self, PyObject *args) -{ - CmodObject *rv; - rv = newTroughPhysicalProcessHeatObject(0); - if (rv == NULL) - return NULL; - - rv->data_owner_ptr = NULL; - return (PyObject *)rv; -} - -static PyObject * -TroughPhysicalProcessHeat_wrap(PyObject *self, PyObject *args) -{ - CmodObject *rv; - long long int ptr = 0; // 64 bit arch - if (!PyArg_ParseTuple(args, "L:wrap", &ptr)){ - PyErr_BadArgument(); - return NULL; - } - rv = newTroughPhysicalProcessHeatObject((void*)ptr); - if (rv == NULL) - return NULL; - - rv->data_owner_ptr = NULL; - return (PyObject *)rv; -} - -static PyObject * -TroughPhysicalProcessHeat_default(PyObject *self, PyObject *args) -{ - CmodObject *rv; - char* def = 0; - if (!PyArg_ParseTuple(args, "s:default", &def)){ - PyErr_BadArgument(); - return NULL; - } - rv = newTroughPhysicalProcessHeatObject(0); - if (rv == NULL) - return NULL; - - rv->data_owner_ptr = NULL; - if (PySAM_load_defaults((PyObject*)rv, rv->x_attr, rv->data_ptr, "TroughPhysicalProcessHeat", def) < 0) { - TroughPhysicalProcessHeat_dealloc(rv); - return NULL; - } - return (PyObject *)rv; -} - -static PyObject * -TroughPhysicalProcessHeat_from_existing(PyObject *self, PyObject *args) -{ - CmodObject *rv; - PyObject * module = 0; - char* def = 0; - if (!PyArg_ParseTuple(args, "O|s:from_existing", &module, &def)){ - PyErr_BadArgument(); - return NULL; - } - CmodObject *module_obj = (CmodObject *)module; - SAM_table ptr = module_obj->data_ptr; - - // do a rough validity check on the data by checking its size - SAM_error error = new_error(); - int data_size = SAM_table_size(ptr, &error); - if (PySAM_has_error(error)) - goto fail; - if (data_size < 0) - goto fail; - - rv = newTroughPhysicalProcessHeatObject((void*)ptr); - if (rv == NULL) - goto fail; - rv->data_owner_ptr = module; - if (!def) - return (PyObject *)rv; - PySAM_load_defaults((PyObject*)rv, rv->x_attr, rv->data_ptr, "TroughPhysicalProcessHeat", def); - return (PyObject *)rv; - - fail: - Py_DECREF(module); - return NULL; -}/* ---------- */ - - -/* List of functions defined in the module */ - -static PyMethodDef TroughPhysicalProcessHeatModule_methods[] = { - {"new", TroughPhysicalProcessHeat_new, METH_VARARGS, - PyDoc_STR("new() -> TroughPhysicalProcessHeat")}, - {"default", TroughPhysicalProcessHeat_default, METH_VARARGS, - PyDoc_STR("default(config) -> TroughPhysicalProcessHeat\n\nLoad defaults for the configuration ``config``. Available configurations are:\n\n- None\n\n.. note::\n\n Some inputs do not have default values and may be assigned a value from the variable's **Required** attribute. See variable attribute descriptions below.")}, - {"wrap", TroughPhysicalProcessHeat_wrap, METH_VARARGS, - PyDoc_STR("wrap(ssc_data_t) -> TroughPhysicalProcessHeat\n\nLoad data from a PySSC object.\n\n.. warning::\n\n Do not call PySSC.data_free on the ssc_data_t provided to ``wrap()``")}, - {"from_existing", TroughPhysicalProcessHeat_from_existing, METH_VARARGS, - PyDoc_STR("from_existing(data, optional config) -> TroughPhysicalProcessHeat\n\nShare data with an existing PySAM class. If ``optional config`` is a valid configuration name, load the module's defaults for that configuration.")}, - {NULL, NULL} /* sentinel */ -}; - -PyDoc_STRVAR(module_doc, - "Parabolic trough for industrial process heat applications"); - - -static int -TroughPhysicalProcessHeatModule_exec(PyObject *m) -{ - /* Finalize the type object including setting type of the new type - * object; doing it here is required for portability, too. */ - - if (PySAM_load_lib(m) < 0) goto fail; - - TroughPhysicalProcessHeat_Type.tp_dict = PyDict_New(); - if (!TroughPhysicalProcessHeat_Type.tp_dict) { goto fail; } - - /// Add the Weather type object to TroughPhysicalProcessHeat_Type - if (PyType_Ready(&Weather_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalProcessHeat_Type.tp_dict, - "Weather", - (PyObject*)&Weather_Type); - Py_DECREF(&Weather_Type); - - /// Add the SolarField type object to TroughPhysicalProcessHeat_Type - if (PyType_Ready(&SolarField_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalProcessHeat_Type.tp_dict, - "SolarField", - (PyObject*)&SolarField_Type); - Py_DECREF(&SolarField_Type); - - /// Add the Controller type object to TroughPhysicalProcessHeat_Type - if (PyType_Ready(&Controller_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalProcessHeat_Type.tp_dict, - "Controller", - (PyObject*)&Controller_Type); - Py_DECREF(&Controller_Type); - - /// Add the SystemDesign type object to TroughPhysicalProcessHeat_Type - if (PyType_Ready(&SystemDesign_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalProcessHeat_Type.tp_dict, - "SystemDesign", - (PyObject*)&SystemDesign_Type); - Py_DECREF(&SystemDesign_Type); - - /// Add the TES type object to TroughPhysicalProcessHeat_Type - if (PyType_Ready(&TES_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalProcessHeat_Type.tp_dict, - "TES", - (PyObject*)&TES_Type); - Py_DECREF(&TES_Type); - - /// Add the TES2tank type object to TroughPhysicalProcessHeat_Type - if (PyType_Ready(&TES2tank_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalProcessHeat_Type.tp_dict, - "TES2tank", - (PyObject*)&TES2tank_Type); - Py_DECREF(&TES2tank_Type); - - /// Add the Tou type object to TroughPhysicalProcessHeat_Type - if (PyType_Ready(&Tou_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalProcessHeat_Type.tp_dict, - "Tou", - (PyObject*)&Tou_Type); - Py_DECREF(&Tou_Type); - - /// Add the SystemControl type object to TroughPhysicalProcessHeat_Type - if (PyType_Ready(&SystemControl_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalProcessHeat_Type.tp_dict, - "SystemControl", - (PyObject*)&SystemControl_Type); - Py_DECREF(&SystemControl_Type); - - /// Add the TimeOfDeliveryFactors type object to TroughPhysicalProcessHeat_Type - if (PyType_Ready(&TimeOfDeliveryFactors_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalProcessHeat_Type.tp_dict, - "TimeOfDeliveryFactors", - (PyObject*)&TimeOfDeliveryFactors_Type); - Py_DECREF(&TimeOfDeliveryFactors_Type); - - /// Add the System type object to TroughPhysicalProcessHeat_Type - if (PyType_Ready(&System_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalProcessHeat_Type.tp_dict, - "System", - (PyObject*)&System_Type); - Py_DECREF(&System_Type); - - /// Add the Powerblock type object to TroughPhysicalProcessHeat_Type - if (PyType_Ready(&Powerblock_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalProcessHeat_Type.tp_dict, - "Powerblock", - (PyObject*)&Powerblock_Type); - Py_DECREF(&Powerblock_Type); - - /// Add the Outputs type object to TroughPhysicalProcessHeat_Type - if (PyType_Ready(&Outputs_Type) < 0) { goto fail; } - PyDict_SetItemString(TroughPhysicalProcessHeat_Type.tp_dict, - "Outputs", - (PyObject*)&Outputs_Type); - Py_DECREF(&Outputs_Type); - - /// Add the TroughPhysicalProcessHeat type object to the module - if (PyType_Ready(&TroughPhysicalProcessHeat_Type) < 0) { goto fail; } - PyModule_AddObject(m, - "TroughPhysicalProcessHeat", - (PyObject*)&TroughPhysicalProcessHeat_Type); - - return 0; - fail: - Py_XDECREF(m); - return -1; -} - -static struct PyModuleDef_Slot TroughPhysicalProcessHeatModule_slots[] = { - {Py_mod_exec, TroughPhysicalProcessHeatModule_exec}, - {0, NULL}, -}; - -static struct PyModuleDef TroughPhysicalProcessHeatModule = { - PyModuleDef_HEAD_INIT, - "TroughPhysicalProcessHeat", - module_doc, - 0, - TroughPhysicalProcessHeatModule_methods, - TroughPhysicalProcessHeatModule_slots, - NULL, - NULL, - NULL -}; - -/* Export function for the module */ - -PyMODINIT_FUNC -PyInit_TroughPhysicalProcessHeat(void) -{ - return PyModuleDef_Init(&TroughPhysicalProcessHeatModule); -} \ No newline at end of file diff --git a/stubs/stubs/FresnelPhysical.pyi b/stubs/stubs/FresnelPhysical.pyi index 2abd846..4681b8b 100644 --- a/stubs/stubs/FresnelPhysical.pyi +++ b/stubs/stubs/FresnelPhysical.pyi @@ -101,8 +101,6 @@ class FresnelPhysical(object): eta_pump = float field_fl_props = tuple land_mult = float - m_dot_htfmax = float - m_dot_htfmin = float mc_bal_cold = float mc_bal_hot = float mc_bal_sca = float @@ -117,6 +115,24 @@ class FresnelPhysical(object): water_per_wash = float + class SolarField(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + f_htfmax = float + f_htfmin = float + m_dot_htfmax = float + m_dot_htfmin = float + use_abs_or_rel_mdot_limit = float + + class ColRec(object): def assign(self): pass @@ -274,7 +290,6 @@ class FresnelPhysical(object): disp_timeout = float dispatch_series = tuple is_dispatch = float - is_dispatch_series = float pb_fixed_par = float weekday_schedule = tuple weekend_schedule = tuple @@ -587,6 +602,8 @@ class FresnelPhysical(object): epc_total_cost = float eta = tuple eta_optical_des_SS = float + f_htfmax_actual = float + f_htfmin_actual = float field_area = float field_htf_max_temp = float field_htf_min_temp = float @@ -611,6 +628,8 @@ class FresnelPhysical(object): m_dot_field_delivered = tuple m_dot_field_recirc = tuple m_dot_field_to_cycle = tuple + m_dot_htfmax_actual = float + m_dot_htfmin_actual = float m_dot_loop = tuple m_dot_loop_des_SS = float m_dot_pc = tuple diff --git a/stubs/stubs/FresnelPhysicalIph.pyi b/stubs/stubs/FresnelPhysicalIph.pyi index 236a671..10fd6cb 100644 --- a/stubs/stubs/FresnelPhysicalIph.pyi +++ b/stubs/stubs/FresnelPhysicalIph.pyi @@ -99,8 +99,6 @@ class FresnelPhysicalIph(object): eta_pump = float field_fl_props = tuple land_mult = float - m_dot_htfmax = float - m_dot_htfmin = float mc_bal_cold = float mc_bal_hot = float mc_bal_sca = float @@ -115,6 +113,24 @@ class FresnelPhysicalIph(object): water_per_wash = float + class SolarField(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + f_htfmax = float + f_htfmin = float + m_dot_htfmax = float + m_dot_htfmin = float + use_abs_or_rel_mdot_limit = float + + class ColRec(object): def assign(self): pass @@ -516,6 +532,8 @@ class FresnelPhysicalIph(object): eff_loop_des_SS = float epc_total_cost = float eta_optical_des_SS = float + f_htfmax_actual = float + f_htfmin_actual = float field_area = float field_htf_max_temp = float field_htf_min_temp = float @@ -541,6 +559,8 @@ class FresnelPhysicalIph(object): m_dot_field_recirc = tuple m_dot_field_to_cycle = tuple m_dot_htf_heat_sink = tuple + m_dot_htfmax_actual = float + m_dot_htfmin_actual = float m_dot_loop = tuple m_dot_loop_des_SS = float m_dot_pc_to_tes_cold = tuple diff --git a/stubs/stubs/GenericSystem.pyi b/stubs/stubs/GenericSystem.pyi index 225baed..188b12b 100644 --- a/stubs/stubs/GenericSystem.pyi +++ b/stubs/stubs/GenericSystem.pyi @@ -145,6 +145,8 @@ class GenericSystem(object): gen = tuple kwh_per_kw = float monthly_energy = tuple + output_file = str + sim_cpu_run_time = float system_heat_rate = float water_usage = float diff --git a/stubs/stubs/TcsmoltenSalt.pyi b/stubs/stubs/TcsmoltenSalt.pyi index f1c250c..c0cfe4c 100644 --- a/stubs/stubs/TcsmoltenSalt.pyi +++ b/stubs/stubs/TcsmoltenSalt.pyi @@ -50,6 +50,8 @@ class TcsmoltenSalt(object): F_wc = tuple + T_tank_cold_init = float + T_tank_hot_init = float ampl_data_dir = str ampl_exec_call = str aux_par = float @@ -79,20 +81,31 @@ class TcsmoltenSalt(object): disp_steps_per_hour = float disp_time_weighting = float disp_timeout = float - disp_wlim_maxspec = float - dispatch_series = tuple f_turb_tou_periods = tuple + is_PAR_HTR_allowed_in = tuple is_ampl_engine = float is_dispatch = float - is_dispatch_series = float + is_dispatch_targets = float + is_field_tracking_init = float is_parallel_htr = float + is_pc_sb_allowed_in = tuple + is_pc_su_allowed_in = tuple + is_rec_su_allowed_in = tuple is_tod_pc_target_also_pc_max = float - is_wlim_design = float - is_wlim_series = float is_write_ampl_dat = float pb_fixed_par = float + pc_op_mode_initial = float + pc_startup_energy_remain_initial = float + pc_startup_time_remain_init = float + q_dot_elec_to_PAR_HTR_in = tuple + q_pc_max_in = tuple + q_pc_target_on_in = tuple + q_pc_target_su_in = tuple q_rec_heattrace = float q_rec_standby = float + rec_op_mode_initial = float + rec_startup_energy_remain_init = float + rec_startup_time_remain_init = float sim_type = float time_start = float time_steps_per_hour = float @@ -101,7 +114,6 @@ class TcsmoltenSalt(object): vacuum_arrays = float weekday_schedule = tuple weekend_schedule = tuple - wlim_series = tuple class FinancialModel(object): @@ -732,6 +744,8 @@ class TcsmoltenSalt(object): csp_pt_cost_site_improvements = float csp_pt_cost_storage = float csp_pt_cost_tower = float + cycle_Tdb_table = tuple + cycle_eff_load_table = tuple cycle_htf_pump_power = tuple d_tank_tes = float defocus = tuple @@ -778,7 +792,9 @@ class TcsmoltenSalt(object): heliostat_area = float hot_hours_electricity_sales = float hot_hours_revenue_fraction = float + hot_tank_htf_percent_final = tuple is_PAR_HTR_allowed = tuple + is_field_tracking_final = tuple is_pc_sb_allowed = tuple is_pc_su_allowed = tuple is_rec_su_allowed = tuple @@ -820,6 +836,9 @@ class TcsmoltenSalt(object): operating_modes_a = tuple operating_modes_b = tuple operating_modes_c = tuple + pc_op_mode_final = tuple + pc_startup_energy_remain_final = tuple + pc_startup_time_remain_final = tuple pparasi = tuple pricing_mult = tuple q_balance = tuple @@ -854,6 +873,9 @@ class TcsmoltenSalt(object): radcool_control = tuple rec_defocus = tuple rec_height_calc = float + rec_op_mode_final = tuple + rec_startup_energy_remain_final = tuple + rec_startup_time_remain_final = tuple refl_image_error = float rh = tuple sales_energy_capacity_factor = float diff --git a/stubs/stubs/TroughPhysical.pyi b/stubs/stubs/TroughPhysical.pyi index eafad43..3a46d99 100644 --- a/stubs/stubs/TroughPhysical.pyi +++ b/stubs/stubs/TroughPhysical.pyi @@ -34,10 +34,31 @@ class TroughPhysical(object): pass + T_in_loop_initial = float + T_out_loop_initial = float + T_out_scas_initial = tuple + T_tank_cold_init = float + T_tank_hot_init = float + defocus_initial = float disp_csu_cost = float disp_inventory_incentive = float disp_rsu_cost = float + is_dispatch_targets = float + is_pc_sb_allowed_in = tuple + is_pc_su_allowed_in = tuple + is_rec_su_allowed_in = tuple + pc_op_mode_initial = float + pc_startup_energy_remain_initial = float + pc_startup_time_remain_init = float + q_pc_max_in = tuple + q_pc_target_on_in = tuple + q_pc_target_su_in = tuple + rec_op_mode_initial = float sim_type = float + time_start = float + time_steps_per_hour = float + time_stop = float + vacuum_arrays = float class Weather(object): @@ -143,6 +164,8 @@ class TroughPhysical(object): epsilon_3_43 = tuple epsilon_3_44 = tuple eta_pump = float + f_htfmax = float + f_htfmin = float field_fl_props = tuple include_fixed_power_block_runner = float m_dot_htfmax = float @@ -167,6 +190,7 @@ class TroughPhysical(object): theta_dep = float theta_stow = float tilt = float + use_abs_or_rel_mdot_limit = float wind_stow_speed = float @@ -266,11 +290,9 @@ class TroughPhysical(object): dispatch_factors_ts = tuple dispatch_sched_weekday = tuple dispatch_sched_weekend = tuple - dispatch_series = tuple f_turb_tou_periods = tuple is_ampl_engine = float is_dispatch = float - is_dispatch_series = float is_tod_pc_target_also_pc_max = float is_write_ampl_dat = float ppa_multiplier_model = float @@ -387,7 +409,6 @@ class TroughPhysical(object): V_tes_des = float custom_tes_p_loss = float custom_tes_pipe_sizes = float - disp_wlim_maxspec = float has_hot_tank_bypass = float k_tes_loss_coeffs = tuple non_solar_field_land_area_multiplier = float @@ -416,20 +437,6 @@ class TroughPhysical(object): piping_loss = float - class SolarResourceData(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - lat = float - - class CapitalCosts(object): def assign(self): pass @@ -522,6 +529,9 @@ class TroughPhysical(object): SCAs_def = tuple T_field_cold_in = tuple T_field_hot_out = tuple + T_in_loop_final = tuple + T_out_loop_final = tuple + T_out_scas_last_final = tuple T_pc_in = tuple T_pc_out = tuple T_rec_cold_in = tuple @@ -532,6 +542,7 @@ class TroughPhysical(object): Type_cpnt = tuple V_tank_hot_ini = float W_dot_field_pump = tuple + W_dot_pump_SS = float W_dot_sca_track = tuple annual_W_cycle_gross = float annual_energy = float @@ -573,8 +584,12 @@ class TroughPhysical(object): csp_dtr_sca_calc_zenith = float csp_pt_tes_htf_density = float csp_pt_tes_tank_diameter = float + cycle_Tdb_table = tuple + cycle_eff_load_table = tuple cycle_htf_pump_power = tuple + dP_sf_SS = float defocus = tuple + defocus_final = tuple deltaP_field = tuple direct_subtotal = float disp_obj_relax = tuple @@ -594,12 +609,13 @@ class TroughPhysical(object): disp_subopt_flag = tuple disp_tes_expected = tuple disp_thermeff_expected = tuple - disp_wlim_max = float disp_wpb_expected = tuple dni_costh = tuple e_ch_tes = tuple e_dot_field_int_energy = tuple eta = tuple + f_htfmax_actual = float + f_htfmin_actual = float field_htf_cp_avg_des = float field_htf_max_temp = float field_htf_min_temp = float @@ -607,12 +623,12 @@ class TroughPhysical(object): field_thermal_output_ideal = float fixed_land_area = float gen = tuple + hot_tank_htf_percent_final = tuple hour_day = tuple is_hx = float is_pc_sb_allowed = tuple is_pc_su_allowed = tuple is_rec_su_allowed = tuple - is_wlim_series = float kwh_per_kw = float loop_optical_efficiency = float m_dot_balance = tuple @@ -623,6 +639,8 @@ class TroughPhysical(object): m_dot_field_recirc = tuple m_dot_field_to_cycle = tuple m_dot_htf_cycle_des = float + m_dot_htfmax_actual = float + m_dot_htfmin_actual = float m_dot_loop = tuple m_dot_pc = tuple m_dot_pc_to_tes_cold = tuple @@ -632,8 +650,10 @@ class TroughPhysical(object): mass_tes_cold = tuple mass_tes_hot = tuple max_field_flow_velocity = float + max_loop_flow_vel_des = float min_field_flow_velocity = float min_inner_diameter = float + min_loop_flow_vel_des = float month = tuple monthly_energy = tuple nLoops = float @@ -646,6 +666,9 @@ class TroughPhysical(object): operating_modes_a = tuple operating_modes_b = tuple operating_modes_c = tuple + pc_op_mode_final = tuple + pc_startup_energy_remain_final = tuple + pc_startup_time_remain_final = tuple pipe_header_P_dsn = tuple pipe_header_T_dsn = tuple pipe_header_diams = tuple @@ -699,6 +722,7 @@ class TroughPhysical(object): q_tes = float q_tes_heater = tuple qinc_costh = tuple + rec_op_mode_final = tuple recirculating = tuple required_number_of_loops_for_SM1 = float rh = tuple @@ -726,9 +750,10 @@ class TroughPhysical(object): total_tracking_power = float tou_value = tuple twet = tuple + vel_loop_max = tuple + vel_loop_min = tuple vol_min = float vol_tank = float - wlim_series = tuple wspd = tuple diff --git a/stubs/stubs/TroughPhysicalCspSolver.pyi b/stubs/stubs/TroughPhysicalCspSolver.pyi deleted file mode 100644 index 553fc88..0000000 --- a/stubs/stubs/TroughPhysicalCspSolver.pyi +++ /dev/null @@ -1,455 +0,0 @@ -class TroughPhysicalCspSolver(object): - def assign(self, dict): - pass - - def value(self, name, value=None): - pass - - def unassign(self, name): - pass - - def execute(self, int_verbosity): - pass - - def export(self): - pass - - def get_data_ptr(self): - pass - - def __getattribute__(self, *args, **kwargs): - pass - - def __init__(self, *args, **kwargs): - pass - - class Weather(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - azimuth = float - file_name = str - tilt = float - track_mode = float - - - class Trough(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - system_capacity = float - - - class TimeOfDelivery(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - dispatch_factors_ts = tuple - ppa_multiplier_model = float - - - class SolarField(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - A_aperture = tuple - AbsorberMaterial = tuple - AnnulusGas = tuple - Ave_Focal_Length = tuple - ColperSCA = tuple - D_2 = tuple - D_3 = tuple - D_4 = tuple - D_5 = tuple - D_p = tuple - Design_loss = tuple - Dirt_HCE = tuple - Dirt_mirror = tuple - Distance_SCA = tuple - EPSILON_4 = tuple - EPSILON_5 = tuple - Error = tuple - FieldConfig = float - Flow_type = tuple - Fluid = float - GeomEffects = tuple - GlazingIntactIn = tuple - HCE_FieldFrac = tuple - HDR_rough = float - IAM_matrix = tuple - I_bn_des = float - L_SCA = tuple - L_aperture = tuple - P_a = tuple - P_ref = float - Pipe_hl_coef = float - Rho_mirror_clean = tuple - Rough = tuple - Row_Distance = float - SCADefocusArray = tuple - SCAInfoArray = tuple - SCA_drives_elec = float - Shadowing = tuple - T_fp = float - T_loop_in_des = float - T_loop_out = float - T_startup = float - Tau_envelope = tuple - TrackingError = tuple - V_hdr_max = float - V_hdr_min = float - W_aperture = tuple - accept_init = float - accept_loc = float - accept_mode = float - alpha_abs = tuple - alpha_env = tuple - epsilon_3_11 = tuple - epsilon_3_12 = tuple - epsilon_3_13 = tuple - epsilon_3_14 = tuple - epsilon_3_21 = tuple - epsilon_3_22 = tuple - epsilon_3_23 = tuple - epsilon_3_24 = tuple - epsilon_3_31 = tuple - epsilon_3_32 = tuple - epsilon_3_33 = tuple - epsilon_3_34 = tuple - epsilon_3_41 = tuple - epsilon_3_42 = tuple - epsilon_3_43 = tuple - epsilon_3_44 = tuple - eta_pump = float - fthrctrl = float - fthrok = float - m_dot_htfmax = float - m_dot_htfmin = float - mc_bal_cold = float - mc_bal_hot = float - mc_bal_sca = float - nColt = float - nHCEVar = float - nHCEt = float - nLoops = float - nSCA = float - solar_mult = float - theta_dep = float - theta_stow = float - washing_frequency = float - water_usage_per_wash = float - - - class Controller(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - T_set_aux = float - T_tank_cold_ini = float - V_tank_hot_ini = float - W_pb_design = float - aux_array = tuple - bop_array = tuple - cold_tank_Thtr = float - cycle_cutoff_frac = float - cycle_max_frac = float - dt_cold = float - dt_hot = float - f_tc_cold = float - ffrac = tuple - field_fl_props = tuple - fossil_mode = float - h_tank = float - h_tank_min = float - hot_tank_Thtr = float - hx_config = float - is_hx = float - nodes = float - pb_fixed_par = float - pb_pump_coef = float - q_max_aux = float - q_pb_design = float - q_sby_frac = float - sf_type = float - store_fl_props = tuple - store_fluid = float - t_ch_out_max = float - t_dis_out_min = float - t_standby_reset = float - tank_max_heat = float - tank_pairs = float - tc_fill = float - tc_void = float - tes_pump_coef = float - tes_type = float - tshours = float - tslogic_a = tuple - tslogic_b = tuple - tslogic_c = tuple - u_tank = float - vol_tank = float - - - class TouTranslator(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - weekday_schedule = tuple - weekend_schedule = tuple - - - class Powerblock(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - CT = float - F_wc = tuple - P_cond_min = float - P_cond_ratio = float - T_ITD_des = float - T_amb_des = float - T_approach = float - dT_cw_ref = float - eta_ref = float - n_pl_inc = float - pb_bd_frac = float - pc_config = float - q_sby_frac = float - startup_frac = float - startup_time = float - tech_type = float - - - class UserDefinedPC(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - ud_T_amb_des = float - ud_T_amb_high = float - ud_T_amb_ind_od = tuple - ud_T_amb_low = float - ud_T_htf_high = float - ud_T_htf_ind_od = tuple - ud_T_htf_low = float - ud_f_W_dot_cool_des = float - ud_ind_od = tuple - ud_m_dot_htf_high = float - ud_m_dot_htf_ind_od = tuple - ud_m_dot_htf_low = float - ud_m_dot_water_cool_des = float - - - class Enet(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - eta_lhv = float - eta_tes_htr = float - - - class AdjustmentFactors(object): - def assign(self): - pass - - def export(self): - return {} - - def __init__(self, *args, **kwargs): # real signature unknown - pass - - constant = float - en_hourly = float - en_periods = float - en_timeindex = float - hourly = tuple - periods = tuple - imeindex = tuple - dc_constant = float - dc_en_hourly = float - dc_en_periods = float - dc_en_timeindex = float - dc_hourly = tuple - dc_periods = tuple - dc_imeindex = tuple - sf_constant = float - sf_en_hourly = float - sf_en_periods = float - sf_en_timeindex = float - sf_hourly = tuple - sf_periods = tuple - sf_timeindex = tuple - - class Outputs(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - P_cooling_tower_tot = tuple - P_fixed = tuple - P_out_net = tuple - P_plant_balance_tot = tuple - P_tower_pump = tuple - Q_thermal = tuple - T_tes_cold = tuple - T_tes_hot = tuple - annual_W_cycle_gross = float - annual_energy = float - annual_energy_distribution_time = tuple - annual_total_water_use = float - beam = tuple - capacity_factor = float - conversion_factor = float - defocus = tuple - disp_iter_ann = float - disp_obj_relax = tuple - disp_objective = tuple - disp_objective_ann = float - disp_pceff_expected = tuple - disp_presolve_nconstr = tuple - disp_presolve_nconstr_ann = float - disp_presolve_nvar = tuple - disp_presolve_nvar_ann = float - disp_qpbsu_expected = tuple - disp_qsf_expected = tuple - disp_qsfprod_expected = tuple - disp_qsfsu_expected = tuple - disp_rel_mip_gap = tuple - disp_rev_expected = tuple - disp_solve_iter = tuple - disp_solve_state = tuple - disp_solve_time = tuple - disp_solve_time_ann = float - disp_subopt_flag = tuple - disp_tes_expected = tuple - disp_thermeff_expected = tuple - disp_wpb_expected = tuple - e_ch_tes = tuple - eta_map_out = tuple - flux_maps_out = tuple - gen = tuple - htf_pump_power = tuple - is_pc_sb_allowed = tuple - is_pc_su_allowed = tuple - is_rec_su_allowed = tuple - kwh_per_kw = float - m_dot_balance = tuple - m_dot_pc = tuple - m_dot_rec = tuple - m_dot_tes_ch = tuple - m_dot_tes_dc = tuple - n_op_modes = tuple - op_mode_1 = tuple - op_mode_2 = tuple - op_mode_3 = tuple - operating_modes_a = tuple - operating_modes_b = tuple - operating_modes_c = tuple - pparasi = tuple - pricing_mult = tuple - q_balance = tuple - q_ch_tes = tuple - q_dc_tes = tuple - q_dot_est_cr_on = tuple - q_dot_est_cr_su = tuple - q_dot_est_tes_ch = tuple - q_dot_est_tes_dc = tuple - q_dot_pc_max = tuple - q_dot_pc_min = tuple - q_dot_pc_sb = tuple - q_dot_pc_startup = tuple - q_dot_pc_target = tuple - q_heater = tuple - q_pb = tuple - q_pc_startup = tuple - solzen = tuple - tank_losses = tuple - time_hr = tuple - tou_value = tuple - - - - -def default(config) -> TroughPhysicalCspSolver: - pass - -def new() -> TroughPhysicalCspSolver: - pass - -def wrap(ssc_data_t) -> TroughPhysicalCspSolver: - pass - -def from_existing(model, config="") -> TroughPhysicalCspSolver: - pass - -__loader__ = None - -__spec__ = None diff --git a/stubs/stubs/TroughPhysicalIph.pyi b/stubs/stubs/TroughPhysicalIph.pyi index c6e02a1..7bf63cb 100644 --- a/stubs/stubs/TroughPhysicalIph.pyi +++ b/stubs/stubs/TroughPhysicalIph.pyi @@ -155,6 +155,8 @@ class TroughPhysicalIph(object): epsilon_3_43 = tuple epsilon_3_44 = tuple eta_pump = float + f_htfmax = float + f_htfmin = float field_fl_props = tuple m_dot_htfmax = float m_dot_htfmin = float @@ -178,6 +180,7 @@ class TroughPhysicalIph(object): theta_dep = float theta_stow = float tilt = float + use_abs_or_rel_mdot_limit = float wind_stow_speed = float @@ -239,10 +242,8 @@ class TroughPhysicalIph(object): dispatch_factors_ts = tuple dispatch_sched_weekday = tuple dispatch_sched_weekend = tuple - dispatch_series = tuple f_turb_tou_periods = tuple is_ampl_engine = float - is_dispatch_series = float is_timestep_load_fractions = float is_tod_pc_target_also_pc_max = float is_write_ampl_dat = float @@ -401,20 +402,6 @@ class TroughPhysicalIph(object): piping_loss = float - class SolarResourceData(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - lat = float - - class CapitalCosts(object): def assign(self): pass @@ -549,6 +536,7 @@ class TroughPhysicalIph(object): W_dot_par_tot_haf = tuple W_dot_parasitic_tot = tuple W_dot_pc_pump = tuple + W_dot_pump_SS = float W_dot_sca_track = tuple annual_electricity_consumption = float annual_energy = float @@ -608,12 +596,15 @@ class TroughPhysicalIph(object): csp_dtr_sca_calc_zenith = float csp_pt_tes_htf_density = float csp_pt_tes_tank_diameter = float + dP_sf_SS = float defocus = tuple deltaP_field = tuple direct_subtotal = float dni_costh = tuple e_ch_tes = tuple e_dot_field_int_energy = tuple + f_htfmax_actual = float + f_htfmin_actual = float field_htf_cp_avg_des = float field_htf_max_temp = float field_htf_min_temp = float @@ -636,6 +627,8 @@ class TroughPhysicalIph(object): m_dot_field_recirc = tuple m_dot_field_to_cycle = tuple m_dot_htf_heat_sink = tuple + m_dot_htfmax_actual = float + m_dot_htfmin_actual = float m_dot_loop = tuple m_dot_pc_to_tes_cold = tuple m_dot_tes_cold_out = tuple @@ -643,8 +636,10 @@ class TroughPhysicalIph(object): mass_tes_cold = tuple mass_tes_hot = tuple max_field_flow_velocity = float + max_loop_flow_vel_des = float min_field_flow_velocity = float min_inner_diameter = float + min_loop_flow_vel_des = float month = tuple monthly_energy = tuple nLoops = float @@ -734,6 +729,8 @@ class TroughPhysicalIph(object): total_tracking_power = float tou_value = tuple twet = tuple + vel_loop_max = tuple + vel_loop_min = tuple vol_min = float vol_tank = float wspd = tuple diff --git a/stubs/stubs/TroughPhysicalProcessHeat.pyi b/stubs/stubs/TroughPhysicalProcessHeat.pyi deleted file mode 100644 index c5f29d8..0000000 --- a/stubs/stubs/TroughPhysicalProcessHeat.pyi +++ /dev/null @@ -1,472 +0,0 @@ -class TroughPhysicalProcessHeat(object): - def assign(self, dict): - pass - - def value(self, name, value=None): - pass - - def unassign(self, name): - pass - - def execute(self, int_verbosity): - pass - - def export(self): - pass - - def get_data_ptr(self): - pass - - def __getattribute__(self, *args, **kwargs): - pass - - def __init__(self, *args, **kwargs): - pass - - class Weather(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - azimuth = float - file_name = str - solar_resource_data = dict - tilt = float - track_mode = float - - - class SolarField(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - A_aperture = tuple - AbsorberMaterial = tuple - AnnulusGas = tuple - Ave_Focal_Length = tuple - ColperSCA = tuple - D_2 = tuple - D_3 = tuple - D_4 = tuple - D_5 = tuple - D_cpnt = tuple - D_p = tuple - Design_loss = tuple - Dirt_HCE = tuple - Dirt_mirror = tuple - Distance_SCA = tuple - EPSILON_4 = tuple - EPSILON_5 = tuple - Error = tuple - FieldConfig = float - Flow_type = tuple - Fluid = float - GeomEffects = tuple - GlazingIntactIn = tuple - HCE_FieldFrac = tuple - HDR_rough = float - IAM_matrix = tuple - I_bn_des = float - K_cpnt = tuple - L_SCA = tuple - L_aperture = tuple - L_cpnt = tuple - L_heat_sink_piping = float - L_rnr_per_xpan = float - L_xpan_hdr = float - L_xpan_rnr = float - Min_rnr_xpans = float - N_hdr_per_xpan = float - N_max_hdr_diams = float - P_a = tuple - Pipe_hl_coef = float - Rho_mirror_clean = tuple - Rough = tuple - Row_Distance = float - SCA_drives_elec = float - Shadowing = tuple - T_fp = float - T_loop_in_des = float - T_loop_out = float - Tau_envelope = tuple - TrackingError = tuple - Type_cpnt = tuple - V_hdr_cold_max = float - V_hdr_cold_min = float - V_hdr_hot_max = float - V_hdr_hot_min = float - W_aperture = tuple - accept_init = float - accept_loc = float - accept_mode = float - alpha_abs = tuple - alpha_env = tuple - calc_design_pipe_vals = float - custom_sf_pipe_sizes = float - epsilon_3_11 = tuple - epsilon_3_12 = tuple - epsilon_3_13 = tuple - epsilon_3_14 = tuple - epsilon_3_21 = tuple - epsilon_3_22 = tuple - epsilon_3_23 = tuple - epsilon_3_24 = tuple - epsilon_3_31 = tuple - epsilon_3_32 = tuple - epsilon_3_33 = tuple - epsilon_3_34 = tuple - epsilon_3_41 = tuple - epsilon_3_42 = tuple - epsilon_3_43 = tuple - epsilon_3_44 = tuple - eta_pump = float - is_model_heat_sink_piping = float - m_dot_htfmax = float - m_dot_htfmin = float - mc_bal_cold = float - mc_bal_hot = float - mc_bal_sca = float - nColt = float - nHCEVar = float - nHCEt = float - nLoops = float - nSCA = float - northsouth_field_sep = float - offset_xpan_hdr = float - sf_hdr_diams = tuple - sf_hdr_lengths = tuple - sf_hdr_wallthicks = tuple - sf_rnr_diams = tuple - sf_rnr_lengths = tuple - sf_rnr_wallthicks = tuple - theta_dep = float - theta_stow = float - washing_frequency = float - water_usage_per_wash = float - wind_stow_speed = float - - - class Controller(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - disp_wlim_maxspec = float - field_fl_props = tuple - non_solar_field_land_area_multiplier = float - pb_pump_coef = float - q_pb_design = float - specified_solar_multiple = float - tanks_in_parallel = float - trough_loop_control = tuple - - - class SystemDesign(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - tshours = float - - - class TES(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - cold_tank_Thtr = float - cold_tank_max_heat = float - h_tank = float - init_hot_htf_percent = float - tank_pairs = float - u_tank = float - - - class TES2tank(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - h_tank_min = float - hot_tank_Thtr = float - hot_tank_max_heat = float - - - class Tou(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - ampl_data_dir = str - ampl_exec_call = str - disp_csu_cost_rel = float - disp_frequency = float - disp_horizon = float - disp_max_iter = float - disp_mip_gap = float - disp_pen_ramping = float - disp_reporting = float - disp_rsu_cost_rel = float - disp_spec_bb = float - disp_spec_presolve = float - disp_spec_scaling = float - disp_steps_per_hour = float - disp_time_weighting = float - disp_timeout = float - dispatch_factors_ts = tuple - dispatch_sched_weekday = tuple - dispatch_sched_weekend = tuple - dispatch_series = tuple - f_turb_tou_periods = tuple - is_ampl_engine = float - is_dispatch = float - is_dispatch_series = float - is_tod_pc_target_also_pc_max = float - is_wlim_series = float - is_write_ampl_dat = float - ppa_multiplier_model = float - q_rec_heattrace = float - q_rec_standby = float - timestep_load_fractions = tuple - weekday_schedule = tuple - weekend_schedule = tuple - wlim_series = tuple - - - class SystemControl(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - disp_inventory_incentive = float - - - class TimeOfDeliveryFactors(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - dispatch_tod_factors = tuple - - - class System(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - aux_array = tuple - bop_array = tuple - pb_fixed_par = float - - - class Powerblock(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - L_rnr_pb = float - - - class AdjustmentFactors(object): - def assign(self): - pass - - def export(self): - return {} - - def __init__(self, *args, **kwargs): # real signature unknown - pass - - constant = float - en_hourly = float - en_periods = float - en_timeindex = float - hourly = tuple - periods = tuple - imeindex = tuple - dc_constant = float - dc_en_hourly = float - dc_en_periods = float - dc_en_timeindex = float - dc_hourly = tuple - dc_periods = tuple - dc_imeindex = tuple - sf_constant = float - sf_en_hourly = float - sf_en_periods = float - sf_en_timeindex = float - sf_hourly = tuple - sf_periods = tuple - sf_timeindex = tuple - - class Outputs(object): - def assign(self): - pass - - def export(self) -> dict: - pass - - def __init__(self, *args, **kwargs): - pass - - - CosTh_ave = tuple - EndLoss_ave = tuple - EqOpteff = tuple - IAM_ave = tuple - RowShadow_ave = tuple - SCAs_def = tuple - T_field_cold_in = tuple - T_field_hot_out = tuple - T_heat_sink_in = tuple - T_heat_sink_out = tuple - T_rec_cold_in = tuple - T_rec_hot_out = tuple - T_tes_cold = tuple - T_tes_hot = tuple - Theta_ave = tuple - W_dot_field_pump = tuple - W_dot_parasitic_tot = tuple - W_dot_pc_pump = tuple - W_dot_sca_track = tuple - annual_electricity_consumption = float - annual_energy = float - annual_energy_distribution_time = tuple - annual_field_freeze_protection = float - annual_gross_energy = float - annual_tes_freeze_protection = float - annual_thermal_consumption = float - annual_total_water_use = float - beam = tuple - capacity_factor = float - deltaP_field = tuple - dni_costh = tuple - e_ch_tes = tuple - e_dot_field_int_energy = tuple - gen = tuple - hour_day = tuple - kwh_per_kw = float - m_dot_balance = tuple - m_dot_cr_to_tes_hot = tuple - m_dot_cycle_to_field = tuple - m_dot_field_delivered = tuple - m_dot_field_recirc = tuple - m_dot_field_to_cycle = tuple - m_dot_htf_heat_sink = tuple - m_dot_loop = tuple - m_dot_pc_to_tes_cold = tuple - m_dot_tes_cold_out = tuple - m_dot_tes_hot_out = tuple - mass_tes_cold = tuple - mass_tes_hot = tuple - month = tuple - op_mode_1 = tuple - op_mode_2 = tuple - op_mode_3 = tuple - pres = tuple - q_balance = tuple - q_ch_tes = tuple - q_dc_tes = tuple - q_dot_freeze_prot = tuple - q_dot_htf_sf_out = tuple - q_dot_piping_loss = tuple - q_dot_rec_abs = tuple - q_dot_rec_inc = tuple - q_dot_rec_thermal_loss = tuple - q_dot_to_heat_sink = tuple - q_inc_sf_tot = tuple - q_tes_heater = tuple - qinc_costh = tuple - solar_multiple_actual = float - solazi = tuple - solzen = tuple - tank_losses = tuple - tdry = tuple - time_hr = tuple - twet = tuple - wspd = tuple - - - - -def default(config) -> TroughPhysicalProcessHeat: - pass - -def new() -> TroughPhysicalProcessHeat: - pass - -def wrap(ssc_data_t) -> TroughPhysicalProcessHeat: - pass - -def from_existing(model, config="") -> TroughPhysicalProcessHeat: - pass - -__loader__ = None - -__spec__ = None diff --git a/tests/test_pysam_all.py b/tests/test_pysam_all.py index 0fd9fc4..43e7294 100644 --- a/tests/test_pysam_all.py +++ b/tests/test_pysam_all.py @@ -440,7 +440,6 @@ def test_run_all(): "LinearFresnelDsgIph", "MhkTidal", "MhkWave", "MsptIph", "Pvsamv1", "Pvwattsv8", "Pvwattsv7", "Pvwattsv5", "TcsmoltenSalt", "Hcpv", "Swh", "GenericSystem", "Grid", - "TroughPhysicalProcessHeat", "TcsMSLF", "TcsgenericSolar", "TcslinearFresnel", "TcstroughEmpirical", "TroughPhysical", "TroughPhysicalIph", "Windpower") for mod in techs: