0001 function mrg_dfs2_cart_to_pol(curr_east,curr_north,wind)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042 NET.addAssembly('DHI.Generic.MikeZero');
0043 import DHI.Generic.MikeZero.*
0044 import DHI.Generic.MikeZero.DFS.*;
0045 import DHI.Generic.MikeZero.DFS.dfs123.*;
0046
0047
0048 [file, path] = uigetfile('*.dfs2', 'Choose a DFS2 file to process');
0049 in_filename = [path,file];
0050 out_filename = [path,file(1:end-5),'_dir.dfs2'];
0051 dfs2_in = DfsFileFactory.Dfs2FileOpenEdit(in_filename);
0052 nsteps = dfs2_in.FileInfo.TimeAxis.NumberOfTimeSteps;
0053 deleteval = double(dfs2_in.FileInfo.DeleteValueFloat);
0054
0055
0056
0057 factory = DHI.Generic.MikeZero.DFS.DfsFactory;
0058 builder = Dfs2Builder.Create('Matlab dfs2 file','Matlab DFS',0);
0059
0060
0061 builder.SetDataType(dfs2_in.FileInfo.DataType);
0062 builder.SetGeographicalProjection(dfs2_in.FileInfo.Projection);
0063 builder.SetTemporalAxis(dfs2_in.FileInfo.TimeAxis);
0064 builder.SetSpatialAxis(dfs2_in.SpatialAxis);
0065 builder.DeleteValueFloat = dfs2_in.FileInfo.DeleteValueFloat;
0066
0067
0068
0069
0070 for j=1:double(dfs2_in.FileInfo.CustomBlocks.Count)
0071 custom_vec = zeros(1,7);
0072 for i=1:7
0073 custom_vec(i) = double(dfs2_in.FileInfo.CustomBlocks.Item(j-1).Data.Item(i-1));
0074 end
0075 custom_name = char(dfs2_in.FileInfo.CustomBlocks.Item(j-1).Name);
0076 builder.AddCustomBlock(dfsCreateCustomBlock(factory, custom_name, custom_vec, 'System.Single'));
0077 end
0078
0079
0080 if wind
0081 builder.AddDynamicItem('Derived Wind Direction', eumQuantity.Create(eumItem.eumIWindDirection, eumUnit.eumUdegree), DfsSimpleType.Float, DataValueType.Instantaneous);
0082 builder.AddDynamicItem('Derived Wind Speed', eumQuantity.Create(eumItem.eumIWindSpeed, eumUnit.eumUmeterPerSec), DfsSimpleType.Float, DataValueType.Instantaneous);
0083 else
0084 builder.AddDynamicItem('Derived Current Direction', eumQuantity.Create(eumItem.eumICurrentDirection, eumUnit.eumUdegree), DfsSimpleType.Float, DataValueType.Instantaneous);
0085 builder.AddDynamicItem('Derived Current Speed', eumQuantity.Create(eumItem.eumICurrentSpeed, eumUnit.eumUmeterPerSec), DfsSimpleType.Float, DataValueType.Instantaneous);
0086 end
0087
0088
0089 builder.CreateFile(out_filename);
0090
0091 dfs2_out = builder.GetFile();
0092
0093
0094
0095
0096
0097
0098 for i=0:nsteps-1
0099 east_DFS = dfs2_in.ReadItemTimeStep(curr_east,i);
0100 north_DFS = dfs2_in.ReadItemTimeStep(curr_north,i);
0101 east_data = double(east_DFS.Data);
0102 north_data = double(north_DFS.Data);
0103 if north_DFS.Time ~= east_DFS.Time
0104 error('mrg_dfs2_cart_to_pol:timeissue','Time mismatch between objects?!')
0105 end
0106 time = east_DFS.Time;
0107 [dir,speed] = cart2pol(north_data,east_data);
0108
0109 if wind
0110 dir = dir*180/pi + 180;
0111 else
0112 dir = dir*180/pi;
0113 index = ~(dir > 0);
0114 dir = dir + index * 360;
0115 end
0116 dfs2_out.WriteItemTimeStepNext(1,NET.convertArray(single(dir)));
0117 dfs2_out.WriteItemTimeStepNext(2,NET.convertArray(single(speed)));
0118 end
0119
0120
0121 dfs2_in.Close();
0122 dfs2_out.Close();
0123
0124