Files
spbt/x_solve_sp.for
2025-05-06 22:04:43 +03:00

334 lines
14 KiB
Fortran

! *** generated by SAPFOR with version 2415 and build date: May 4 2025 14:48:40
! *** Enabled options ***:
! *** maximum shadow width is 50 percent
! *** generated by SAPFOR
!---------------------------------------------------------------------
!---------------------------------------------------------------------
subroutine x_solve_sp ()
include 'header_sp.h'
integer :: i,j,k,i1,i2,m,m1
double precision :: ru1,fac1,fac2,rhs__(5,0:2),t1,t2
double precision :: lhs__(5,0:2),lhsm__(5,0:2),lhsp__(5,0:2)
!---------------------------------------------------------------------
!---------------------------------------------------------------------
!$SPF PARALLEL_REG r0
!$SPF ANALYSIS(PRIVATE(LHS__,LHSP__,LHSM__,RHS__))
! DVM$ PARALLEL (K,J) ON U(*,*,J,K), CUDA_BLOCK (32,4),PRIVATE (M,I,RU1,I
! DVM$&1,I2,FAC1,FAC2,LHS__,LHSP__,LHSM__,RHS__,T1,T2)
! DVM$ REGION LOCAL (LHS)
do k = 1,nz2
do j = 1,ny2
do i = 0,problem_size - 1
if (i .eq. 0) then
lhs__(1,0) = 0.0d0
lhsp__(1,0) = 0.0d0
lhsm__(1,0) = 0.0d0
lhs__(2,0) = 0.0d0
lhsp__(2,0) = 0.0d0
lhsm__(2,0) = 0.0d0
lhs__(3,0) = 1.0d0
lhsp__(3,0) = 1.0d0
lhsm__(3,0) = 1.0d0
lhs__(4,0) = 0.0d0
lhsp__(4,0) = 0.0d0
lhsm__(4,0) = 0.0d0
lhs__(5,0) = 0.0d0
lhsp__(5,0) = 0.0d0
lhsm__(5,0) = 0.0d0
lhs__(1,1) = 0.0d0
ru1 = c3c4 * 1.0d0 / u(1,1 - 1,j,k)
ru1 = dmax1 (dx2 + con43 * ru1,dx5 + c1c5 * ru1,dxmax
&+ ru1,dx1)
lhs__(2,1) = (-(dttx2)) * us(1 - 1,j,k) - dttx1 * ru1
ru1 = c3c4 * 1.0d0 / u(1,1,j,k)
ru1 = dmax1 (dx2 + con43 * ru1,dx5 + c1c5 * ru1,dxmax
&+ ru1,dx1)
lhs__(3,1) = 1.0d0 + c2dttx1 * ru1
ru1 = c3c4 * 1.0d0 / u(1,1 + 1,j,k)
ru1 = dmax1 (dx2 + con43 * ru1,dx5 + c1c5 * ru1,dxmax
&+ ru1,dx1)
lhs__(4,1) = dttx2 * us(1 + 1,j,k) - dttx1 * ru1
lhs__(5,1) = 0.0d0
lhs__(3,1) = lhs__(3,1) + comz5
lhs__(4,1) = lhs__(4,1) - comz4
lhs__(5,1) = lhs__(5,1) + comz1
lhsp__(1,1) = lhs__(1,1)
lhsp__(2,1) = lhs__(2,1) - dttx2 * speed(1 - 1,j,k)
lhsp__(3,1) = lhs__(3,1)
lhsp__(4,1) = lhs__(4,1) + dttx2 * speed(1 + 1,j,k)
lhsp__(5,1) = lhs__(5,1)
lhsm__(1,1) = lhs__(1,1)
lhsm__(2,1) = lhs__(2,1) + dttx2 * speed(1 - 1,j,k)
lhsm__(3,1) = lhs__(3,1)
lhsm__(4,1) = lhs__(4,1) - dttx2 * speed(1 + 1,j,k)
lhsm__(5,1) = lhs__(5,1)
endif
if (i + 2 .lt. problem_size - 1) then
m = i + 2
lhs__(1,2) = 0.0d0
ru1 = c3c4 * 1.0d0 / u(1,m - 1,j,k)
ru1 = dmax1 (dx2 + con43 * ru1,dx5 + c1c5 * ru1,dxmax
&+ ru1,dx1)
lhs__(2,2) = (-(dttx2)) * us(m - 1,j,k) - dttx1 * ru1
ru1 = c3c4 * 1.0d0 / u(1,m,j,k)
ru1 = dmax1 (dx2 + con43 * ru1,dx5 + c1c5 * ru1,dxmax
&+ ru1,dx1)
lhs__(3,2) = 1.0d0 + c2dttx1 * ru1
ru1 = c3c4 * 1.0d0 / u(1,m + 1,j,k)
ru1 = dmax1 (dx2 + con43 * ru1,dx5 + c1c5 * ru1,dxmax
&+ ru1,dx1)
lhs__(4,2) = dttx2 * us(m + 1,j,k) - dttx1 * ru1
lhs__(5,2) = 0.0d0
if (m .eq. 1) then
lhs__(3,2) = lhs__(3,2) + comz5
lhs__(4,2) = lhs__(4,2) - comz4
lhs__(5,2) = lhs__(5,2) + comz1
else if (m .eq. 2) then
lhs__(2,2) = lhs__(2,2) - comz4
lhs__(3,2) = lhs__(3,2) + comz6
lhs__(4,2) = lhs__(4,2) - comz4
lhs__(5,2) = lhs__(5,2) + comz1
else if (m .ge. 3 .and. m .le. nx2 - 2) then
lhs__(1,2) = lhs__(1,2) + comz1
lhs__(2,2) = lhs__(2,2) - comz4
lhs__(3,2) = lhs__(3,2) + comz6
lhs__(4,2) = lhs__(4,2) - comz4
lhs__(5,2) = lhs__(5,2) + comz1
else if (m .eq. nx2 - 1) then
lhs__(1,2) = lhs__(1,2) + comz1
lhs__(2,2) = lhs__(2,2) - comz4
lhs__(3,2) = lhs__(3,2) + comz6
lhs__(4,2) = lhs__(4,2) - comz4
else if (m .eq. nx2) then
lhs__(1,2) = lhs__(1,2) + comz1
lhs__(2,2) = lhs__(2,2) - comz4
lhs__(3,2) = lhs__(3,2) + comz5
endif
lhsp__(1,2) = lhs__(1,2)
lhsp__(2,2) = lhs__(2,2) - dttx2 * speed(m - 1,j,k)
lhsp__(3,2) = lhs__(3,2)
lhsp__(4,2) = lhs__(4,2) + dttx2 * speed(m + 1,j,k)
lhsp__(5,2) = lhs__(5,2)
lhsm__(1,2) = lhs__(1,2)
lhsm__(2,2) = lhs__(2,2) + dttx2 * speed(m - 1,j,k)
lhsm__(3,2) = lhs__(3,2)
lhsm__(4,2) = lhs__(4,2) - dttx2 * speed(m + 1,j,k)
lhsm__(5,2) = lhs__(5,2)
else if (i + 2 .eq. nx2 + 1) then
lhs__(1,2) = 0.0d0
lhsp__(1,2) = 0.0d0
lhsm__(1,2) = 0.0d0
lhs__(2,2) = 0.0d0
lhsp__(2,2) = 0.0d0
lhsm__(2,2) = 0.0d0
lhs__(3,2) = 1.0d0
lhsp__(3,2) = 1.0d0
lhsm__(3,2) = 1.0d0
lhs__(4,2) = 0.0d0
lhsp__(4,2) = 0.0d0
lhsm__(4,2) = 0.0d0
lhs__(5,2) = 0.0d0
lhsp__(5,2) = 0.0d0
lhsm__(5,2) = 0.0d0
endif
!********************************** end of init
i1 = i + 1
i2 = i + 2
fac1 = 1.d0 / lhs__(3,0)
lhs__(4,0) = fac1 * lhs__(4,0)
lhs__(5,0) = fac1 * lhs__(5,0)
do m = 1,3
rhs(m,i,j,k) = fac1 * rhs(m,i,j,k)
enddo
if (i .le. nx2 - 1) then
lhs__(3,1) = lhs__(3,1) - lhs__(2,1) * lhs__(4,0)
lhs__(4,1) = lhs__(4,1) - lhs__(2,1) * lhs__(5,0)
lhs__(2,2) = lhs__(2,2) - lhs__(1,2) * lhs__(4,0)
lhs__(3,2) = lhs__(3,2) - lhs__(1,2) * lhs__(5,0)
do m = 1,3
rhs(m,i1,j,k) = rhs(m,i1,j,k) - lhs__(2,1) * rhs(m,
&i,j,k)
rhs(m,i2,j,k) = rhs(m,i2,j,k) - lhs__(1,2) * rhs(m,
&i,j,k)
enddo
else
lhs__(3,1) = lhs__(3,1) - lhs__(2,1) * lhs__(4,0)
lhs__(4,1) = lhs__(4,1) - lhs__(2,1) * lhs__(5,0)
fac2 = 1.d0 / lhs__(3,1)
do m = 1,3
rhs(m,i1,j,k) = rhs(m,i1,j,k) - lhs__(2,1) * rhs(m,
&i,j,k)
rhs(m,i1,j,k) = fac2 * rhs(m,i1,j,k)
enddo
endif
m = 4
fac1 = 1.d0 / lhsp__(3,0)
lhsp__(4,0) = fac1 * lhsp__(4,0)
lhsp__(5,0) = fac1 * lhsp__(5,0)
rhs(m,i,j,k) = fac1 * rhs(m,i,j,k)
lhsp__(3,1) = lhsp__(3,1) - lhsp__(2,1) * lhsp__(4,0)
lhsp__(4,1) = lhsp__(4,1) - lhsp__(2,1) * lhsp__(5,0)
rhs(m,i1,j,k) = rhs(m,i1,j,k) - lhsp__(2,1) * rhs(m,i,j,k
&)
if (i .lt. nx2) then
lhsp__(2,2) = lhsp__(2,2) - lhsp__(1,2) * lhsp__(4,0)
lhsp__(3,2) = lhsp__(3,2) - lhsp__(1,2) * lhsp__(5,0)
rhs(m,i2,j,k) = rhs(m,i2,j,k) - lhsp__(1,2) * rhs(m,i,
&j,k)
endif
m = 5
fac1 = 1.d0 / lhsm__(3,0)
lhsm__(4,0) = fac1 * lhsm__(4,0)
lhsm__(5,0) = fac1 * lhsm__(5,0)
rhs(m,i,j,k) = fac1 * rhs(m,i,j,k)
lhsm__(3,1) = lhsm__(3,1) - lhsm__(2,1) * lhsm__(4,0)
lhsm__(4,1) = lhsm__(4,1) - lhsm__(2,1) * lhsm__(5,0)
rhs(m,i1,j,k) = rhs(m,i1,j,k) - lhsm__(2,1) * rhs(m,i,j,k
&)
if (i .lt. nx2) then
lhsm__(2,2) = lhsm__(2,2) - lhsm__(1,2) * lhsm__(4,0)
lhsm__(3,2) = lhsm__(3,2) - lhsm__(1,2) * lhsm__(5,0)
rhs(m,i2,j,k) = rhs(m,i2,j,k) - lhsm__(1,2) * rhs(m,i,
&j,k)
endif
if (i .eq. nx2) then
rhs(4,i1,j,k) = rhs(4,i1,j,k) / lhsp__(3,1)
rhs(5,i1,j,k) = rhs(5,i1,j,k) / lhsm__(3,1)
do m = 1,3
rhs(m,i,j,k) = rhs(m,i,j,k) - lhs__(4,0) * rhs(m,i1
&,j,k)
enddo
rhs(4,i,j,k) = rhs(4,i,j,k) - lhsp__(4,0) * rhs(4,i1,j
&,k)
rhs(5,i,j,k) = rhs(5,i,j,k) - lhsm__(4,0) * rhs(5,i1,j
&,k)
endif
lhs(0,4,i,j,k) = lhs__(4,0)
lhs(1,4,i,j,k) = lhsp__(4,0)
lhs(2,4,i,j,k) = lhsm__(4,0)
lhs(0,5,i,j,k) = lhs__(5,0)
lhs(1,5,i,j,k) = lhsp__(5,0)
lhs(2,5,i,j,k) = lhsm__(5,0)
lhs__(1,0) = lhs__(1,1)
lhsp__(1,0) = lhsp__(1,1)
lhsm__(1,0) = lhsm__(1,1)
lhs__(1,1) = lhs__(1,2)
lhsp__(1,1) = lhsp__(1,2)
lhsm__(1,1) = lhsm__(1,2)
lhs__(2,0) = lhs__(2,1)
lhsp__(2,0) = lhsp__(2,1)
lhsm__(2,0) = lhsm__(2,1)
lhs__(2,1) = lhs__(2,2)
lhsp__(2,1) = lhsp__(2,2)
lhsm__(2,1) = lhsm__(2,2)
lhs__(3,0) = lhs__(3,1)
lhsp__(3,0) = lhsp__(3,1)
lhsm__(3,0) = lhsm__(3,1)
lhs__(3,1) = lhs__(3,2)
lhsp__(3,1) = lhsp__(3,2)
lhsm__(3,1) = lhsm__(3,2)
lhs__(4,0) = lhs__(4,1)
lhsp__(4,0) = lhsp__(4,1)
lhsm__(4,0) = lhsm__(4,1)
lhs__(4,1) = lhs__(4,2)
lhsp__(4,1) = lhsp__(4,2)
lhsm__(4,1) = lhsm__(4,2)
lhs__(5,0) = lhs__(5,1)
lhsp__(5,0) = lhsp__(5,1)
lhsm__(5,0) = lhsm__(5,1)
lhs__(5,1) = lhs__(5,2)
lhsp__(5,1) = lhsp__(5,2)
lhsm__(5,1) = lhsm__(5,2)
enddo
i = problem_size - 3
rhs__(1,2) = rhs(1,i + 2,j,k)
rhs__(2,2) = rhs(2,i + 2,j,k)
rhs__(3,2) = rhs(3,i + 2,j,k)
rhs__(4,2) = rhs(4,i + 2,j,k)
rhs__(5,2) = rhs(5,i + 2,j,k)
rhs__(1,1) = rhs(1,i + 1,j,k)
rhs__(2,1) = rhs(2,i + 1,j,k)
rhs__(3,1) = rhs(3,i + 1,j,k)
rhs__(4,1) = rhs(4,i + 1,j,k)
rhs__(5,1) = rhs(5,i + 1,j,k)
rhs__(1,0) = rhs(1,i,j,k)
rhs__(2,0) = rhs(2,i,j,k)
rhs__(3,0) = rhs(3,i,j,k)
rhs__(4,0) = rhs(4,i,j,k)
rhs__(5,0) = rhs(5,i,j,k)
rhs__(1,0) = rhs__(1,0) - lhs(0,4,i,j,k) * rhs__(1,1) - lhs(
&0,5,i,j,k) * rhs__(1,2)
rhs__(2,0) = rhs__(2,0) - lhs(0,4,i,j,k) * rhs__(2,1) - lhs(
&0,5,i,j,k) * rhs__(2,2)
rhs__(3,0) = rhs__(3,0) - lhs(0,4,i,j,k) * rhs__(3,1) - lhs(
&0,5,i,j,k) * rhs__(3,2)
rhs__(4,0) = rhs__(4,0) - lhs(1,4,i,j,k) * rhs__(4,1) - lhs(
&1,5,i,j,k) * rhs__(4,2)
rhs__(5,0) = rhs__(5,0) - lhs(2,4,i,j,k) * rhs__(5,1) - lhs(
&2,5,i,j,k) * rhs__(5,2)
rhs__(1,2) = rhs__(1,1)
rhs__(2,2) = rhs__(2,1)
rhs__(3,2) = rhs__(3,1)
rhs__(4,2) = rhs__(4,1)
rhs__(5,2) = rhs__(5,1)
rhs__(1,1) = rhs__(1,0)
rhs__(2,1) = rhs__(2,0)
rhs__(3,1) = rhs__(3,0)
rhs__(4,1) = rhs__(4,0)
rhs__(5,1) = rhs__(5,0)
do i = problem_size - 4,0,(-(1))
rhs__(1,0) = rhs(1,i,j,k)
rhs__(2,0) = rhs(2,i,j,k)
rhs__(3,0) = rhs(3,i,j,k)
rhs__(4,0) = rhs(4,i,j,k)
rhs__(5,0) = rhs(5,i,j,k)
rhs__(1,0) = rhs__(1,0) - lhs(0,4,i,j,k) * rhs__(1,1) - l
&hs(0,5,i,j,k) * rhs__(1,2)
rhs__(2,0) = rhs__(2,0) - lhs(0,4,i,j,k) * rhs__(2,1) - l
&hs(0,5,i,j,k) * rhs__(2,2)
rhs__(3,0) = rhs__(3,0) - lhs(0,4,i,j,k) * rhs__(3,1) - l
&hs(0,5,i,j,k) * rhs__(3,2)
rhs__(4,0) = rhs__(4,0) - lhs(1,4,i,j,k) * rhs__(4,1) - l
&hs(1,5,i,j,k) * rhs__(4,2)
rhs__(5,0) = rhs__(5,0) - lhs(2,4,i,j,k) * rhs__(5,1) - l
&hs(2,5,i,j,k) * rhs__(5,2)
t1 = bt * rhs__(3,2)
t2 = 0.5d0 * (rhs__(4,2) + rhs__(5,2))
rhs(1,i + 2,j,k) = (-(rhs__(2,2)))
rhs(2,i + 2,j,k) = rhs__(1,2)
rhs(3,i + 2,j,k) = bt * (rhs__(4,2) - rhs__(5,2))
rhs(4,i + 2,j,k) = (-(t1)) + t2
rhs(5,i + 2,j,k) = t1 + t2
rhs__(1,2) = rhs__(1,1)
rhs__(2,2) = rhs__(2,1)
rhs__(3,2) = rhs__(3,1)
rhs__(4,2) = rhs__(4,1)
rhs__(5,2) = rhs__(5,1)
rhs__(1,1) = rhs__(1,0)
rhs__(2,1) = rhs__(2,0)
rhs__(3,1) = rhs__(3,0)
rhs__(4,1) = rhs__(4,0)
rhs__(5,1) = rhs__(5,0)
enddo
t1 = bt * rhs__(3,2)
t2 = 0.5d0 * (rhs__(4,2) + rhs__(5,2))
rhs(1,1,j,k) = (-(rhs__(2,2)))
rhs(2,1,j,k) = rhs__(1,2)
rhs(3,1,j,k) = bt * (rhs__(4,2) - rhs__(5,2))
rhs(4,1,j,k) = (-(t1)) + t2
rhs(5,1,j,k) = t1 + t2
enddo
enddo
!$SPF END PARALLEL_REG
! DVM$ END REGION
return
end