| 1 |
% Load six facet mesh *.mitgrid files |
| 2 |
fn_in='llc90x90x360_lonshift'; |
| 3 |
fg=load_mitgrid_ct('.',fn_in,90,90,360); |
| 4 |
fn_out='llc90x90x360_lonshift_correctedgevals'; |
| 5 |
|
| 6 |
% Now fix up facet edges to be correct mesh lengths |
| 7 |
mg=fg; |
| 8 |
a6=0.; |
| 9 |
% o east-west face lhs |
| 10 |
% dxV |
| 11 |
mg(1).dxV( 1,1:end)=fg(1).dxV( 1,1:end)+fg(5).dyU(end:-1:1, end)'; |
| 12 |
mg(1).dxV(end,1:end)=fg(1).dxV(end,1:end)+fg(2).dxV( 1,1:end) ; |
| 13 |
mg(2).dxV( 1,1:end)=fg(2).dxV( 1,1:end)+fg(1).dxV( end,1:end) ; |
| 14 |
mg(2).dxV(end,1:end)=fg(2).dxV(end,1:end)+fg(4).dyU(end:-1:1, 1)'; |
| 15 |
mg(3).dxV( 1,1:end)=fg(3).dxV( 1,1:end)+fg(1).dyU(end:-1:1, 1)'; |
| 16 |
mg(3).dxV(end,1:end)=fg(3).dxV(end,1:end)+fg(4).dxV( end,1:end) ; |
| 17 |
mg(4).dxV( 1,1:end)=fg(4).dxV( 1,1:end)+fg(3).dxV( end,1:end) ; |
| 18 |
mg(4).dxV(end,1:end)=fg(4).dxV(end,1:end)+fg(6).dyU(end:-1:1, 1)'*a6; |
| 19 |
mg(5).dxV( 1,1:end)=fg(5).dxV( 1,1:end)+fg(3).dyU(end:-1:1, end)'; |
| 20 |
mg(5).dxV(end,1:end)=fg(5).dxV(end,1:end)+fg(6).dxV( 1,1:end)*a6 ; |
| 21 |
mg(6).dxV( 1,1:end)=fg(6).dxV( 1,1:end)+fg(5).dxV( end,1:end) ; |
| 22 |
mg(6).dxV(end,1:end)=fg(6).dxV(end,1:end)+fg(2).dyU(end:-1:1, 1)'; |
| 23 |
% dxC |
| 24 |
mg(1).dxC( 1,1:end-1)=fg(1).dxC( 1,1:end-1)+fg(5).dyC(end-1:-1:1, end)'; |
| 25 |
mg(1).dxC(end,1:end-1)=fg(1).dxC(end,1:end-1)+fg(2).dxC( 1,1:end-1) ; |
| 26 |
mg(2).dxC( 1,1:end-1)=fg(2).dxC( 1,1:end-1)+fg(1).dxC( end,1:end-1) ; |
| 27 |
mg(2).dxC(end,1:end-1)=fg(2).dxC(end,1:end-1)+fg(4).dyC(end-1:-1:1, 1)'; |
| 28 |
mg(3).dxC( 1,1:end-1)=fg(3).dxC( 1,1:end-1)+fg(1).dyC(end-1:-1:1, 1)'; |
| 29 |
mg(3).dxC(end,1:end-1)=fg(3).dxC(end,1:end-1)+fg(4).dxC( end,1:end-1) ; |
| 30 |
mg(4).dxC( 1,1:end-1)=fg(4).dxC( 1,1:end-1)+fg(3).dxC( end,1:end-1) ; |
| 31 |
mg(4).dxC(end,1:end-1)=fg(4).dxC(end,1:end-1)+fg(6).dyC(end-1:-1:1, 1)'*a6; |
| 32 |
mg(5).dxC( 1,1:end-1)=fg(5).dxC( 1,1:end-1)+fg(3).dyC(end-1:-1:1, end)'; |
| 33 |
mg(5).dxC(end,1:end-1)=fg(5).dxC(end,1:end-1)+fg(6).dxC( 1,1:end-1)*a6 ; |
| 34 |
mg(6).dxC( 1,1:end-1)=fg(6).dxC( 1,1:end-1)+fg(5).dxC( end,1:end-1) ; |
| 35 |
mg(6).dxC(end,1:end-1)=fg(6).dxC(end,1:end-1)+fg(2).dyC(end-1:-1:1, 1)'; |
| 36 |
% rAw |
| 37 |
mg(1).rAw( 1,1:end-1)=fg(1).rAw( 1,1:end-1)+fg(5).rAs(end-1:-1:1, end)'; |
| 38 |
mg(1).rAw(end,1:end-1)=fg(1).rAw(end,1:end-1)+fg(2).rAw( 1,1:end-1) ; |
| 39 |
mg(2).rAw( 1,1:end-1)=fg(2).rAw( 1,1:end-1)+fg(1).rAw( end,1:end-1) ; |
| 40 |
mg(2).rAw(end,1:end-1)=fg(2).rAw(end,1:end-1)+fg(4).rAs(end-1:-1:1, 1)'; |
| 41 |
mg(3).rAw( 1,1:end-1)=fg(3).rAw( 1,1:end-1)+fg(1).rAs(end-1:-1:1, 1)'; |
| 42 |
mg(3).rAw(end,1:end-1)=fg(3).rAw(end,1:end-1)+fg(4).rAw( end,1:end-1) ; |
| 43 |
mg(4).rAw( 1,1:end-1)=fg(4).rAw( 1,1:end-1)+fg(3).rAw( end,1:end-1) ; |
| 44 |
mg(4).rAw(end,1:end-1)=fg(4).rAw(end,1:end-1)+fg(6).rAs(end-1:-1:1, 1)'*a6; |
| 45 |
mg(5).rAw( 1,1:end-1)=fg(5).rAw( 1,1:end-1)+fg(3).rAs(end-1:-1:1, end)'; |
| 46 |
mg(5).rAw(end,1:end-1)=fg(5).rAw(end,1:end-1)+fg(6).rAw( 1,1:end-1)*a6 ; |
| 47 |
mg(6).rAw( 1,1:end-1)=fg(6).rAw( 1,1:end-1)+fg(5).rAw( end,1:end-1) ; |
| 48 |
mg(6).rAw(end,1:end-1)=fg(6).rAw(end,1:end-1)+fg(2).rAs(end-1:-1:1, 1)'; |
| 49 |
% rAz (west-east faces only, not corners or north-south faces) |
| 50 |
mg(1).rAz( 1,1:end)=fg(1).rAz( 1,1:end)+fg(5).rAz(end:-1:1, end)'; |
| 51 |
mg(1).rAz(end,1:end)=fg(1).rAz(end,1:end)+fg(2).rAz( 1,1:end) ; |
| 52 |
mg(2).rAz( 1,1:end)=fg(2).rAz( 1,1:end)+fg(1).rAz( end,1:end) ; |
| 53 |
mg(2).rAz(end,1:end)=fg(2).rAz(end,1:end)+fg(4).rAz(end:-1:1, 1)'; |
| 54 |
mg(3).rAz( 1,1:end)=fg(3).rAz( 1,1:end)+fg(1).rAz(end:-1:1, 1)'; |
| 55 |
mg(3).rAz(end,1:end)=fg(3).rAz(end,1:end)+fg(4).rAz( end,1:end) ; |
| 56 |
mg(4).rAz( 1,1:end)=fg(4).rAz( 1,1:end)+fg(3).rAz( end,1:end) ; |
| 57 |
mg(4).rAz(end,1:end)=fg(4).rAz(end,1:end)+fg(6).rAz(end:-1:1, 1)'*a6; |
| 58 |
mg(5).rAz( 1,1:end)=fg(5).rAz( 1,1:end)+fg(3).rAz(end:-1:1, end)'; |
| 59 |
mg(5).rAz(end,1:end)=fg(5).rAz(end,1:end)+fg(6).rAz( 1,1:end)*a6 ; |
| 60 |
mg(6).rAz( 1,1:end)=fg(6).rAz( 1,1:end)+fg(5).rAz( end,1:end) ; |
| 61 |
mg(6).rAz(end,1:end)=fg(6).rAz(end,1:end)+fg(2).rAz(end:-1:1, 1)'; |
| 62 |
% o north-south face lhs |
| 63 |
% dyU |
| 64 |
mg(1).dyU(1:end,end)=fg(1).dyU(1:end,end)+fg(3).dxV( 1,end:-1:1)'; |
| 65 |
mg(1).dyU(1:end, 1)=fg(1).dyU(1:end, 1)+fg(6).dyU(1:end, end)*a6; |
| 66 |
mg(2).dyU(1:end,end)=fg(2).dyU(1:end,end)+fg(3).dyU(1:end, 1); |
| 67 |
mg(2).dyU(1:end, 1)=fg(2).dyU(1:end, 1)+fg(6).dxV( end,end:-1:1)'*a6; |
| 68 |
mg(3).dyU(1:end,end)=fg(3).dyU(1:end,end)+fg(5).dxV( 1,end:-1:1)'; |
| 69 |
mg(3).dyU(1:end, 1)=fg(3).dyU(1:end, 1)+fg(2).dyU(1:end, end); |
| 70 |
mg(4).dyU(1:end,end)=fg(4).dyU(1:end,end)+fg(5).dyU(1:end, 1); |
| 71 |
mg(4).dyU(1:end, 1)=fg(4).dyU(1:end, 1)+fg(2).dxV( end,end:-1:1)'; |
| 72 |
mg(5).dyU(1:end,end)=fg(5).dyU(1:end,end)+fg(1).dxV( 1,end:-1:1)'; |
| 73 |
mg(5).dyU(1:end, 1)=fg(5).dyU(1:end, 1)+fg(4).dyU(1:end, end); |
| 74 |
mg(6).dyU(1:end,end)=fg(6).dyU(1:end,end)+fg(1).dyU(1:end, 1); |
| 75 |
mg(6).dyU(1:end, 1)=fg(6).dyU(1:end, 1)+fg(4).dxV( end,end:-1:1)'; |
| 76 |
% dyC |
| 77 |
mg(1).dyC(1:end-1,end)=fg(1).dyC(1:end-1,end)+fg(3).dxC( 1,end-1:-1:1)'; |
| 78 |
mg(1).dyC(1:end-1, 1)=fg(1).dyC(1:end-1, 1)+fg(6).dyC(1:end-1, end)*a6; |
| 79 |
mg(2).dyC(1:end-1,end)=fg(2).dyC(1:end-1,end)+fg(3).dyC(1:end-1, 1); |
| 80 |
mg(2).dyC(1:end-1, 1)=fg(2).dyC(1:end-1, 1)+fg(6).dxC( end,end-1:-1:1)'*a6; |
| 81 |
mg(3).dyC(1:end-1,end)=fg(3).dyC(1:end-1,end)+fg(5).dxC( 1,end-1:-1:1)'; |
| 82 |
mg(3).dyC(1:end-1, 1)=fg(3).dyC(1:end-1, 1)+fg(2).dyC(1:end-1, end); |
| 83 |
mg(4).dyC(1:end-1,end)=fg(4).dyC(1:end-1,end)+fg(5).dyC(1:end-1, 1); |
| 84 |
mg(4).dyC(1:end-1, 1)=fg(4).dyC(1:end-1, 1)+fg(2).dxC( end,end-1:-1:1)'; |
| 85 |
mg(5).dyC(1:end-1,end)=fg(5).dyC(1:end-1,end)+fg(1).dxC( 1,end-1:-1:1)'; |
| 86 |
mg(5).dyC(1:end-1, 1)=fg(5).dyC(1:end-1, 1)+fg(4).dyC(1:end-1, end); |
| 87 |
mg(6).dyC(1:end-1,end)=fg(6).dyC(1:end-1,end)+fg(1).dyC(1:end-1, 1); |
| 88 |
mg(6).dyC(1:end-1, 1)=fg(6).dyC(1:end-1, 1)+fg(4).dxC( end,end-1:-1:1)'; |
| 89 |
% rAs |
| 90 |
mg(1).rAs(1:end-1,end)=fg(1).rAs(1:end-1,end)+fg(3).rAw( 1,end-1:-1:1)'; |
| 91 |
mg(1).rAs(1:end-1, 1)=fg(1).rAs(1:end-1, 1)+fg(6).rAs(1:end-1, end)*a6; |
| 92 |
mg(2).rAs(1:end-1,end)=fg(2).rAs(1:end-1,end)+fg(3).rAs(1:end-1, 1); |
| 93 |
mg(2).rAs(1:end-1, 1)=fg(2).rAs(1:end-1, 1)+fg(6).rAw( end,end-1:-1:1)'*a6; |
| 94 |
mg(3).rAs(1:end-1,end)=fg(3).rAs(1:end-1,end)+fg(5).rAw( 1,end-1:-1:1)'; |
| 95 |
mg(3).rAs(1:end-1, 1)=fg(3).rAs(1:end-1, 1)+fg(2).rAs(1:end-1, end); |
| 96 |
mg(4).rAs(1:end-1,end)=fg(4).rAs(1:end-1,end)+fg(5).rAs(1:end-1, 1); |
| 97 |
mg(4).rAs(1:end-1, 1)=fg(4).rAs(1:end-1, 1)+fg(2).rAw( end,end-1:-1:1)'; |
| 98 |
mg(5).rAs(1:end-1,end)=fg(5).rAs(1:end-1,end)+fg(1).rAw( 1,end-1:-1:1)'; |
| 99 |
mg(5).rAs(1:end-1, 1)=fg(5).rAs(1:end-1, 1)+fg(4).rAs(1:end-1, end); |
| 100 |
mg(6).rAs(1:end-1,end)=fg(6).rAs(1:end-1,end)+fg(1).rAs(1:end-1, 1); |
| 101 |
mg(6).rAs(1:end-1, 1)=fg(6).rAs(1:end-1, 1)+fg(4).rAw( end,end-1:-1:1)'; |
| 102 |
% rAz |
| 103 |
mg(1).rAz(1:end,end)=fg(1).rAz(1:end,end)+fg(3).rAz( 1,end:-1:1)'; |
| 104 |
mg(1).rAz(1:end, 1)=fg(1).rAz(1:end, 1)+fg(6).rAz(1:end, end)*a6; |
| 105 |
mg(2).rAz(1:end,end)=fg(2).rAz(1:end,end)+fg(3).rAz(1:end, 1); |
| 106 |
mg(2).rAz(1:end, 1)=fg(2).rAz(1:end, 1)+fg(6).rAz( end,end:-1:1)'*a6; |
| 107 |
mg(3).rAz(1:end,end)=fg(3).rAz(1:end,end)+fg(5).rAz( 1,end:-1:1)'; |
| 108 |
mg(3).rAz(1:end, 1)=fg(3).rAz(1:end, 1)+fg(2).rAz(1:end, end); |
| 109 |
mg(4).rAz(1:end,end)=fg(4).rAz(1:end,end)+fg(5).rAz(1:end, 1); |
| 110 |
mg(4).rAz(1:end, 1)=fg(4).rAz(1:end, 1)+fg(2).rAz( end,end:-1:1)'; |
| 111 |
mg(5).rAz(1:end,end)=fg(5).rAz(1:end,end)+fg(1).rAz( 1,end:-1:1)'; |
| 112 |
mg(5).rAz(1:end, 1)=fg(5).rAz(1:end, 1)+fg(4).rAz(1:end, end); |
| 113 |
mg(6).rAz(1:end,end)=fg(6).rAz(1:end,end)+fg(1).rAz(1:end, 1); |
| 114 |
mg(6).rAz(1:end, 1)=fg(6).rAz(1:end, 1)+fg(4).rAz( end,end:-1:1)'; |
| 115 |
% o corner lhs |
| 116 |
mg(1).rAz(1 , 1)=fg(1).rAz(1 , 1)+fg(5).rAz(end,end)+fg(6).rAz( 1,end)*a6; |
| 117 |
mg(1).rAz(end, 1)=fg(1).rAz(end, 1)+fg(2).rAz( 1, 1)+fg(6).rAz(end,end)*a6; |
| 118 |
mg(1).rAz(1 ,end)=fg(1).rAz(1 ,end)+fg(3).rAz( 1,end)+fg(5).rAz( 1,end); |
| 119 |
mg(1).rAz(end,end)=fg(1).rAz(end,end)+fg(2).rAz( 1,end)+fg(3).rAz( 1, 1); |
| 120 |
mg(2).rAz(1 , 1)=fg(2).rAz(1 , 1)+fg(1).rAz( 1,end)+fg(6).rAz(end,end)*a6; |
| 121 |
mg(2).rAz(end, 1)=fg(2).rAz(end, 1)+fg(4).rAz(end, 1)+fg(6).rAz(end, 1)*a6; |
| 122 |
mg(2).rAz(1 ,end)=fg(2).rAz(1 ,end)+fg(1).rAz(end,end)+fg(3).rAz( 1, 1); |
| 123 |
mg(2).rAz(end,end)=fg(2).rAz(end,end)+fg(3).rAz(end, 1)+fg(4).rAz( 1, 1); |
| 124 |
mg(3).rAz(1 , 1)=fg(3).rAz(1 , 1)+fg(1).rAz(end,end)+fg(2).rAz( 1,end); |
| 125 |
mg(3).rAz(end, 1)=fg(3).rAz(end, 1)+fg(2).rAz(end,end)+fg(4).rAz( 1, 1); |
| 126 |
mg(3).rAz(1 ,end)=fg(3).rAz(1 ,end)+fg(1).rAz( 1,end)+fg(5).rAz( 1,end); |
| 127 |
mg(3).rAz(end,end)=fg(3).rAz(end,end)+fg(4).rAz( 1,end)+fg(5).rAz(end,end); |
| 128 |
mg(4).rAz(1 , 1)=fg(4).rAz(1 , 1)+fg(2).rAz(end,end)+fg(3).rAz(end, 1); |
| 129 |
mg(4).rAz(end, 1)=fg(4).rAz(end, 1)+fg(2).rAz(end, 1)+fg(6).rAz(end, 1)*a6; |
| 130 |
mg(4).rAz(1 ,end)=fg(4).rAz(1 ,end)+fg(3).rAz(end,end)+fg(5).rAz( 1, 1); |
| 131 |
mg(4).rAz(end,end)=fg(4).rAz(end,end)+fg(5).rAz(end, 1)+fg(6).rAz( 1, 1)*a6; |
| 132 |
mg(5).rAz(1 , 1)=fg(5).rAz(1 , 1)+fg(3).rAz(end,end)+fg(4).rAz( 1,end); |
| 133 |
mg(5).rAz(end, 1)=fg(5).rAz(end, 1)+fg(4).rAz(end,end)+fg(6).rAz( 1, 1); |
| 134 |
mg(5).rAz(1 ,end)=fg(5).rAz(1 ,end)+fg(1).rAz( 1,end)+fg(3).rAz( 1,end); |
| 135 |
mg(5).rAz(end,end)=fg(5).rAz(end,end)+fg(1).rAz( 1, 1)+fg(6).rAz( 1,end)*a6; |
| 136 |
mg(6).rAz(1 , 1)=fg(6).rAz(1 , 1)+fg(4).rAz(end,end)+fg(5).rAz( 1,end); |
| 137 |
mg(6).rAz(end, 1)=fg(6).rAz(end, 1)+fg(2).rAz(end, 1)+fg(4).rAz(end, 1); |
| 138 |
mg(6).rAz(1 ,end)=fg(6).rAz(1 ,end)+fg(1).rAz( 1, 1)+fg(5).rAz(end,end); |
| 139 |
mg(6).rAz(end,end)=fg(6).rAz(end,end)+fg(1).rAz(end, 1)+fg(2).rAz( 1, 1); |
| 140 |
|
| 141 |
% mg=facets_to_mesh(fg); |
| 142 |
|
| 143 |
clf |
| 144 |
spnum=[9 10 6 7 3 4 1]; |
| 145 |
estr='local'; |
| 146 |
for i=1:6 |
| 147 |
subplot(3,4,spnum(i));imagesc(mg(i).xG');axis xy;colorbar |
| 148 |
label_edges(i,mg,estr); |
| 149 |
end |
| 150 |
|
| 151 |
% Set xg and yg on edges of face 6 to their counterparts on faces |
| 152 |
% 5, 4, 2, 1. |
| 153 |
% This avoids the halo exchange causing problems by making xg and yg wrong in |
| 154 |
% 5 and 4 when they are output in mnc. |
| 155 |
mg(6).xG( 1, :)=mg(5).xG( end, :); |
| 156 |
mg(6).xG( :, 1)=mg(4).xG( end,end:-1:1); |
| 157 |
mg(6).xG(end, :)=mg(2).xG(end:-1:1, 1); |
| 158 |
mg(6).xG( :,end)=mg(1).xG( :, 1); |
| 159 |
mg(6).yG( 1, :)=mg(5).yG( end, :); |
| 160 |
mg(6).yG( :, 1)=mg(4).yG( end,end:-1:1); |
| 161 |
mg(6).yG(end, :)=mg(2).yG(end:-1:1, 1); |
| 162 |
mg(6).yG( :,end)=mg(1).yG( :, 1); |
| 163 |
|
| 164 |
% Now write out new mesh files with correct values at mesh points along facet edge |
| 165 |
% (I hope). |
| 166 |
for i=1:6 |
| 167 |
fn=sprintf('%s_%d.mitgrid',fn_out,i); |
| 168 |
fid=fopen(fn,'w','ieee-be'); |
| 169 |
fwrite(fid,mg(i).xC,'float64'); |
| 170 |
fwrite(fid,mg(i).yC,'float64'); |
| 171 |
fwrite(fid,mg(i).dxF,'float64'); |
| 172 |
fwrite(fid,mg(i).dyF,'float64'); |
| 173 |
fwrite(fid,mg(i).rA,'float64'); |
| 174 |
fwrite(fid,mg(i).xG,'float64'); |
| 175 |
fwrite(fid,mg(i).yG,'float64'); |
| 176 |
fwrite(fid,mg(i).dxV,'float64'); |
| 177 |
fwrite(fid,mg(i).dyU,'float64'); |
| 178 |
fwrite(fid,mg(i).rAz,'float64'); |
| 179 |
fwrite(fid,mg(i).dxC,'float64'); |
| 180 |
fwrite(fid,mg(i).dyC,'float64'); |
| 181 |
fwrite(fid,mg(i).rAw,'float64'); |
| 182 |
fwrite(fid,mg(i).rAs,'float64'); |
| 183 |
fwrite(fid,mg(i).dxG,'float64'); |
| 184 |
fwrite(fid,mg(i).dyG,'float64'); |
| 185 |
fwrite(fid,mg(i).AngleCS,'float64'); |
| 186 |
fwrite(fid,mg(i).AngleSN,'float64'); |
| 187 |
fclose(fid); |
| 188 |
end |
| 189 |
|
| 190 |
|