Example
heat_3d
3D structured heat update and checksum validation.
program main {
int64 n = 24
int64 steps = 12
real64 u[n, n, n]
real64 unew[n, n, n]
int64 i = 0
int64 j = 0
int64 k = 0
int64 step = 0
do parallel i = 0, n - 1 {
do j = 0, n - 1 {
do k = 0, n - 1 {
u[i, j, k] = 0.0
unew[i, j, k] = 0.0
}
}
}
do parallel i = 0, n - 1 {
do j = 0, n - 1 {
u[i, j, 0] = 1.0
u[i, j, n - 1] = 1.0
}
}
do parallel i = 0, n - 1 {
do k = 0, n - 1 {
u[i, 0, k] = 1.0
u[i, n - 1, k] = 1.0
}
}
do j = 0, n - 1 {
do k = 0, n - 1 {
u[0, j, k] = 1.0
u[n - 1, j, k] = 1.0
}
}
do step = 0, steps - 1 {
do parallel i = 1, n - 2 {
do j = 1, n - 2 {
do k = 1, n - 2 {
unew[i, j, k] = (u[i - 1, j, k] + u[i + 1, j, k] + u[i, j - 1, k] + u[i, j + 1, k] + u[i, j, k - 1] + u[i, j, k + 1]) / 6.0
}
}
}
do parallel i = 1, n - 2 {
do j = 1, n - 2 {
do k = 1, n - 2 {
u[i, j, k] = unew[i, j, k]
}
}
}
}
real64 center = u[n / 2, n / 2, n / 2]
real64 checksum = 0.0
do i = 0, n - 1 {
do j = 0, n - 1 {
do k = 0, n - 1 {
checksum = checksum + u[i, j, k]
}
}
}
string summary = "heat_3d center=" + to_string(center) + " checksum=" + to_string(checksum) + "\n"
write_file("/tmp/tgfortran_heat_3d.txt", summary)
print(center, checksum)
}