Completed
Push — dev ( 68ddc7...49e927 )
by Patrik
58s queued 48s
created

test_generic_caes.test_gen_caes()   B

Complexity

Conditions 2

Size

Total Lines 113
Code Lines 79

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 79
dl 0
loc 113
rs 7.6872
c 0
b 0
f 0
cc 2
nop 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
# -*- coding: utf-8 -*-
2
"""
3
Example that illustrates how to use component `GenericCHP` can be used.
4
5
In this case it is used to model a combined cycle extraction turbine.
6
7
This file is part of project oemof (github.com/oemof/oemof). It's copyrighted
8
by the contributors recorded in the version control history of the file,
9
available from its original location
10
oemof/tests/test_scripts/test_solph/test_generic_caes/test_generic_caes.py
11
12
SPDX-License-Identifier: MIT
13
"""
14
15
import os
16
17
import pandas as pd
18
import pytest
19
20
from oemof.solph import EnergySystem
21
from oemof.solph import Model
22
from oemof.solph import processing
23
from oemof.solph import views
24
from oemof.solph.buses import Bus
25
from oemof.solph.components import Sink
26
from oemof.solph.components import Source
27
from oemof.solph.components.experimental import GenericCAES
28
from oemof.solph.flows import Flow
29
30
31
def test_gen_caes():
32
    # read sequence data
33
    full_filename = os.path.join(os.path.dirname(__file__), "generic_caes.csv")
34
    data = pd.read_csv(full_filename)
35
36
    # select periods
37
    periods = len(data)
38
39
    # create an energy system
40
    idx = pd.date_range("1/1/2017", periods=periods, freq="h")
41
    es = EnergySystem(timeindex=idx, infer_last_interval=True)
42
43
    # resources
44
    bgas = Bus(label="bgas")
45
    es.add(bgas)
46
47
    es.add(Source(label="rgas", outputs={bgas: Flow(variable_costs=20)}))
48
49
    # power
50
    bel_source = Bus(label="bel_source")
51
    es.add(bel_source)
52
    es.add(
53
        Source(
54
            label="source_el",
55
            outputs={bel_source: Flow(variable_costs=data["price_el_source"])},
56
        )
57
    )
58
59
    bel_sink = Bus(label="bel_sink")
60
    es.add(bel_sink)
61
    es.add(
62
        Sink(
63
            label="sink_el",
64
            inputs={bel_sink: Flow(variable_costs=data["price_el_sink"])},
65
        )
66
    )
67
68
    # dictionary with parameters for a specific CAES plant
69
    # based on thermal modelling and linearization techniques
70
    concept = {
71
        "cav_e_in_b": 0,
72
        "cav_e_in_m": 0.6457267578,
73
        "cav_e_out_b": 0,
74
        "cav_e_out_m": 0.3739636077,
75
        "cav_eta_temp": 1.0,
76
        "cav_level_max": 211.11,
77
        "cmp_p_max_b": 86.0918959849,
78
        "cmp_p_max_m": 0.0679999932,
79
        "cmp_p_min": 1,
80
        "cmp_q_out_b": -19.3996965679,
81
        "cmp_q_out_m": 1.1066036114,
82
        "cmp_q_tes_share": 0,
83
        "exp_p_max_b": 46.1294016678,
84
        "exp_p_max_m": 0.2528340303,
85
        "exp_p_min": 1,
86
        "exp_q_in_b": -2.2073411014,
87
        "exp_q_in_m": 1.129249765,
88
        "exp_q_tes_share": 0,
89
        "tes_eta_temp": 1.0,
90
        "tes_level_max": 0.0,
91
    }
92
93
    # generic compressed air energy storage (caes) plant
94
    es.add(
95
        GenericCAES(
96
            label="caes",
97
            electrical_input={bel_source: Flow()},
98
            fuel_input={bgas: Flow()},
99
            electrical_output={bel_sink: Flow()},
100
            params=concept,
101
        )
102
    )
103
104
    # create an optimization problem and solve it
105
    om = Model(es)
106
107
    # solve model
108
    om.solve(solver="cbc")
109
110
    # create result object
111
    results = processing.results(om)
112
113
    data = (
114
        views.node(results, "caes", keep_none_type=True)["sequences"]
115
        .sum(axis=0)
116
        .to_dict()
117
    )
118
119
    test_dict = {
120
        (("caes", None), "cav_level"): 25658.82964382,
121
        (("caes", None), "exp_p"): 5020.801997000007,
122
        (("caes", None), "exp_q_fuel_in"): 5170.880360999999,
123
        (("caes", None), "tes_e_out"): 0.0,
124
        (("caes", None), "exp_st"): 226.0,
125
        (("bgas", "caes"), "flow"): 5170.880360999999,
126
        (("caes", None), "cav_e_out"): 1877.5972265299995,
127
        (("caes", None), "exp_p_max"): 17512.352336,
128
        (("caes", None), "cmp_q_waste"): 2499.9125993000007,
129
        (("caes", None), "cmp_p"): 2907.7271520000004,
130
        (("caes", None), "exp_q_add_in"): 0.0,
131
        (("caes", None), "cmp_st"): 37.0,
132
        (("caes", None), "cmp_q_out_sum"): 2499.9125993000007,
133
        (("caes", None), "tes_level"): 0.0,
134
        (("caes", None), "tes_e_in"): 0.0,
135
        (("caes", None), "exp_q_in_sum"): 5170.880360999999,
136
        (("caes", None), "cmp_p_max"): 22320.76334300001,
137
        (("caes", "bel_sink"), "flow"): 5020.801997000007,
138
        (("bel_source", "caes"), "flow"): 2907.7271520000004,
139
        (("caes", None), "cav_e_in"): 1877.597226,
140
    }
141
142
    for key in test_dict.keys():
143
        assert data[key] == pytest.approx(test_dict[key])
144