diff --git a/plant/Plant_AEP.ipynb b/plant/Plant_AEP.ipynb new file mode 100644 index 0000000..3b23061 --- /dev/null +++ b/plant/Plant_AEP.ipynb @@ -0,0 +1,136 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## AEP calculation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$AEP = \\sum_{wt=0}^{N}\\sum_{wd_{ref}=0}^{360}\\sum_{ws = cut{\\text -}in}^{cut{\\text -}out} Power \\cdot Weight$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$Power = PowerCurve_{wt}\\left(LocalWind,\\theta_{yaw}\\right)\\cdot \\frac{\\rho}{\\rho_{ref}}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\\begin{align}LocalWind = WS \\cdot SpeedUp - WakeDeficits\\end{align}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$ Weight=\\begin{cases}\n", + " P, & \\text{if $P$ is provided}.\\\\\n", + " f \\cdot Weibull(A,k,ws), & \\text{otherwise}.\n", + " \\end{cases}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Where \n", + "\n", + "- $wt$: wind turbine\n", + "- $wd$: reference wind direction\n", + "- $ws$: reference wind speed\n", + "- $\\theta_{yaw}$: yaw missalignment of the wind turbine\n", + "- $PowerCurve_{wt}$: the wind-speed and yaw-misalignment dependent power curve of the wind turbine\n", + "- $WakeDeficits$: Deficits from other wind turbines" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Required data variables:\n", + "\n", + "- $P$: Probability of flow case\n", + "\n", + "or\n", + "\n", + "- $f$: Sector probability\n", + "- $A$: Weibull scale parameter\n", + "- $k$: Weibull shape parameter" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Optional data variables:\n", + "\n", + "- $WS$: Wind speed, defaults to reference wind speed, $ws$\n", + "- $SpeedUp$: Speed up factor, defaults to 1\n", + "- $\\rho$: Air density, defaults to reference density, $\\rho_{ref}$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These required and optional data varaibles may be constant or dependent on any of\n", + "- $ws$ \n", + "- $wd$\n", + "- $position$ in terms of\n", + " - gridded 2D position, (x,y)\n", + " - gridded 3D position, (x,y,z)\n", + " - wt position" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.2" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": true + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git "a/plant/documents/IEA37_CS_1+2/Icon\r" b/plant/examples/__init__.py similarity index 100% rename from "plant/documents/IEA37_CS_1+2/Icon\r" rename to plant/examples/__init__.py diff --git a/plant/examples/example_data/GriddedSite.nc b/plant/examples/example_data/GriddedSite.nc new file mode 100644 index 0000000..92e8026 Binary files /dev/null and b/plant/examples/example_data/GriddedSite.nc differ diff --git a/plant/examples/example_data/GriddedSite.yml b/plant/examples/example_data/GriddedSite.yml new file mode 100644 index 0000000..5519046 --- /dev/null +++ b/plant/examples/example_data/GriddedSite.yml @@ -0,0 +1,158 @@ +coords: + wd: + data: + - 0.0 + - 22.5 + - 45.0 + - 67.5 + - 90.0 + - 112.5 + - 135.0 + - 157.5 + - 180.0 + - 202.5 + - 225.0 + - 247.5 + - 270.0 + - 292.5 + - 315.0 + - 337.5 + dims: + - wd + x: + data: + - -2000 + - -1500 + - -1000 + - -500 + - 0 + - 500 + - 1000 + - 1500 + - 2000 + dims: + - x + y: + data: + - -2000 + - -1500 + - -1000 + - -500 + - 0 + - 500 + - 1000 + - 1500 + - 2000 + dims: + - y +data_vars: + P: + data: + - 0.025 + - 0.024 + - 0.029 + - 0.036 + - 0.063 + - 0.065 + - 0.1 + - 0.122 + - 0.063 + - 0.038 + - 0.039 + - 0.083 + - 0.213 + - 0.046 + - 0.032 + - 0.022 + dims: + - wd + Speedup: + data: + - - 0.954030230586814 + - 0.979030230586814 + - 1.0040302305868138 + - 1.029030230586814 + - 1.0540302305868139 + - 1.0790302305868138 + - 1.104030230586814 + - 1.1290302305868138 + - 1.154030230586814 + - - 0.9731688868873821 + - 0.9981688868873821 + - 1.023168886887382 + - 1.048168886887382 + - 1.073168886887382 + - 1.098168886887382 + - 1.1231688868873821 + - 1.148168886887382 + - 1.1731688868873822 + - - 0.9877582561890373 + - 1.0127582561890374 + - 1.0377582561890373 + - 1.0627582561890372 + - 1.0877582561890373 + - 1.1127582561890372 + - 1.1377582561890374 + - 1.1627582561890373 + - 1.1877582561890374 + - - 0.9968912421710645 + - 1.0218912421710646 + - 1.0468912421710646 + - 1.0718912421710645 + - 1.0968912421710644 + - 1.1218912421710643 + - 1.1468912421710646 + - 1.1718912421710646 + - 1.1968912421710645 + - - 1.0 + - 1.0250000000000001 + - 1.05 + - 1.075 + - 1.1 + - 1.125 + - 1.1500000000000001 + - 1.175 + - 1.2000000000000002 + - - 0.9968912421710645 + - 1.0218912421710646 + - 1.0468912421710646 + - 1.0718912421710645 + - 1.0968912421710644 + - 1.1218912421710643 + - 1.1468912421710646 + - 1.1718912421710646 + - 1.1968912421710645 + - - 0.9877582561890373 + - 1.0127582561890374 + - 1.0377582561890373 + - 1.0627582561890372 + - 1.0877582561890373 + - 1.1127582561890372 + - 1.1377582561890374 + - 1.1627582561890373 + - 1.1877582561890374 + - - 0.9731688868873821 + - 0.9981688868873821 + - 1.023168886887382 + - 1.048168886887382 + - 1.073168886887382 + - 1.098168886887382 + - 1.1231688868873821 + - 1.148168886887382 + - 1.1731688868873822 + - - 0.954030230586814 + - 0.979030230586814 + - 1.0040302305868138 + - 1.029030230586814 + - 1.0540302305868139 + - 1.0790302305868138 + - 1.104030230586814 + - 1.1290302305868138 + - 1.154030230586814 + dims: + - x + - y +dims: + wd: 16 + x: 9 + y: 9 diff --git a/plant/examples/example_data/NonGriddedSite.nc b/plant/examples/example_data/NonGriddedSite.nc new file mode 100644 index 0000000..eda53c6 Binary files /dev/null and b/plant/examples/example_data/NonGriddedSite.nc differ diff --git a/plant/examples/example_data/NonGriddedSite.yml b/plant/examples/example_data/NonGriddedSite.yml new file mode 100644 index 0000000..9a9feb4 --- /dev/null +++ b/plant/examples/example_data/NonGriddedSite.yml @@ -0,0 +1,85 @@ +coords: + i: + data: + - 0 + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - 9 + - 10 + - 11 + - 12 + - 13 + - 14 + - 15 + dims: + - i + wd: + data: + - 0.0 + - 22.5 + - 45.0 + - 67.5 + - 90.0 + - 112.5 + - 135.0 + - 157.5 + - 180.0 + - 202.5 + - 225.0 + - 247.5 + - 270.0 + - 292.5 + - 315.0 + - 337.5 + dims: + - wd +data_vars: + P: + data: + - 0.025 + - 0.024 + - 0.029 + - 0.036 + - 0.063 + - 0.065 + - 0.1 + - 0.122 + - 0.063 + - 0.038 + - 0.039 + - 0.083 + - 0.213 + - 0.046 + - 0.032 + - 0.022 + dims: + - wd + Speedup: + data: + - 1.0 + - 1.01 + - 1.02 + - 1.03 + - 1.04 + - 1.05 + - 1.06 + - 1.07 + - 1.08 + - 1.09 + - 1.1 + - 1.11 + - 1.12 + - 1.13 + - 1.1400000000000001 + - 1.15 + dims: + - i +dims: + i: 16 + wd: 16 diff --git a/plant/examples/example_data/UniformSite.nc b/plant/examples/example_data/UniformSite.nc new file mode 100644 index 0000000..bda8396 Binary files /dev/null and b/plant/examples/example_data/UniformSite.nc differ diff --git a/plant/examples/example_data/UniformWeibullSite.nc b/plant/examples/example_data/UniformWeibullSite.nc new file mode 100644 index 0000000..3468602 Binary files /dev/null and b/plant/examples/example_data/UniformWeibullSite.nc differ diff --git a/plant/examples/example_data/UniformWeibullSite.yml b/plant/examples/example_data/UniformWeibullSite.yml new file mode 100644 index 0000000..d650e66 --- /dev/null +++ b/plant/examples/example_data/UniformWeibullSite.yml @@ -0,0 +1,68 @@ +coords: + wd: + data: + - 0.0 + - 30.0 + - 60.0 + - 90.0 + - 120.0 + - 150.0 + - 180.0 + - 210.0 + - 240.0 + - 270.0 + - 300.0 + - 330.0 + dims: + - wd +data_vars: + Sector_frequency: + data: + - 3.597152 + - 3.948682 + - 5.167395 + - 7.000154 + - 8.364547 + - 6.43485 + - 8.643194 + - 11.77051 + - 15.15757 + - 14.73792 + - 10.01205 + - 5.165975 + dims: + - wd + Weibull_A: + data: + - 9.176929 + - 9.782334 + - 9.531809 + - 9.909545 + - 10.04269 + - 9.593921 + - 9.584007 + - 10.51499 + - 11.39895 + - 11.68746 + - 11.63732 + - 10.08803 + dims: + - wd + Weibull_k: + data: + - 2.392578 + - 2.447266 + - 2.412109 + - 2.591797 + - 2.755859 + - 2.595703 + - 2.583984 + - 2.548828 + - 2.470703 + - 2.607422 + - 2.626953 + - 2.326172 + dims: + - wd +dims: + wd: 12 diff --git "a/plant/documents/Icon\r" b/plant/examples/example_data/__init__.py similarity index 100% rename from "plant/documents/Icon\r" rename to plant/examples/example_data/__init__.py diff --git a/plant/examples/example_data/make_example_data.py b/plant/examples/example_data/make_example_data.py new file mode 100644 index 0000000..9fcf8d4 --- /dev/null +++ b/plant/examples/example_data/make_example_data.py @@ -0,0 +1,72 @@ +import xarray as xr +import numpy as np +import yaml +from pathlib import Path +import matplotlib.pyplot as plt + + +def xr2yml(ds, filename=None): + def fmt(v): + if isinstance(v, dict): + return {k: fmt(v) for k, v in v.items() if fmt(v) != {}} + elif isinstance(v, tuple): + return list(v) + else: + return v + yml = yaml.dump(fmt(ds.to_dict())) + if filename: + Path(filename).write_text(yml) + return yml + + +if __name__ == '__main__': + + # uniform site (https://github.com/byuflowlab/iea37-wflo-casestudies/blob/master/cs1-2/iea37-windrose.yaml) + f = [.025, .024, .029, .036, .063, .065, .100, .122, .063, .038, .039, .083, .213, .046, .032, .022] + WS = 9.8 + ds = xr.Dataset( + data_vars={'WS': WS, 'P': ('wd', f)}, + coords={'wd': np.linspace(0, 360, len(f), endpoint=False)}) + ds.to_netcdf("UniformSite.nc") + xr2yml(ds, "UniformSite.yml") + + # WeibullSite + f = [3.597152, 3.948682, 5.167395, 7.000154, 8.364547, 6.43485, + 8.643194, 11.77051, 15.15757, 14.73792, 10.01205, 5.165975] + 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] + 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] + ds = xr.Dataset( + data_vars={'Sector_frequency': ('wd', f), 'Weibull_A': ('wd', A), 'Weibull_k': ('wd', k)}, + coords={'wd': np.linspace(0, 360, len(f), endpoint=False)}) + ds.to_netcdf("UniformWeibullSite.nc") + xr2yml(ds, "UniformWeibullSite.yml") + + # NonGridded site. 16 WT with speedup = 1+.01*wt_index + f = [.025, .024, .029, .036, .063, .065, .100, .122, .063, .038, .039, .083, .213, .046, .032, .022] + wt_index = np.arange(16) + ds = xr.Dataset( + data_vars={'Speedup': ('i', 1 + .01 * wt_index), 'P': ('wd', f)}, + coords={'wd': np.linspace(0, 360, len(f), endpoint=False), + 'i': wt_index}) + if 0: + ds.SpeedUp.plot() + plt.show() + ds.to_netcdf("NonGriddedSite.nc") + xr2yml(ds, "NonGriddedSite.yml") + + # GriddedSite. + f = [.025, .024, .029, .036, .063, .065, .100, .122, .063, .038, .039, .083, .213, .046, .032, .022] + x = y = np.arange(-2000, 2500, 500) + X, Y = np.meshgrid(x, y) + + ds = xr.Dataset( + data_vars={'Speedup': (['x', 'y'], 1 + 0.1 * x / x.max() + 0.1 * np.cos(Y / y.max())), 'P': ('wd', f)}, + coords={'wd': np.linspace(0, 360, len(f), endpoint=False), + 'x': x, + 'y': y}) + ds.Speedup.plot(x='x') + plt.show() + ds.to_netcdf("GriddedSite.nc") + xr2yml(ds, "GriddedSite.yml") diff --git a/plant/examples/example_data/uniformSite.yml b/plant/examples/example_data/uniformSite.yml new file mode 100644 index 0000000..92fa840 --- /dev/null +++ b/plant/examples/example_data/uniformSite.yml @@ -0,0 +1,47 @@ +coords: + wd: + data: + - 0.0 + - 22.5 + - 45.0 + - 67.5 + - 90.0 + - 112.5 + - 135.0 + - 157.5 + - 180.0 + - 202.5 + - 225.0 + - 247.5 + - 270.0 + - 292.5 + - 315.0 + - 337.5 + dims: + - wd +data_vars: + P: + data: + - 0.025 + - 0.024 + - 0.029 + - 0.036 + - 0.063 + - 0.065 + - 0.1 + - 0.122 + - 0.063 + - 0.038 + - 0.039 + - 0.083 + - 0.213 + - 0.046 + - 0.032 + - 0.022 + dims: + - wd + WS: + data: 9.8 + dims: [] +dims: + wd: 16 diff --git a/plant/examples/examples2pywake.py b/plant/examples/examples2pywake.py new file mode 100644 index 0000000..9e2f525 --- /dev/null +++ b/plant/examples/examples2pywake.py @@ -0,0 +1,58 @@ +import os +import xarray as xr +from py_wake.site.xrsite import XRSite +import matplotlib.pyplot as plt +import yaml +import numpy as np + + +def yml2xr(file): + pass + + +if __name__ == '__main__': + example_data_path = os.path.dirname(__file__) + "/example_data/" + + def load(f): + yml_site = XRSite(xr.open_dataset(example_data_path + f + ".nc")) + with open(example_data_path + f + '.yml') as fid: + xr_site = XRSite(xr.Dataset.from_dict(yaml.safe_load(fid))) + assert yml_site.ds.equals(xr_site.ds) + return yml_site + + # UniformSite + site = load('UniformSite') + plt.figure() + site.plot_wd_distribution(ws_bins=4) + plt.title('UniformSite') + + # UniformWeibullSite + f = 'UniformWeibullSite' + site = load(f) + plt.figure() + site.plot_wd_distribution(ws_bins=4) + plt.title(f) + plt.figure() + site.plot_ws_distribution() + plt.title(f) + + # NonGriddedSite + f = 'NonGriddedSite' + site = load(f) + x = y = np.arange(16) # dummy positions + lw = site.local_wind(x, y, wd=0, ws=10) + plt.figure() + plt.title(f) + lw.WS.plot() + + # GriddedSite + f = 'GriddedSite' + site = load(f) + x = y = np.arange(-2000, 2500, 500) + X, Y = np.meshgrid(x, y) + lw = site.local_wind(X.flatten(), Y.flatten(), wd=0, ws=10) + plt.figure() + plt.title(f) + plt.contourf(X, Y, np.reshape(lw.WS, X.shape)) + + plt.show() diff --git a/plant/plant_old/plant_energy_resource_mikf.yaml b/plant/plant_old/plant_energy_resource_mikf.yaml index 4174fca..7e2f555 100644 --- a/plant/plant_old/plant_energy_resource_mikf.yaml +++ b/plant/plant_old/plant_energy_resource_mikf.yaml @@ -7,16 +7,15 @@ properties: type: object required: - sectors - - oneOf: - - uniform_resource - - non_uniform_resource + - uniform_resource properties: sectors: - description: >- + type: object + description: > if only n_sec is given the wind direction sectors are assumed evenly distributed from north in negative mathematical orbital direction if n_sec = 1 no sector information is available as for e.g. timeseries required: - - n_sec + - n_sec properties: n_sec: type: integer @@ -26,196 +25,197 @@ properties: items: type: number # length of n_sec uniform_resource: - required: - - probability - - ti - - oneOf: - - wind_speed - - allOf: - - a - - k - properties: - probability: - type: array # length of n_sec - items: - type: number - ti: - type: array # length of n_sec or 1 - items: - type: number - wind_speed: - type: number - a: - type: array # length of n_sec - items: - type: number - k: - type: array # length of n_sec - items: - type: number - additionalProperties: - shear: - required: - - alpha - - h_ref - properties: - alpha: - type: number - properties: - h_ref: - type: number - non_uniform_resource: type: object required: - - n_loc - - oneOf: - - regular_coordinates - - irregular_coordinates - - oneOf: - - grid_resource - - double_weibull - - time_series - - mast - additionalProperties: - - elevation - properties: - n_loc: - type: integer - description: >- - number of locations - regular_coordinates: - type: object - description: >- - x, y and z are all arrays of unique numbers. Locations are obtained with a mesh grid. - required: - - x - - y - properties: - x: - type: array - items: - type: number - y: - type: array - items: - type: number - additionalProperties: - z: - type: array - items: - type: number - irregular_coordinates: - type: object - description: >- - x, y and z are all arrays of equal length where an index corresponds to a location. - required: - - x - - y - properties: - x: - type: array - items: - type: number - y: - type: array - items: - type: number - additionalProperties: - z: - type: array - items: - type: number - grid_resource: - required: - - f - - oneOf: - - ws_mean - - allOf: - - a - - k - properties: - f: - type: array # length of n_loc - items: - type: array # length of n_sec - items: - type: number - ws_mean: - type: array # length of n_loc - items: - type: array # length of n_sec - items: - type: number - a: - type: array # length of n_loc - items: - type: array # length of n_sec - items: - type: number - k: - type: array # length of n_loc - items: - type: array # length of n_sec - items: - type: number - additionalProperties: - flow_inc: - type: array # length of n_loc - items: - type: array # length of n_sec - items: - type: number - meso_rgh: - type: array # length of n_loc - items: - type: array # length of n_sec - items: - type: number - obst_spd: - type: array # length of n_loc - items: - type: array # length of n_sec - items: - type: number - orog_spd: - type: array # length of n_loc - items: - type: array # length of n_sec - items: - type: number - power_density: - type: array # length of n_loc - items: - type: array # length of n_sec - items: - type: number - rix: - type: array # length of n_loc - items: - type: array # length of n_sec - items: - type: number - rgh_change: - type: array # length of n_loc - items: - type: array # length of n_sec - items: - type: number - rgh_spd: - type: array # length of n_loc - items: - type: array # length of n_sec - items: - type: number - ti: - type: array # length of n_loc - items: - type: array # length of n_sec - items: - type: number -# wind_speeds: -# required: -# - wind_speed -# - wind_direction -# - probability -# \ No newline at end of file + - ti + - probability +# - oneOf: +# - wind_speed +# - allOf: +# - a +# - k +# properties: +# probability: +# type: array # length of n_sec +# items: +# type: number +# ti: +# type: array # length of n_sec or 1 +# items: +# type: number +# wind_speed: +# type: number +# a: +# type: array # length of n_sec +# items: +# type: number +# k: +# type: array # length of n_sec +# items: +# type: number +# additionalProperties: +# shear: +# required: +# - alpha +# - h_ref +# properties: +# alpha: +# type: number +# properties: +# h_ref: +# type: number +# - non_uniform_resource: +# type: object +# required: +# - n_loc +# - oneOf: +# - regular_coordinates +# - irregular_coordinates +# - oneOf: +# - grid_resource +# - double_weibull +# - time_series +# - mast +# additionalProperties: +# - elevation +# properties: +# n_loc: +# type: integer +# description: >- +# number of locations +# regular_coordinates: +# type: object +# description: >- +# x, y and z are all arrays of unique numbers. Locations are obtained with a mesh grid. +# required: +# - x +# - y +# properties: +# x: +# type: array +# items: +# type: number +# y: +# type: array +# items: +# type: number +# additionalProperties: +# z: +# type: array +# items: +# type: number +# irregular_coordinates: +# type: object +# description: >- +# x, y and z are all arrays of equal length where an index corresponds to a location. +# required: +# - x +# - y +# properties: +# x: +# type: array +# items: +# type: number +# y: +# type: array +# items: +# type: number +# additionalProperties: +# z: +# type: array +# items: +# type: number +# grid_resource: +# required: +# - f +# - oneOf: +# - ws_mean +# - allOf: +# - a +# - k +# properties: +# f: +# type: array # length of n_loc +# items: +# type: array # length of n_sec +# items: +# type: number +# ws_mean: +# type: array # length of n_loc +# items: +# type: array # length of n_sec +# items: +# type: number +# a: +# type: array # length of n_loc +# items: +# type: array # length of n_sec +# items: +# type: number +# k: +# type: array # length of n_loc +# items: +# type: array # length of n_sec +# items: +# type: number +# additionalProperties: +# flow_inc: +# type: array # length of n_loc +# items: +# type: array # length of n_sec +# items: +# type: number +# meso_rgh: +# type: array # length of n_loc +# items: +# type: array # length of n_sec +# items: +# type: number +# obst_spd: +# type: array # length of n_loc +# items: +# type: array # length of n_sec +# items: +# type: number +# orog_spd: +# type: array # length of n_loc +# items: +# type: array # length of n_sec +# items: +# type: number +# power_density: +# type: array # length of n_loc +# items: +# type: array # length of n_sec +# items: +# type: number +# rix: +# type: array # length of n_loc +# items: +# type: array # length of n_sec +# items: +# type: number +# rgh_change: +# type: array # length of n_loc +# items: +# type: array # length of n_sec +# items: +# type: number +# rgh_spd: +# type: array # length of n_loc +# items: +# type: array # length of n_sec +# items: +# type: number +# ti: +# type: array # length of n_loc +# items: +# type: array # length of n_sec +# items: +# type: number +# # wind_speeds: +# # required: +# # - wind_speed +# # - wind_direction +# # - probability +# # \ No newline at end of file diff --git "a/plant/schemata/Icon\r" "b/plant/schemata/Icon\r" deleted file mode 100644 index e69de29..0000000