diff --git a/topfarm/cost_models/fuga/Colonel b/topfarm/cost_models/fuga/Colonel index 4910e86f1297f55d40f57a62be8f0f287b6e55e7..c1ac1ebd438d6a923ed7cb03d93a7ca784319225 160000 --- a/topfarm/cost_models/fuga/Colonel +++ b/topfarm/cost_models/fuga/Colonel @@ -1 +1 @@ -Subproject commit 4910e86f1297f55d40f57a62be8f0f287b6e55e7 +Subproject commit c1ac1ebd438d6a923ed7cb03d93a7ca784319225 diff --git a/topfarm/cost_models/fuga/lib_reader.py b/topfarm/cost_models/fuga/lib_reader.py deleted file mode 100644 index e375d30d222d95571867f57ebc7adef36f3a72b0..0000000000000000000000000000000000000000 --- a/topfarm/cost_models/fuga/lib_reader.py +++ /dev/null @@ -1,52 +0,0 @@ -''' -Created on 25. apr. 2018 - -@author: mmpe -''' -import os -import numpy as np -from topfarm.tests.test_files import tfp - - -def read_lib(filename): - with open(filename) as fid: - lines = fid.readlines() - - descriptor = lines[0] - nRoughnessClasses, nHeights, nSectorslib = map(int, lines[2].split()) - z0ref_lst = list(map(float, lines[4].split())) - - # TODO: Implement for specified z0 and height - -# -# -# for i:=0 to nRoughnessClasses-1 do read(fil,z0reflib[i]); -# readln(fil); -# for i:=0 to nHeights-1 do read(fil,zreflib[i]); -# readln(fil); -# for k:=0 to nRoughnessClasses-1 do -# begin -# for i:=0 to nSectorslib-1 do -# begin -# read(fil,freq[k,i]); -# freq[k,i]:=freq[k,i]/100; -# end; -# readln(fil); -# for i:=0 to nHeights-1 do -# begin -# for j:=0 to nSectorslib-1 do read(fil,WAlib[k,i,j]); -# readln(fil); -# for j:=0 to nSectorslib-1 do read(fil,Wklib[k,i,j]); -# readln(fil); -# end; -# end; - f, A, k = [np.array(lines[i].split()[:nSectorslib], dtype=np.float) for i in [8, 10, 12]] - return f / 100, A, k - - -def try_me(): - if __name__ == '__main__': - print(read_lib(tfp + "fuga_files/hornsrev2.lib")) - - -try_me() \ No newline at end of file diff --git a/topfarm/cost_models/fuga/pascal_dll.py b/topfarm/cost_models/fuga/pascal_dll.py deleted file mode 100644 index 16f0d0f346a84185e44851f0dc8251908557a04b..0000000000000000000000000000000000000000 --- a/topfarm/cost_models/fuga/pascal_dll.py +++ /dev/null @@ -1,24 +0,0 @@ -from ctypes import cdll, c_char_p, c_double - - -class PascalDLL(object): - def __init__(self, path): - self.lib = cdll.LoadLibrary(path) - - def __getattr__(self, name): - def func_wrap(*args): - func = getattr(self.lib, name) - func.restype = c_char_p - - def fmt(arg): - if isinstance(arg, str): - return arg.encode() - if isinstance(arg, float): - return c_double(arg) - return arg - - fmt_args = list(map(fmt, args)) - err = func(*fmt_args) - if err: - raise Exception("Exception from Fugalib: " + err.decode()) - return func_wrap diff --git a/topfarm/cost_models/fuga/py_fuga.py b/topfarm/cost_models/fuga/py_fuga.py index 450307c1a61a2beb1ee70674f384de5e339640a0..973b3f7e4add7a2e0e6f7e76ef28da2bddeb6c7f 100644 --- a/topfarm/cost_models/fuga/py_fuga.py +++ b/topfarm/cost_models/fuga/py_fuga.py @@ -1,133 +1,31 @@ -''' -Created on 23. mar. 2018 -@author: mmpe -''' -from _ctypes import POINTER -import atexit -from ctypes import c_double, c_int -import ctypes import os -from tempfile import NamedTemporaryFile - +import pytest import numpy as np from topfarm.cost_models.cost_model_wrappers import AEPCostModelComponent -from topfarm.cost_models.fuga.pascal_dll import PascalDLL - - -c_double_p = POINTER(c_double) -c_int_p = POINTER(ctypes.c_int32) +try: + from topfarm.cost_models.fuga.Colonel.py_colonel import PyColonel + from topfarm.cost_models.fuga.Colonel.py_colonel.py_colonel_exe import colonel_path + fuga_path = colonel_path +except ImportError: + PyColonel = object -fuga_path = os.path.abspath(os.path.dirname(__file__)) + '/Colonel/' -fugalib_path = os.path.dirname(__file__) + "/Colonel/FugaLib/FugaLib.%s" % ('so', 'dll')[os.name == 'nt'] - -class PyFuga(object): +class PyFuga(PyColonel): interface_version = 3 - def __init__(self): - atexit.register(self.cleanup) - with NamedTemporaryFile() as f: - self.stdout_filename = f.name + "pyfuga.txt" - - if os.path.isfile(fugalib_path) is False: - raise Exception("Fuga lib cannot be found: '%s'" % fugalib_path) - - self.lib = PascalDLL(fugalib_path) - self.lib.CheckInterfaceVersion(self.interface_version) - self.lib.Initialize(self.stdout_filename) - - def setup(self, farm_name='Horns Rev 1', - turbine_model_path='./LUT/', turbine_model_name='Vestas_V80_(2_MW_offshore)[h=67.00]', - tb_x=[423974, 424033], tb_y=[6151447, 6150889], - mast_position=(0, 0, 70), z0=0.0001, zi=400, zeta0=0, - farms_dir='./LUT/', wind_atlas_path='Horns Rev 1\hornsrev.lib', climate_interpolation=True): - self.lib.Setup(float(mast_position[0]), float(mast_position[1]), float(mast_position[2]), - float(z0), float(zi), float(zeta0)) - - assert len(tb_x) == len(tb_y) - tb_x_ctype, tb_y_ctype = self.tb_ctypes(tb_x, tb_y) - - self.lib.AddWindFarm(farm_name, turbine_model_path, turbine_model_name, - len(tb_x), tb_x_ctype.data_as(c_double_p), tb_y_ctype.data_as(c_double_p)) - - assert os.path.isfile(farms_dir + wind_atlas_path), farms_dir + wind_atlas_path - self.lib.SetupWindClimate(farms_dir, wind_atlas_path, climate_interpolation) - - assert len(tb_x) == self.get_no_turbines(), self.log + "\n%d!=%d" % (self.get_no_turbines(), len(tb_x)) - - def cleanup(self): - if hasattr(self, 'lib'): - try: - self.lib.Exit() # raises exception - except: - pass - del self.lib - tmp_folder = os.path.dirname(self.stdout_filename) - for f in os.listdir(tmp_folder): - if f.endswith('pyfuga.txt'): - try: - os.remove(os.path.join(tmp_folder, f)) - except Exception: - pass - - def get_no_turbines(self): - no_turbines_p = c_int_p(c_int(0)) - self.lib.GetNoTurbines(no_turbines_p) - return no_turbines_p.contents.value - - def tb_ctypes(self, tb_x, tb_y): - assert len(tb_x) == len(tb_y) - # remove mean offset to avoid loosing precision due to high offset - self.tb_x_offset, self.tb_y_offset = np.mean(tb_x), np.mean(tb_y) - tb_x = np.array(tb_x, dtype=np.float) - self.tb_x_offset - tb_y = np.array(tb_y, dtype=np.float) - self.tb_y_offset - return tb_x.ctypes, tb_y.ctypes - - def move_turbines(self, tb_x, tb_y): - assert len(tb_x) == len(tb_y) == self.get_no_turbines(), (len(tb_x), len(tb_y), self.get_no_turbines()) - tb_x_ctype, tb_y_ctype = self.tb_ctypes(tb_x, tb_y) - self.lib.MoveTurbines(tb_x_ctype.data_as(c_double_p), tb_y_ctype.data_as(c_double_p)) - - def get_aep(self, turbine_positions=None): - if turbine_positions is not None: - self.move_turbines(turbine_positions[:, 0], turbine_positions[:, 1]) - - AEPNet_p = c_double_p(c_double(0)) - AEPGros_p = c_double_p(c_double(0)) - capacity_p = c_double_p(c_double(0)) - self.lib.GetAEP(AEPNet_p, AEPGros_p, capacity_p) - net, gros, cap = [p.contents.value for p in [AEPNet_p, AEPGros_p, capacity_p]] - return (net, gros, cap, net / gros) - - def get_aep_gradients(self, turbine_positions=None): - if turbine_positions is not None: - self.move_turbines(turbine_positions[:, 0], turbine_positions[:, 1]) - - n_wt = self.get_no_turbines() - dAEPdxyz = np.zeros(n_wt), np.zeros(n_wt), np.zeros(n_wt) - dAEPdxyz_ctype = [dAEP.ctypes for dAEP in dAEPdxyz] - self.lib.GetAEPGradients(*[dAEP_ctype.data_as(c_double_p) for dAEP_ctype in dAEPdxyz_ctype]) - return np.array(dAEPdxyz) - def get_TopFarm_cost_component(self): n_wt = self.get_no_turbines() return AEPCostModelComponent(n_wt, lambda *args: self.get_aep(*args)[0], # only aep lambda *args: self.get_aep_gradients(*args)[:2]) # only dAEPdx and dAEPdy - @property - def log(self): - with open(self.stdout_filename) as fid: - return fid.read() - - def execute(self, script): - res = self.lib.ExecuteScript(script.encode()) - print("#" + str(res) + "#") - def try_me(): if __name__ == '__main__': + from topfarm.cost_models import fuga + if not os.path.isdir(os.path.dirname(fuga.__file__) + "/Colonel/py_colonel"): + pytest.xfail("Colonel submodule not found\n") pyFuga = PyFuga() pyFuga.setup(farm_name='Horns Rev 1', turbine_model_path=fuga_path + 'LUTs-T/', turbine_model_name='Vestas_V80_(2_MW_offshore)[h=70.00]', diff --git a/topfarm/cost_models/fuga/turbine_site_list_reader.py b/topfarm/cost_models/fuga/turbine_site_list_reader.py deleted file mode 100644 index 31b0c517f68a68e13df2de66f931d8ba747cf2d4..0000000000000000000000000000000000000000 --- a/topfarm/cost_models/fuga/turbine_site_list_reader.py +++ /dev/null @@ -1,23 +0,0 @@ -import numpy as np - - -def read_turbine_site_list(filename): - with open(filename) as fid: - lines = fid.readlines() - turbine_model_name = lines[0].strip() - data = np.array([l.replace(",", ".").split()[:4] for l in lines[1:] if l.strip() != ""]) - turbine_ids = data[:, 0] - turbine_positions = data[:, 1:].astype(np.float) - return turbine_model_name, turbine_ids, turbine_positions - - -def read_MR_turbine_site_list(filename): - with open(filename) as fid: - lines = fid.readlines() - farm_name = lines[0].strip() - nPairs = int(lines[1]) - - nacelle_models = ([(lines[2 + 2 * i].strip(), list(map(float, lines[2 + 2 * i + 1].split()))) for i in range(nPairs)]) - turbine_positions = np.array([l.replace(",", ".").split()[:4] for l in lines[2 + 2 * nPairs:] if l.strip() != ""]).astype(np.float) - return farm_name, nacelle_models, turbine_positions - diff --git a/topfarm/tests/test_files/fuga_files/4xV52SiteList.txt b/topfarm/tests/test_files/fuga_files/4xV52SiteList.txt deleted file mode 100644 index 5fcefec4b66ef3c7dae2ed54055d741033b8852b..0000000000000000000000000000000000000000 --- a/topfarm/tests/test_files/fuga_files/4xV52SiteList.txt +++ /dev/null @@ -1,54 +0,0 @@ -4xV52Farm -2 -V52-0.85MWLower[h=50.00] -50. 30 -V52-0.85MWUpper[h=108.00] -108. 30 --8879 2367 --8253 4048 --7730 5610 --8383 548 --6810 1800 --6230 3900 --6768 -395 --6000 5800 --4860 2500 --4740 600 --5153 -1319 --4030 5900 --3890 4200 --2990 -300 --2850 2100 --1932 -3215 --2050 6100 --1790 4200 --1320 600 --1140 -1500 --720 2600 --70 6000 -520 4100 -610 -600 -680 1200 -700 -4700 -902 -2700 -1750 2600 -1910 5800 -2009 459 -2440 -5600 -2830 -3600 -2900 4100 -3890 2400 -3970 -1400 -4130 -6700 -4710 -4900 -4870 600 -4970 -3200 -5850 -7700 -5860 -1100 -6490 -5800 -6850 -2800 -7820 -7900 -7840 -4500 -8830 -6200 -9800 -7900 --3553 -2250 \ No newline at end of file diff --git a/topfarm/tests/test_files/fuga_files/TurbineSiteList.txt b/topfarm/tests/test_files/fuga_files/TurbineSiteList.txt deleted file mode 100644 index 03f2e5aa61a74d10839b1519a76cbd2c508e937b..0000000000000000000000000000000000000000 --- a/topfarm/tests/test_files/fuga_files/TurbineSiteList.txt +++ /dev/null @@ -1,81 +0,0 @@ -Vestas_V80_(2_MW_offshore)[h=67.00] -1 423974 6151447 67,0 9,99 10,00 1341 100,5 Vestas V80 (2 MW offshore)(Tab #1) -2 424033 6150889 67,0 9,99 10,00 1341 100,5 Vestas V80 (2 MW offshore)(Tab #1) -3 424092 6150332 67,0 9,99 10,00 1341 100,5 Vestas V80 (2 MW offshore)(Tab #1) -4 424151 6149774 67,0 9,99 10,00 1341 100,5 Vestas V80 (2 MW offshore)(Tab #1) -5 424210 6149216 67,0 9,99 10,00 1341 100,5 Vestas V80 (2 MW offshore)(Tab #1) -6 424268 6148658 67,0 9,99 10,00 1341 100,5 Vestas V80 (2 MW offshore)(Tab #1) -7 424327 6148101 67,0 9,99 9,99 1334 100,0 Vestas V80 (2 MW offshore)(Tab #1) -8 424386 6147543 67,0 9,99 9,99 1334 100,0 Vestas V80 (2 MW offshore)(Tab #1) -11 424534 6151447 67,0 9,99 10,05 1354 101,5 Vestas V80 (2 MW offshore)(Tab #1) -12 424593 6150889 67,0 9,99 10,05 1360 102,0 Vestas V80 (2 MW offshore)(Tab #1) -13 424652 6150332 67,0 9,99 10,05 1360 102,0 Vestas V80 (2 MW offshore)(Tab #1) -14 424711 6149774 67,0 9,99 10,05 1360 102,0 Vestas V80 (2 MW offshore)(Tab #1) -15 424770 6149216 67,0 9,99 10,05 1360 102,0 Vestas V80 (2 MW offshore)(Tab #1) -16 424829 6148658 67,0 9,99 10,05 1354 101,5 Vestas V80 (2 MW offshore)(Tab #1) -17 424888 6148101 67,0 9,99 10,03 1347 101,0 Vestas V80 (2 MW offshore)(Tab #1) -18 424947 6147543 67,0 9,99 10,01 1341 100,5 Vestas V80 (2 MW offshore)(Tab #1) -21 425094 6151447 67,0 9,99 9,20 1065 79,8 Vestas V80 (2 MW offshore)(Tab #1) -22 425153 6150889 67,0 9,99 9,23 1079 80,9 Vestas V80 (2 MW offshore)(Tab #1) -23 425212 6150332 67,0 9,99 9,22 1072 80,3 Vestas V80 (2 MW offshore)(Tab #1) -24 425271 6149774 67,0 9,99 9,22 1072 80,3 Vestas V80 (2 MW offshore)(Tab #1) -25 425330 6149216 67,0 9,99 9,23 1072 80,3 Vestas V80 (2 MW offshore)(Tab #1) -26 425389 6148658 67,0 9,99 9,23 1072 80,3 Vestas V80 (2 MW offshore)(Tab #1) -27 425448 6148101 67,0 9,99 9,19 1058 79,3 Vestas V80 (2 MW offshore)(Tab #1) -28 425507 6147543 67,0 9,99 10,03 1347 101,0 Vestas V80 (2 MW offshore)(Tab #1) -31 425654 6151447 67,0 9,99 9,22 1072 80,3 Vestas V80 (2 MW offshore)(Tab #1) -32 425713 6150889 67,0 9,99 9,25 1079 80,9 Vestas V80 (2 MW offshore)(Tab #1) -33 425772 6150332 67,0 9,99 9,24 1079 80,9 Vestas V80 (2 MW offshore)(Tab #1) -34 425831 6149774 67,0 9,99 9,24 1079 80,9 Vestas V80 (2 MW offshore)(Tab #1) -35 425890 6149216 67,0 9,99 9,23 1072 80,3 Vestas V80 (2 MW offshore)(Tab #1) -36 425950 6148659 67,0 9,99 9,22 1072 80,3 Vestas V80 (2 MW offshore)(Tab #1) -37 426009 6148101 67,0 9,99 9,20 1065 79,8 Vestas V80 (2 MW offshore)(Tab #1) -38 426068 6147543 67,0 9,99 10,03 1354 101,5 Vestas V80 (2 MW offshore)(Tab #1) -41 426214 6151447 67,0 9,99 9,10 1031 77,2 Vestas V80 (2 MW offshore)(Tab #1) -42 426273 6150889 67,0 9,99 9,13 1037 77,8 Vestas V80 (2 MW offshore)(Tab #1) -43 426332 6150332 67,0 9,99 9,11 1037 77,8 Vestas V80 (2 MW offshore)(Tab #1) -44 426392 6149774 67,0 9,99 9,12 1037 77,8 Vestas V80 (2 MW offshore)(Tab #1) -45 426451 6149216 67,0 9,99 9,11 1037 77,8 Vestas V80 (2 MW offshore)(Tab #1) -46 426510 6148659 67,0 9,99 9,08 1024 76,7 Vestas V80 (2 MW offshore)(Tab #1) -47 426569 6148101 67,0 9,99 9,22 1072 80,3 Vestas V80 (2 MW offshore)(Tab #1) -48 426628 6147543 67,0 9,99 10,04 1354 101,5 Vestas V80 (2 MW offshore)(Tab #1) -51 426774 6151447 67,0 9,99 9,00 996 74,7 Vestas V80 (2 MW offshore)(Tab #1) -52 426833 6150889 67,0 9,99 9,03 1010 75,7 Vestas V80 (2 MW offshore)(Tab #1) -53 426892 6150332 67,0 9,99 9,02 1003 75,2 Vestas V80 (2 MW offshore)(Tab #1) -54 426952 6149774 67,0 9,99 9,02 1003 75,2 Vestas V80 (2 MW offshore)(Tab #1) -55 427011 6149216 67,0 9,99 9,01 1003 75,2 Vestas V80 (2 MW offshore)(Tab #1) -56 427070 6148659 67,0 9,99 9,09 1024 76,7 Vestas V80 (2 MW offshore)(Tab #1) -57 427129 6148101 67,0 9,99 9,21 1072 80,3 Vestas V80 (2 MW offshore)(Tab #1) -58 427189 6147543 67,0 9,99 10,04 1354 101,5 Vestas V80 (2 MW offshore)(Tab #1) -61 427334 6151447 67,0 9,99 8,98 990 74,2 Vestas V80 (2 MW offshore)(Tab #1) -62 427393 6150889 67,0 9,99 9,00 996 74,7 Vestas V80 (2 MW offshore)(Tab #1) -63 427453 6150332 67,0 9,99 8,99 996 74,7 Vestas V80 (2 MW offshore)(Tab #1) -64 427512 6149774 67,0 9,99 8,98 990 74,2 Vestas V80 (2 MW offshore)(Tab #1) -65 427571 6149216 67,0 9,99 8,97 990 74,2 Vestas V80 (2 MW offshore)(Tab #1) -66 427631 6148659 67,0 9,99 9,11 1031 77,2 Vestas V80 (2 MW offshore)(Tab #1) -67 427690 6148101 67,0 9,99 9,23 1072 80,3 Vestas V80 (2 MW offshore)(Tab #1) -68 427749 6147543 67,0 9,99 10,04 1354 101,5 Vestas V80 (2 MW offshore)(Tab #1) -71 427894 6151447 67,0 9,99 8,76 924 69,3 Vestas V80 (2 MW offshore)(Tab #1) -72 427953 6150889 67,0 9,99 8,79 936 70,2 Vestas V80 (2 MW offshore)(Tab #1) -73 428013 6150332 67,0 9,99 8,77 930 69,7 Vestas V80 (2 MW offshore)(Tab #1) -74 428072 6149774 67,0 9,99 8,76 924 69,3 Vestas V80 (2 MW offshore)(Tab #1) -75 428132 6149216 67,0 9,99 8,99 996 74,7 Vestas V80 (2 MW offshore)(Tab #1) -76 428191 6148659 67,0 9,99 9,11 1031 77,2 Vestas V80 (2 MW offshore)(Tab #1) -77 428250 6148101 67,0 9,99 9,22 1072 80,3 Vestas V80 (2 MW offshore)(Tab #1) -78 428310 6147543 67,0 9,99 10,04 1354 101,5 Vestas V80 (2 MW offshore)(Tab #1) -81 428454 6151447 67,0 9,99 8,75 918 68,8 Vestas V80 (2 MW offshore)(Tab #1) -82 428513 6150889 67,0 9,99 8,77 924 69,3 Vestas V80 (2 MW offshore)(Tab #1) -83 428573 6150332 67,0 9,99 8,75 924 69,3 Vestas V80 (2 MW offshore)(Tab #1) -84 428632 6149774 67,0 9,99 8,75 924 69,3 Vestas V80 (2 MW offshore)(Tab #1) -85 428692 6149216 67,0 9,99 8,99 996 74,7 Vestas V80 (2 MW offshore)(Tab #1) -86 428751 6148659 67,0 9,99 9,10 1031 77,2 Vestas V80 (2 MW offshore)(Tab #1) -87 428811 6148101 67,0 9,99 9,23 1072 80,3 Vestas V80 (2 MW offshore)(Tab #1) -88 428870 6147543 67,0 9,99 10,04 1354 101,5 Vestas V80 (2 MW offshore)(Tab #1) -91 429014 6151447 67,0 9,99 8,50 846 63,4 Vestas V80 (2 MW offshore)(Tab #1) -92 429074 6150889 67,0 9,99 8,52 852 63,9 Vestas V80 (2 MW offshore)(Tab #1) -93 429133 6150332 67,0 9,99 8,49 846 63,4 Vestas V80 (2 MW offshore)(Tab #1) -94 429193 6149774 67,0 9,99 8,75 924 69,3 Vestas V80 (2 MW offshore)(Tab #1) -95 429252 6149216 67,0 9,99 9,00 996 74,7 Vestas V80 (2 MW offshore)(Tab #1) -96 429312 6148659 67,0 9,99 9,11 1037 77,8 Vestas V80 (2 MW offshore)(Tab #1) -97 429371 6148101 67,0 9,99 9,22 1072 80,3 Vestas V80 (2 MW offshore)(Tab #1) -98 429431 6147543 67,0 9,99 10,04 1354 101,5 Vestas V80 (2 MW offshore)(Tab #1) \ No newline at end of file diff --git a/topfarm/tests/test_files/fuga_files/hornsrev2.lib b/topfarm/tests/test_files/fuga_files/hornsrev2.lib deleted file mode 100644 index 2aebf9900cea302deb901dac3cd988a3c86196b0..0000000000000000000000000000000000000000 --- a/topfarm/tests/test_files/fuga_files/hornsrev2.lib +++ /dev/null @@ -1,14 +0,0 @@ -wrf_HRI 173 183 0 0.0004 <coordinates>7.83191,55.48940,0.0</coordinates> - -1 1 12 - -0.000 0.030 0.100 0.400 1.500 - -70.0 - -3.597152 3.948682 5.167395 7.000154 8.364547 6.43485 8.643194 11.77051 15.15757 14.73792 10.01205 5.165975 - -9.176929 9.782334 9.531809 9.909545 10.04269 9.593921 9.584007 10.51499 11.39895 11.68746 11.63732 10.08803 - -2.392578 2.447266 2.412109 2.591797 2.755859 2.595703 2.583984 2.548828 2.470703 2.607422 2.626953 2.326172 - \ No newline at end of file diff --git a/topfarm/tests/test_fuga/test_lib_reader.py b/topfarm/tests/test_fuga/test_lib_reader.py deleted file mode 100644 index 2c366803ae12118e9697d637a26c62177b1ef250..0000000000000000000000000000000000000000 --- a/topfarm/tests/test_fuga/test_lib_reader.py +++ /dev/null @@ -1,27 +0,0 @@ -''' -Created on 25. apr. 2018 - -@author: mmpe -''' -import unittest -import numpy as np -from topfarm.tests.test_files import testfilepath -from topfarm.cost_models.fuga import py_fuga, lib_reader -from topfarm.cost_models.fuga.lib_reader import read_lib - - -class Test(unittest.TestCase): - - def test_lib_reader(self): - f, A, k = read_lib(testfilepath + "wind_resources/hornsrev2.lib") - np.testing.assert_array_almost_equal(f, [0.035972, 0.039487, 0.051674, 0.070002, 0.083645, 0.064349, - 0.086432, 0.117705, 0.151576, 0.147379, 0.100121, 0.05166]) - np.testing.assert_array_almost_equal(A, [9.176929, 9.782334, 9.531809, 9.909545, 10.04269, 9.593921, - 9.584007, 10.51499, 11.39895, 11.68746, 11.63732, 10.08803]) - np.testing.assert_array_almost_equal(k, [2.392578, 2.447266, 2.412109, 2.591797, 2.755859, 2.595703, - 2.583984, 2.548828, 2.470703, 2.607422, 2.626953, 2.326172]) - - -if __name__ == "__main__": - #import sys;sys.argv = ['', 'Test.test_lib_reader'] - unittest.main() diff --git a/topfarm/tests/test_fuga/test_pyfuga.py b/topfarm/tests/test_fuga/test_pyfuga.py index 2405260e457610c37b8e1e4ea5f2befc32bb33af..717e466dfdf160d280b2e6826511bcf633dcb461 100644 --- a/topfarm/tests/test_fuga/test_pyfuga.py +++ b/topfarm/tests/test_fuga/test_pyfuga.py @@ -1,18 +1,18 @@ +import os import threading import time -import numpy as np -import pytest -from topfarm.cost_models.fuga.pascal_dll import PascalDLL -from topfarm.cost_models.fuga.py_fuga import PyFuga, fugalib_path -import os -from topfarm.cost_models.fuga import py_fuga -from topfarm import TopFarm +import pytest -fuga_path = os.path.abspath(os.path.dirname(py_fuga.__file__)) + '/Colonel/' +import numpy as np +from topfarm import TopFarm +from topfarm.cost_models import fuga def check_lib_exists(): + if not os.path.isdir(os.path.dirname(fuga.__file__) + "/Colonel/py_colonel/"): + pytest.xfail("Colonel submodule not found\n") + from topfarm.cost_models.fuga.Colonel.py_colonel.py_colonel_lib import fugalib_path if os.path.isfile(fugalib_path) is False: pytest.xfail("Fugalib '%s' not found\n" % fugalib_path) @@ -21,6 +21,7 @@ def check_lib_exists(): def get_fuga(): def _fuga(tb_x=[423974, 424033], tb_y=[6151447, 6150889]): check_lib_exists() + from topfarm.cost_models.fuga.py_fuga import PyFuga, fuga_path pyFuga = PyFuga() pyFuga.setup(farm_name='Horns Rev 1', turbine_model_path=fuga_path + 'LUTs-T/', turbine_model_name='Vestas_V80_(2_MW_offshore)[h=70.00]', @@ -47,6 +48,8 @@ def _test_parallel(i): def testCheckVersion(get_fuga): check_lib_exists() + from topfarm.cost_models.fuga.Colonel.py_colonel.py_colonel_lib import fugalib_path, PascalDLL + from topfarm.cost_models.fuga.py_fuga import fuga_path lib = PascalDLL(fuga_path + "FugaLib/FugaLib.%s" % ('so', 'dll')[os.name == 'nt']) with pytest.raises(Exception, match="This version of FugaLib supports interface version "): lib.CheckInterfaceVersion(1) @@ -104,6 +107,7 @@ def testAEP_topfarm(get_fuga): def test_pyfuga_cmd(): check_lib_exists() + from topfarm.cost_models.fuga.py_fuga import PyFuga pyFuga = PyFuga() pyFuga.execute(r'echo "ColonelInit"') assert pyFuga.log.strip().split("\n")[-1] == 'ColonelInit' diff --git a/topfarm/tests/test_fuga/test_turbine_site_list_reader.py b/topfarm/tests/test_fuga/test_turbine_site_list_reader.py deleted file mode 100644 index 20c536edde64ce4d9fafcc2dfa32c78168999446..0000000000000000000000000000000000000000 --- a/topfarm/tests/test_fuga/test_turbine_site_list_reader.py +++ /dev/null @@ -1,36 +0,0 @@ -''' -Created on 14. maj 2018 - -@author: mmpe -''' -import unittest - -import numpy as np -from topfarm.tests.test_files import tfp -from topfarm.tests.test_fuga.test_pyfuga import fuga_path -from topfarm.cost_models.fuga.turbine_site_list_reader import read_turbine_site_list,\ - read_MR_turbine_site_list - - -class TestTurbineSiteListReader(unittest.TestCase): - - def testRead(self): - model, ids, pos = read_turbine_site_list(tfp + "fuga_files/TurbineSiteList.txt") - self.assertEqual(model, "Vestas_V80_(2_MW_offshore)[h=67.00]") - self.assertEqual(ids[-1], "98") - np.testing.assert_array_equal(pos[-1], [429431, 6147543, 67]) - - def testMRRead(self): - farm_name, nacelle_models, pos = read_MR_turbine_site_list(tfp + "fuga_files/4xV52SiteList.txt") - self.assertEqual(farm_name, "4xV52Farm") - name, (z, arm) = nacelle_models[0] - self.assertEqual(name, "V52-0.85MWLower[h=50.00]") - self.assertEqual(z, 50) - self.assertEqual(arm, 30) - np.testing.assert_array_equal(pos[0], [-8879, 2367]) - np.testing.assert_array_equal(pos[-1], [-3553., -2250.]) - - -if __name__ == "__main__": - #import sys;sys.argv = ['', 'Test.testName'] - unittest.main()