36{
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
121
122
123
124
125
126
127
130 VM->
mp = M; VM->
imb1 = IMB1; VM->
mb = MB; VM->
upp = MB - 1;
132 VM->
nq = N; VM->
inb1 = INB1; VM->
nb = NB; VM->
low = 1 - NB;
135
136 if( ( M <= 0 ) || ( N <= 0 ) )
137 {
138
139
140
141
143 VM->
iupp = ( MRROW ? MB - 1 : ( IMB1 > 0 ? IMB1 - 1 : 0 ) );
145 VM->
ilow = ( MRCOL ? 1 - NB : ( INB1 > 0 ? 1 - INB1 : 0 ) );
147 ( VM->
iupp - VM->
upp + MRROW * MB );
148 return;
149 }
150
151 if( MRROW )
152 {
153
154
155
156
157 VM->
lcmt00 -= IMB1 - MB + MRROW * MB;
159 VM->
mblks = ( M - 1 ) / MB + 1;
161 VM->
lmbloc = M - ( M / MB ) * MB;
163
164 if( MRCOL )
165 {
166
167
168
169
172 VM->
lcmt00 += INB1 - NB + MRCOL * NB;
173 VM->
nblks = ( N - 1 ) / NB + 1;
174 VM->
lnbloc = N - ( N / NB ) * NB;
176 }
177 else
178 {
179
180
181
182
185 tmp1 = N - INB1;
186 if( tmp1 )
187 {
188
189
190
191
192 VM->
nblks = ( tmp1 - 1 ) / NB + 2;
193 VM->
lnbloc = tmp1 - ( tmp1 / NB ) * NB;
195 }
196 else
197 {
198
199
200
203 }
204 }
205 }
206 else
207 {
208
209
210
211
214 tmp1 = M - IMB1;
215 if( tmp1 )
216 {
217
218
219
220
221 VM->
mblks = ( tmp1 - 1 ) / MB + 2;
222 VM->
lmbloc = tmp1 - ( tmp1 / MB ) * MB;
224 }
225 else
226 {
227
228
229
232 }
233 if( MRCOL )
234 {
235
236
237
238
241 VM->
lcmt00 += INB1 - NB + MRCOL * NB;
242 VM->
nblks = ( N - 1 ) / NB + 1;
243 VM->
lnbloc = N - ( N / NB ) * NB;
245 }
246 else
247 {
248
249
250
251
254 tmp1 = N - INB1;
255 if( tmp1 )
256 {
257
258
259
260
261 VM->
nblks = ( tmp1 - 1 ) / NB + 2;
262 VM->
lnbloc = tmp1 - ( tmp1 / NB ) * NB;
264 }
265 else
266 {
267
268
269
272 }
273 }
274 }
275
276
277
278}