|
33 | 33 |
|
34 | 34 | """OP2 sequential backend.""" |
35 | 35 |
|
36 | | -import builtins |
37 | 36 | import os |
38 | 37 | from textwrap import dedent |
39 | 38 | from copy import deepcopy as dcopy |
@@ -106,9 +105,9 @@ def c_offset_decl(self): |
106 | 105 | if not map.iterset._extruded: |
107 | 106 | continue |
108 | 107 | for j, m in enumerate(map): |
109 | | - val.append("static const int %s[%d] = { %s };" % (self.c_offset_name(i, j), |
110 | | - m.arity, |
111 | | - ', '.join(builtins.map(str, m.offset)))) |
| 108 | + offset_data = ', '.join(str(o) for o in m.offset) |
| 109 | + val.append("static const int %s[%d] = { %s };" % |
| 110 | + (self.c_offset_name(i, j), m.arity, offset_data)) |
112 | 111 | if len(val) == 0: |
113 | 112 | return "" |
114 | 113 | return "\n".join(val) |
@@ -226,25 +225,28 @@ def c_vec_init(self, is_top, is_facet=False): |
226 | 225 | vec_idx = 0 |
227 | 226 | for i, (m, d) in enumerate(zip(self.map, self.data)): |
228 | 227 | is_top = is_top_init and m.iterset._extruded |
229 | | - offset_str = "%s[%s]" % (self.c_offset_name(i, 0), 'a_0') |
230 | | - val.append("for (int a_0 = 0; a_0 < %(arity)d; a_0++) " |
231 | | - "%(vec_name)s[%(idx)s] = %(data)s" % |
232 | | - {'arity': m.arity, |
| 228 | + idx = "i_0" |
| 229 | + offset_str = "%s[%s]" % (self.c_offset_name(i, 0), idx) |
| 230 | + val.append("for (int %(idx)s = 0; %(idx)s < %(dim)d; %(idx)s++) {\n" |
| 231 | + " %(vec_name)s[%(vec_idx)d + %(idx)s] = %(data)s;\n}" % |
| 232 | + {'dim': m.arity, |
233 | 233 | 'vec_name': self.c_vec_name(), |
234 | | - 'idx': '{} + a_0'.format(vec_idx), |
235 | | - 'data': self.c_ind_data('a_0', i, is_top=is_top, |
| 234 | + 'vec_idx': vec_idx, |
| 235 | + 'idx': idx, |
| 236 | + 'data': self.c_ind_data(idx, i, is_top=is_top, |
236 | 237 | offset=offset_str if is_top else None)}) |
237 | 238 | vec_idx += m.arity |
238 | 239 | if is_facet: |
239 | | - val.append("for (int a_0 = 0; a_0 < %(arity)d; a_0++) " |
240 | | - "%(vec_name)s[%(idx)s] = %(data)s" % |
241 | | - {'arity': m.arity, |
| 240 | + val.append("for (int %(idx)s = 0; %(idx)s < %(dim)d; %(idx)s++) {\n" |
| 241 | + " %(vec_name)s[%(vec_idx)d + %(idx)s] = %(data)s;\n}" % |
| 242 | + {'dim': m.arity, |
242 | 243 | 'vec_name': self.c_vec_name(), |
243 | | - 'idx': '{} + a_0'.format(vec_idx), |
244 | | - 'data': self.c_ind_data('a_0', i, is_top=is_top, |
| 244 | + 'vec_idx': vec_idx, |
| 245 | + 'idx': idx, |
| 246 | + 'data': self.c_ind_data(idx, i, is_top=is_top, |
245 | 247 | offset=offset_str)}) |
246 | 248 | vec_idx += m.arity |
247 | | - return ";\n".join(val) |
| 249 | + return "\n".join(val) |
248 | 250 |
|
249 | 251 | def c_addto(self, i, j, buf_name, tmp_name, tmp_decl, |
250 | 252 | extruded=None, is_facet=False): |
@@ -368,21 +370,24 @@ def c_add_offset(self, is_facet=False): |
368 | 370 | val = [] |
369 | 371 | vec_idx = 0 |
370 | 372 | for i, (m, d) in enumerate(zip(self.map, self.data)): |
371 | | - offset_str = "%s[%s]" % (self.c_offset_name(i, 0), 'a_0') |
372 | | - val.append("for (int a_0 = 0; a_0 < %(arity)d; a_0++) " |
373 | | - "%(name)s[%(j)s] += %(offset)s * %(dim)s;" % |
| 373 | + idx = "i_0" |
| 374 | + offset_str = "%s[%s]" % (self.c_offset_name(i, 0), idx) |
| 375 | + val.append("for (int %(idx)s = 0; %(idx)s < %(arity)d; %(idx)s++) {\n" |
| 376 | + " %(name)s[%(vec_idx)d + %(idx)s] += %(offset)s * %(dim)s;\n}" % |
374 | 377 | {'arity': m.arity, |
375 | 378 | 'name': self.c_vec_name(), |
376 | | - 'j': '{} + a_0'.format(vec_idx), |
| 379 | + 'vec_idx': vec_idx, |
| 380 | + 'idx': idx, |
377 | 381 | 'offset': offset_str, |
378 | 382 | 'dim': d.cdim}) |
379 | 383 | vec_idx += m.arity |
380 | 384 | if is_facet: |
381 | | - val.append("for (int a_0 = 0; a_0 < %(arity)d; a_0++) " |
382 | | - "%(name)s[%(j)s] += %(offset)s * %(dim)s;" % |
| 385 | + val.append("for (int %(idx)s = 0; %(idx)s < %(arity)d; %(idx)s++) {\n" |
| 386 | + " %(name)s[%(vec_idx)d + %(idx)s] += %(offset)s * %(dim)s;\n}" % |
383 | 387 | {'arity': m.arity, |
384 | 388 | 'name': self.c_vec_name(), |
385 | | - 'j': '{} + a_0'.format(vec_idx), |
| 389 | + 'vec_idx': vec_idx, |
| 390 | + 'idx': idx, |
386 | 391 | 'offset': offset_str, |
387 | 392 | 'dim': d.cdim}) |
388 | 393 | vec_idx += m.arity |
@@ -447,22 +452,20 @@ def c_map_init(self, is_top=False, is_facet=False): |
447 | 452 | val = [] |
448 | 453 | for i, (map, dset) in enumerate(zip(as_tuple(self.map, Map), dsets)): |
449 | 454 | for j, (m, d) in enumerate(zip(map, dset)): |
450 | | - offset_str = "%s[%s]" % (self.c_offset_name(i, j), 'a_0') |
451 | | - val.append("for (int a_0 = 0; a_0 < %(arity)d; a_0++) " |
452 | | - "xtr_%(name)s[%(ind)s] = *(%(name)s + i * %(dim)s + %(ind)s)%(off_top)s;" % |
453 | | - {'arity': m.arity, |
454 | | - 'name': self.c_map_name(i, j), |
| 455 | + idx = "i_0" |
| 456 | + offset_str = "%s[%s]" % (self.c_offset_name(i, j), idx) |
| 457 | + val.append("for (int %(idx)s = 0; %(idx)s < %(dim)d; %(idx)s++) {\n" |
| 458 | + " xtr_%(name)s[%(idx)s] = *(%(name)s + i * %(dim)d + %(idx)s)%(off_top)s;\n}" % |
| 459 | + {'name': self.c_map_name(i, j), |
455 | 460 | 'dim': m.arity, |
456 | | - 'ind': 'a_0', |
| 461 | + 'idx': idx, |
457 | 462 | 'off_top': ' + (start_layer - bottom_layer) * '+offset_str if is_top else ''}) |
458 | 463 | if is_facet: |
459 | | - val.append("for (int a_0 = 0; a_0 < %(arity)d; a_0++) " |
460 | | - "xtr_%(name)s[%(ind)s] = *(%(name)s + i * %(dim)s + %(ind_zero)s)%(off_top)s%(off)s;" % |
461 | | - {'arity': m.arity, |
462 | | - 'name': self.c_map_name(i, j), |
| 464 | + val.append("for (int %(idx)s = 0; %(idx)s < %(dim)d; %(idx)s++) {\n" |
| 465 | + " xtr_%(name)s[%(dim)d + %(idx)s] = *(%(name)s + i * %(dim)d + %(idx)s)%(off_top)s%(off)s;\n}" % |
| 466 | + {'name': self.c_map_name(i, j), |
463 | 467 | 'dim': m.arity, |
464 | | - 'ind': '{} + {}'.format('a_0', m.arity), |
465 | | - 'ind_zero': 'a_0', |
| 468 | + 'idx': idx, |
466 | 469 | 'off_top': ' + (start_layer - bottom_layer)' if is_top else '', |
467 | 470 | 'off': ' + ' + offset_str}) |
468 | 471 | return '\n'.join(val)+'\n' |
@@ -585,16 +588,19 @@ def c_add_offset_map(self, is_facet=False): |
585 | 588 | if not map.iterset._extruded: |
586 | 589 | continue |
587 | 590 | for j, (m, d) in enumerate(zip(map, dset)): |
588 | | - offset_str = "%s[%s]" % (self.c_offset_name(i, 0), 'a_0') |
589 | | - val.append("for (int a_0 = 0; a_0 < %(arity)d; a_0++) " |
590 | | - "xtr_%(name)s[a_0] += %(off)s;" % |
| 591 | + idx = "i_0" |
| 592 | + offset_str = "%s[%s]" % (self.c_offset_name(i, 0), idx) |
| 593 | + val.append("for (int %(idx)s = 0; %(idx)s < %(arity)d; %(idx)s++) {\n" |
| 594 | + " xtr_%(name)s[%(idx)s] += %(off)s;\n}" % |
591 | 595 | {'arity': m.arity, |
| 596 | + 'idx': idx, |
592 | 597 | 'name': self.c_map_name(i, j), |
593 | 598 | 'off': offset_str}) |
594 | 599 | if is_facet: |
595 | | - val.append("for (int a_0 = 0; a_0 < %(arity)d; a_0++) " |
596 | | - "xtr_%(name)s[%(arity)d + a_0] += %(off)s;" % |
| 600 | + val.append("for (int %(idx)s = 0; %(idx)s < %(arity)d; %(idx)s++) {\n" |
| 601 | + " xtr_%(name)s[%(arity)d + %(idx)s] += %(off)s;\n}" % |
597 | 602 | {'arity': m.arity, |
| 603 | + 'idx': idx, |
598 | 604 | 'name': self.c_map_name(i, j), |
599 | 605 | 'off': offset_str}) |
600 | 606 | return '\n'.join(val)+'\n' |
@@ -975,6 +981,7 @@ def extrusion_loop(): |
975 | 981 | # Pass in the is_facet flag to mark the case when it's an interior horizontal facet in |
976 | 982 | # an extruded mesh. |
977 | 983 | _wrapper_decs = ';\n'.join([arg.c_wrapper_dec() for arg in args]) |
| 984 | + # Add offset arrays to the wrapper declarations |
978 | 985 | _wrapper_decs += '\n'.join([arg.c_offset_decl() for arg in args]) |
979 | 986 |
|
980 | 987 | _vec_decs = ';\n'.join([arg.c_vec_dec(is_facet=is_facet) for arg in args if arg._is_vec_map]) |
|
0 commit comments