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 |
|