test4.c

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

C
74
字号

//   real u(10)
// 
//   !hpf$ distribute u (block) onto p
//   !hpf$ processors p (4)
// 
//   integer i
// 
//   do i = 1, 10
//     if(i .eq. 1 .or. i .eq. 10) then
//       u(i) = 1.0
//     else
//       u(i) = 0.0
//     endif
//   enddo
// 
//   do n = 1, 5
//     u(2 : 9) = 0.5 * (u(1 : 8) + u(3 : 10))
//     print *, "iteration =", n
//     do i = 1, 10
//       print "(i2, f7.3)", i, u(i)
//     enddo
//   enddo
// 
// end


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


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

  Procs1 p(4) ;

  on(p) {
    Range x(10, p.dim(0), BLK) ;
    Array1<float> u(x) ;

    where(x) {
      if(x == 0 || x == 9)
	u(x) = 1.0 ;
      else
        u(x) = 0.0 ;
    } erewh(x) ;

    Range xc = x.subrng(8, 1, 1) ;

    Array1<float> uL = u.sect(x.subrng(8, 0)) ;  // uL ~ u (1 : 8)
    Array1<float> uR = u.sect(x.subrng(8, 2)) ;  // uR ~ u (3 : 10) 

    Array1<float> tmp1(xc) ;
    Array1<float> tmp2(xc) ; 

    for(int n = 1 ; n <= 5 ; n++) {
      remap(tmp1, uL) ;
      remap(tmp2, uR) ;

      where(xc)
	u(xc) = 0.5 * (tmp1(xc) + tmp2(xc)) ;
      erewh(xc) ;

      gprintf("iteration = %d\n", n) ;
      aprintf("%2R0%7.3f\n", u) ;
    }
  } no(p) ;

  AdlibFinalize() ;
}


⌨️ 快捷键说明

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