test5.c

来自「shpf 1.9一个并行编译器」· C语言 代码 · 共 94 行

C
94
字号

//   integer n
//   parameter(n = 8)
// 
//   real u(n, n)
// 
//   !hpf$ distribute u (block, block) onto p
//   !hpf$ processors p (2, 2)
// 
//   integer i, j
//   integer iter
// 
//   do i = 1, n
//     do j = 1, n
//       if(i == 1 .or. i == n .or. j == 1 .or. j == n) then
//         u(i, j) = 1.0
//       else
//         u(i, j) = 0.0
//       endif
//     enddo
//   enddo
// 
//   do iter = 1, 5
//     u(2 : n - 1, 2 : n - 1) = &
//                  0.25 * (u(2 : n - 1, 1 : n - 2) + u(2 : n - 1, 3 : n) + &
//                          u(1 : n - 2, 2 : n - 1) + u(3 : n, 2 : n - 1))
//     print *, "iteration =", iter
//     do i = 2, n - 1
//       print "(10f7.3)", u(i, 2 : n - 1)
//     enddo
//   enddo
// 
// end


#include <stdio.h>
#include "ad++.h"
#include "admacros.h"


const int n = 8 ;

void main(int argc, char* argv[]) {
  AdlibInit(argc, argv) ;

  Procs2 p(2, 2) ;

  on(p) {
    Range x(n, p.dim(0), BLK) ;
    Range y(n, p.dim(1), BLK) ;
    Array2<float> u(x, y) ;

    where(x) {
      where(y) {
	if(x == 0 || x == n - 1 || y == 0 || y == n - 1)
	  u(x, y) = 1.0 ;
	else
	  u(x, y) = 0.0 ;
      } erewh(y) ;
    } erewh(x) ;

    Range xc = x.subrng(n - 2, 1) ;
    Range yc = y.subrng(n - 2, 1) ;

    Array2<float> uLC = u.sect(x.subrng(n - 2, 0), yc) ;
    Array2<float> uRC = u.sect(x.subrng(n - 2, 2), yc) ;
    Array2<float> uCL = u.sect(xc, y.subrng(n - 2, 0)) ;
    Array2<float> uCR = u.sect(xc, y.subrng(n - 2, 2)) ;

    Array2<float> tmp1(xc, yc), tmp2(xc, yc), tmp3(xc, yc), tmp4(xc, yc) ;

    for(int iter = 1 ; iter <= 5 ; iter++) {
      remap(tmp1, uLC) ;
      remap(tmp2, uRC) ;
      remap(tmp3, uCL) ;
      remap(tmp4, uCR) ;

      where(xc) {
	where(yc) {
	  u(xc, yc) = 0.25 * (tmp1(xc, yc) + tmp2(xc, yc) +
		              tmp3(xc, yc) + tmp4(xc, yc)) ;
	} erewh(yc) ;
      } erewh(xc) ;

      gprintf("iteration = %d\n", iter) ;
      aprintf("%7.3f%*N", u, n) ;
    }
  } no(p) ;

  AdlibFinalize() ;
}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?