new file: readslice.R
[wrf-fire-matlab.git] / fuel_left / rotate_cell.m
blob2af0c5f6f0dddbaad822872e531aafd29233d5e3
1 function [v,u] = rotate_cell(uIn)
2 % The function rotates and the flips over the off-diagaonal a 2x2 cell so that the
3 % largest value is in the lower left corner and largest valu on the
4 % diagonal is on the upper left corner.
5 % Usage:
6 % v = rotate_cell(uIn) will rotate permute the rows of matrix Uin.
7 % [v,u] = rotate_cell(~,n) will generate a nx4 matrix with random
8 % perumations of the row [1 2 3 4] and them permute them to correct order.
9 % Used for diagnostics.
10 % Inputs:
11 %    uIn - nx4 matrix whose rows will be permuted. Passing an integer as
12 %    uIn will create testing values with size uIn x 4
13 % Outputs:
14 %    v - matrix with rows to be permuted
15 %    u - optional matrix with created rows or original matrix.
18 % square grid with
19 %       t01 ----- t11
20 %        |         |
21 %        |         |
22 %       t00 ----- t10
24 % Optionally create matrix with rows [t00 t01 t10 t11]
25 % as perumatations of [4 3 2 1]
26 if length(uIn) == 1
27     n = uIn;
28     u = zeros(uIn,4);
29     for i = 1:n
30         u(i,:) = randperm(4);
31     end
32     v = u;
33 else
34     v = uIn;
35     u = uIn;
36     [n,~] = size(v);
37 end
39 %rearrange so maximum value is in the first position, always.
40 %then put largest of diagonals in upper left.
41 for i = 1:n
42     %find location of largest element
43     [~,idx] = max(v(i,:));
44     
45     %temp row vector
46     vt = v(i,:);
47     %rotate to put largest first
48     if idx ~= 1
49         if idx == 2
50             vt = vt([2 4 1 3]);
51         elseif idx == 3
52             vt = vt([3 1 4 2]);
53         elseif idx == 4
54             vt = vt([4 1 2 3]);
55         end
56         
57     end
58     %swap the diagonals to put largest in second place
59     if vt(3) > vt(2)
60         %fprintf('Corner swap, i = %d \n',i)
61         vt = vt([1 3 2 4]);
62         %vt
63     end
65     %u(i,:)
66     %v(i,:)
67     v(i,:) = vt;
68 end % for
70 end % function
72