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 + -
显示快捷键?