Skip to content
Snippets Groups Projects
test_Shear.py 5.78 KiB
Newer Older
mads's avatar
mads committed
'''
Created on 05/06/2012

@author: Mads
'''
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from builtins import zip
from future import standard_library
standard_library.install_aliases()
mads's avatar
mads committed
import os
mads's avatar
mads committed
from wetb.utils.geometry import xyz2uvw
mads's avatar
mads committed
import wetb.gtsdf
from wetb.wind.shear import power_shear, fit_power_shear, fit_power_shear_ref, \
    log_shear, fit_log_shear, stability_term
mads's avatar
mads committed

mads's avatar
mads committed


import unittest
import numpy as np

import matplotlib.pyplot as plt


all = True
mads's avatar
mads committed
class TestShear(unittest.TestCase):
mads's avatar
mads committed

    def setUp(self):
mads's avatar
mads committed
        self.tfp = os.path.join(os.path.dirname(__file__), 'test_files/')  # test file path
mads's avatar
mads committed

        """
        Sensor list of hdf5 files
        0: WSP gl. coo.,Abs_vhor 85
        1: WSP gl. coo.,Vdir_hor 85
        2: WSP gl. coo.,Abs_vhor 53
        3: WSP gl. coo.,Vdir_hor 53
        4: WSP gl. coo.,Abs_vhor 21
        5: WSP gl. coo.,Vdir_hor 21
        6: WSP gl. coo.,Vx 85
        7: WSP gl. coo.,Vy 85
        8: WSP gl. coo.,Vz 85
        9: WSP gl. coo.,Vx 53
        10: WSP gl. coo.,Vy 53
        11: WSP gl. coo.,Vz 53
        12: WSP gl. coo.,Vx 21
        13: WSP gl. coo.,Vy 21
        14: WSP gl. coo.,Vz 21
        """


    def test_power_shear(self):
        if all:
mads's avatar
mads committed
            _, data, _ = wetb.gtsdf.load(self.tfp + 'wind3.hdf5')
mads's avatar
mads committed
            u20 = data[:, 4]
            u70 = data[:, 6]
            z_u_lst1 = [(70, u70), (20, u20)]
            z_u_lst2 = [ (80, 6.93121004105), (100, 7.09558010101), (60, 6.58919000626), (40, 6.12744998932)]

            alpha = fit_power_shear(z_u_lst2)
            self.assertAlmostEqual(alpha, 0.163432280539)
            if 0:
                z = np.arange(10, 100)
                plt.plot([np.mean(u20), np.mean(u70)], [20, 70], 'bo')
                alpha = fit_power_shear(z_u_lst1)
                plt.plot(power_shear(alpha, 70, z, np.mean(u70)), z, 'b')

                z, u = np.array(z_u_lst2).T
                plt.plot(u, z, 'ro')
                alpha = fit_power_shear(z_u_lst2)
                z = np.sort(z)
                plt.plot(power_shear(alpha, 80, z, 6.9), z, 'r')
                plt.show()




    def test_fit_power_shear1(self):

mads's avatar
mads committed
        time, data, info = wetb.gtsdf.load(self.tfp + 'shear_noturb_85.hdf5')  #shear, alpha = 0.5
mads's avatar
mads committed

        wsp85 = data[:, 0]
        wsp53 = data[:, 2]
        wsp21 = data[:, 4]
        u85 = data[:, 7]
        u21 = data[:, 13]

        self.assertAlmostEqual(fit_power_shear([(85, wsp85), (53, wsp53), (21, wsp21)]), 0.5, delta=0.001)
        self.assertAlmostEqual(fit_power_shear([(85, wsp85), (21, wsp21)]), 0.5, delta=0.001)
        self.assertAlmostEqual(fit_power_shear([(85, u85), (21, u21)]), 0.5, delta=0.001)

    def test_fit_power_shear_ref(self):

mads's avatar
mads committed
        time, data, info = wetb.gtsdf.load(self.tfp + 'shear_noturb.hdf5')  #shear, alpha = 0.5
mads's avatar
mads committed

        wsp85 = data[:, 0]
        wsp53 = data[:, 2]
        wsp21 = data[:, 4]

Mads M. Pedersen's avatar
Mads M. Pedersen committed
        alpha, u_ref = fit_power_shear_ref([(85, wsp85), (21, wsp21)], 87.13333)
mads's avatar
mads committed
        self.assertAlmostEqual(alpha, .5, delta=.001)
        self.assertAlmostEqual(u_ref, 9, delta=.01)

        alpha, u_ref = fit_power_shear_ref([(85, wsp85), (53, wsp53), (21, wsp21)], 87.13333)
        self.assertAlmostEqual(alpha, .5, delta=.001)
        self.assertAlmostEqual(u_ref, 9, delta=.01)


    def test_fit_power_shear3(self):

mads's avatar
mads committed
        time, data, info = wetb.gtsdf.load(self.tfp + 'shear.hdf5')  #shear, alpha = 0.5
mads's avatar
mads committed
        #print "\n".join(["%d: %s" % (i, n) for i, n in enumerate(info['attribute_names'])])
        """
        0: WSP gl. coo.,Abs_vhor 85
        1: WSP gl. coo.,Vdir_hor 85
        2: WSP gl. coo.,Abs_vhor 53
        3: WSP gl. coo.,Vdir_hor 53
        4: WSP gl. coo.,Abs_vhor 21
        5: WSP gl. coo.,Vdir_hor 21
        6: WSP gl. coo.,Vx 85
        7: WSP gl. coo.,Vy 85
        8: WSP gl. coo.,Vz 85
        9: WSP gl. coo.,Vx 53
        10: WSP gl. coo.,Vy 53
        11: WSP gl. coo.,Vz 53
        12: WSP gl. coo.,Vx 21
        13: WSP gl. coo.,Vy 21
        14: WSP gl. coo.,Vz 21
        """
        wsp85 = data[:, 0]
        wsp53 = data[:, 2]
        wsp21 = data[:, 4]
        u85 = data[:, 7]
        u21 = data[:, 13]

        alpha, u_ref = fit_power_shear_ref([(85, wsp85), (21, wsp21)], 87.13333)
        self.assertAlmostEqual(alpha, .5, delta=.2)
        self.assertAlmostEqual(u_ref, 9, delta=.01)


    def test_log_shear(self):
        u = log_shear(2, 3, 9)
        self.assertAlmostEqual(u, 5.49306144)

    def test_fit_log_shear(self):
        zu = [(85, 8.88131), (21, 4.41832)]
        u_star, z0 = fit_log_shear(zu)
        if 0:
            for z, u in zu:
                plt.plot(u, z, 'r.')
            z = np.arange(10, 100)
            plt.plot(log_shear(u_star, z0, z), z)
mads's avatar
mads committed
            plt.show()
mads's avatar
mads committed
        for _zu, b in zip(zu, log_shear(u_star, z0, [85, 21])):
            self.assertAlmostEqual(_zu[1], b, 4)


    def test_show_log_shear(self):
        if 0:
            for ustar in [1, 2]:
                for z0 in [1, 10]:
                    z = np.arange(z0, 200)
mads's avatar
mads committed
                    plt.plot(log_shear(ustar, z0, z), z, label="z0=%d, u*=%d" % (z0, ustar))
            plt.yscale('log')
            plt.legend()
            plt.show()
mads's avatar
mads committed

    def test_show_log_shear_stability(self):
        if 0:
            z0 = 1
            ustar = 1
            z = np.arange(z0, 200)
            for L in [-2000, -100, 100, 2000]:
mads's avatar
mads committed
                plt.plot(log_shear(ustar, z0, z, L), z, label="L=%d" % (L))
mads's avatar
mads committed
            #yscale('log')
mads's avatar
mads committed
            plt.legend()
            plt.show()
mads's avatar
mads committed



if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.testName']
    unittest.main()