source: CIVL/examples/loop_invariants/Jans_example/invariant_arbitraryblock.c@ 7dad703

1.23 2.0 acw/focus-triggers main test-branch
Last change on this file since 7dad703 was 7dad703, checked in by Ziqing Luo <ziqing@…>, 8 years ago

add new example from Jan
getting rid of simplification code in the old example, still verified

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@4965 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 1.8 KB
Line 
1#include <stdio.h>
2#ifdef _CIVL
3#include <civlc.cvh>
4#endif
5
6#ifdef _CIVL
7$input int ni,nj;
8$input int bi,bj; //TODO: bounds of block sizes ?
9$assume(ni > 1);
10$assume(nj > 1);
11$input double uin[ni][nj];
12#endif
13double u1[ni][nj];
14double u2[ni][nj];
15
16int main(int argc, char** argv) {
17 int i,j,ir,jr,ib,jb;
18
19 /*
20 for(i=0;i<ni;i++) {
21 for(j=0;j<nj;j++) {
22 u1[i][j] = 0;
23 u2[i][j] = 0;
24 }
25 }
26
27 // straightforward loop nest
28 for(i=1;i<ni-1;i++) {
29 for(j=1;j<nj-1;j++) {
30 u1[i][j] = uin[i][j]*uin[i][j];
31 }
32 }
33 */
34
35
36
37 // blocked loop nest
38 for(i=1;i<ni-bi;i=i+bi) {
39 for(j=1;j<nj-bj;j=j+bj) {
40 for(ib=0;ib<bi;ib++) {
41 for(jb=0;jb<bj;jb++) {
42 u2[i+ib][j+jb] = uin[i+ib][j+jb]*uin[i+ib][j+jb];
43 }
44 }
45 }
46 }
47 // remainder i
48 for(ir=i;ir<ni-1;ir=ir++) {
49 for(jr=1;jr<nj-bj;jr=jr++) {
50 for(jb=0;jb<bj;jb++) {
51 u2[ir][jr+jb] = uin[ir][jr+jb]*uin[ir][jr+jb];
52 }
53 }
54 }
55 // remainder j
56 for(jr=j;jr<nj-1;jr=jr++) {
57 for(ir=1;ir<ni-bi;ir=ir++) {
58 for(ib=0;ib<bi;ib++) {
59 u2[ir+ib][jr] = uin[ir+ib][jr]*uin[ir+ib][jr];
60 }
61 }
62 }
63 // remainder ij
64 for(ir=i;ir<ni-1;ir=ir++) {
65 for(jr=j;jr<nj-1;jr=jr++) {
66 u2[ir][jr] = uin[ir][jr]*uin[ir][jr];
67 }
68 }
69
70 // print
71 //printf("uout1:%s","\n");
72 //for(i=0;i<ni;i++) {
73 // for(j=0;j<nj;j++) {
74 // printf("%f ",u1[i][j]);
75 // }
76 // printf("\n");
77 //}
78 //printf("uout2:%s","\n");
79 //for(i=0;i<ni;i++) {
80 // for(j=0;j<nj;j++) {
81 // printf("%f ",u2[i][j]);
82 // }
83 // printf("\n");
84 //}
85
86 // assert equality of u1 and u2
87 for(i=0;i<ni;i++) {
88 for(j=0;j<nj;j++) {
89 $assert(u1[i][j] == u2[i][j]);
90 }
91 }
92}
Note: See TracBrowser for help on using the repository browser.