function [simData] = readHDF5(moorCase,loadCase,ctrID) % This function reads the HDF5 datasets, and creates a MATLAB structure % with the simulation variables and time series. % Input are: % moorCase - switch for the mooring integrity case (integer, see list below) % loadCase - load case identifier (integer, 1-13) % ctrID - controller identifier (string) % Output: % simData - structure with simulation variables and dynamic analysis time series % % The moorCase switch follows the list below: % HNMG - moorCase = 1 % HMG - moorCase = 2 % NL4S - moorCase = 3 % NL4M - moorCase = 4 % LT - moorCase = 5 % FRS - moorCase = 6 % CLW4 - moorCase = 7 % BL4 - moorCase = 8 % % Carlos Souza, SINTEF Ocean % Last edited on 18.09.2020 %#ok<*NASGU> % Determine file name and time series prefix switch moorCase case 1 filename = [num2str(loadCase) 'HNMG_' ctrID '.h5']; prefix_ts = '/SATH10MW_intact/turbWindNoMG/'; case 2 filename = [num2str(loadCase) 'HMG_' ctrID '.h5']; prefix_ts = '/SATH10MW_intact/turbWindWithMG/'; case 3 filename = [num2str(loadCase) 'NL4S_' ctrID '.h5']; prefix_ts = '/SATH10MW_noLine4/turbWindWithMG_line4BreakT_0/'; case 4 filename = [num2str(loadCase) 'NL4M_' ctrID '.h5']; prefix_ts = '/SATH10MW_noLine4/turbWindWithMG_line4BreakT_1500/'; case 5 filename = [num2str(loadCase) 'LT_' ctrID '.h5']; prefix_ts = '/SATH10MW_lockTurret/turbWindWithMG/'; case 6 filename = [num2str(loadCase) 'FRS_' ctrID '.h5']; prefix_ts = '/SATH10MW_higherFibreStiff/turbWindWithMG/'; case 7 filename = [num2str(loadCase) 'CLW4_' ctrID '.h5']; prefix_ts = '/SATH10MW_lostWeightLine4/turbWindWithMG/'; case 8 filename = [num2str(loadCase) 'BL4_' ctrID '.h5']; prefix_ts = '/SATH10MW_lostBuoyLine4/turbWindWithMG/'; end % Read HDF5 file infor info = h5info(filename); % Load simulation time series into data structure % Nacelle - Local velocity % Time dt = info.Groups.Groups.Groups(1).Groups(1).Groups(1).Datasets(1).Attributes(1).Value; lTime = info.Groups.Groups.Groups(1).Groups(1).Groups(1).Datasets(1).Dataspace(1).Size; Time = dt:dt:lTime*dt; simData.Dynamic.Nacelle.LocalVelocity.Time = Time'; datasets = info.Groups.Groups.Groups(1).Groups(1).Groups(1).Datasets; dataset_namelist = {datasets.Name}; Ndatasets = size(dataset_namelist,2); for k_n = 1:Ndatasets dataSetName = cell2mat(dataset_namelist(k_n)); channel = ['Nacelle/Local velocity/' dataSetName]; dsetName = [prefix_ts 'Dynamic/' channel]; eval(['simData.Dynamic.Nacelle.LocalVelocity.' dataSetName ' = h5read(filename,dsetName);']) end % Origo - Wave elevation % Time dt = info.Groups.Groups.Groups(1).Groups(2).Groups(1).Datasets(1).Attributes(1).Value; lTime = info.Groups.Groups.Groups(1).Groups(2).Groups(1).Datasets(1).Dataspace(1).Size; Time = dt:dt:lTime*dt; simData.Dynamic.Origo.Time = Time'; datasets = info.Groups.Groups.Groups(1).Groups(2).Groups(1).Datasets; dataset_namelist = {datasets.Name}; Ndatasets = size(dataset_namelist,2); for k_n = 1:Ndatasets dataSetName = cell2mat(dataset_namelist(k_n)); channel = ['Origo/Wave elevation/' dataSetName]; dsetName = [prefix_ts 'Dynamic/' channel]; eval(['simData.Dynamic.Origo.' dataSetName ' = h5read(filename,dsetName);']) end % Wind turbine % Time dt = info.Groups.Groups.Groups(1).Groups(3).Datasets(1).Attributes(1).Value; lTime = info.Groups.Groups.Groups(1).Groups(3).Datasets(1).Dataspace(1).Size; Time = dt:dt:lTime*dt; simData.Dynamic.WindTurbine.Time = Time'; channel = ['Wind Turbine/Aero force X-dir in shaft system']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.AeroForceX = h5read(filename,dsetName); channel = ['Wind Turbine/Aero force Y-dir in shaft system']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.AeroForceY = h5read(filename,dsetName); channel = ['Wind Turbine/Aero force Z-dir in shaft system']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.AeroForceZ = h5read(filename,dsetName); channel = ['Wind Turbine/Aero moment around X-axis in shaft system']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.AeroMomX = h5read(filename,dsetName); channel = ['Wind Turbine/Aero moment around Y-axis in shaft system']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.AeroMomY = h5read(filename,dsetName); channel = ['Wind Turbine/Aero moment around Z-axis in shaft system']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.AeroMomZ = h5read(filename,dsetName); channel = ['Wind Turbine/Azimuth angle blade 1']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.AzimuthBlade1 = h5read(filename,dsetName); channel = ['Wind Turbine/Electrical generator output']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.GenPower = h5read(filename,dsetName); channel = ['Wind Turbine/Generator speed (LP-filtered)']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.GenSpeed = h5read(filename,dsetName); channel = ['Wind Turbine/Incoming wind speed X-dir in shaft system']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.WindSpeedX = h5read(filename,dsetName); channel = ['Wind Turbine/Incoming wind speed Y-dir in shaft system']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.WindSpeedY = h5read(filename,dsetName); channel = ['Wind Turbine/Incoming wind speed Z-dir in shaft system']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.WindSpeedZ = h5read(filename,dsetName); channel = ['Wind Turbine/Mechanical generator torque on LSS']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.MechGenTorque = h5read(filename,dsetName); channel = ['Wind Turbine/Pitch angle blade 1, Line: bl1foil']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.PitchBlade1 = h5read(filename,dsetName); channel = ['Wind Turbine/Pitch angle blade 2, Line: bl2foil']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.PitchBlade2 = h5read(filename,dsetName); channel = ['Wind Turbine/Pitch angle blade 3, Line: bl3foil']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.PitchBlade3 = h5read(filename,dsetName); channel = ['Wind Turbine/Rotor speed']; dsetName = [prefix_ts 'Dynamic/' channel]; simData.Dynamic.WindTurbine.RotSpeed = h5read(filename,dsetName);