function xyza_FillNegative_xyza( xyza_Var )
implicit none
real(DP), intent(inout) :: xyza_Var(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax, SpcNum)
real(DP) :: xyza_FillNegative_xyza(DimXMin:DimXMax,DimYMin:DImYMax,DimZMin:DimZMax, SpcNum)
real(DP) :: xyza_DQFILL(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax, SpcNum)
real(DP) :: xyza_QSUMPN(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax, SpcNum)
real(DP), parameter :: EPS = 1.0d-60 !零での割り算を防ぐ
integer :: i, j, k, s
!初期化
xyza_QSUMPN = 0.0d0
xyza_DQFILL = 0.0d0
do s = 1, SpcNum
do k = DimZMin+2, DimZMax-2
do j = DimYMin+2, DimYMax-2
do i = DimXMin+2, DimXMax-2
xyza_QSUMPN(i,j,k,s) = 1.0d0 / ( ( MAX( 0.0d0, xyza_Basic(i-1,j,k,s) + xyza_Var(i-1,j,k,s) ) * xyz_Dens(i-1,j,k) + MAX( 0.0d0, xyza_Basic(i+1,j,k,s) + xyza_Var(i+1,j,k,s) ) * xyz_Dens(i+1,j,k) + MAX( 0.0d0, xyza_Basic(i,j-1,k,s) + xyza_Var(i,j-1,k,s) ) * xyz_Dens(i,j-1,k) + MAX( 0.0d0, xyza_Basic(i,j+1,k,s) + xyza_Var(i,j+1,k,s) ) * xyz_Dens(i,j+1,k) + MAX( 0.0d0, xyza_Basic(i,j,k-1,s) + xyza_Var(i,j,k-1,s) ) * xyz_Dens(i,j,k-1) + MAX( 0.0d0, xyza_Basic(i,j,k+1,s) + xyza_Var(i,j,k+1,s) ) * xyz_Dens(i,j,k+1) ) * 0.75d0 + ( MAX( 0.0d0, xyza_Basic(i-2,j,k,s) + xyza_Var(i-2,j,k,s) ) * xyz_Dens(i-2,j,k) + MAX( 0.0d0, xyza_Basic(i+2,j,k,s) + xyza_Var(i+2,j,k,s) ) * xyz_Dens(i+2,j,k) + MAX( 0.0d0, xyza_Basic(i,j-2,k,s) + xyza_Var(i,j-2,k,s) ) * xyz_Dens(i,j-2,k) + MAX( 0.0d0, xyza_Basic(i,j+2,k,s) + xyza_Var(i,j+2,k,s) ) * xyz_Dens(i,j+2,k) + MAX( 0.0d0, xyza_Basic(i,j,k-2,s) + xyza_Var(i,j,k-2,s) ) * xyz_Dens(i,j,k-2) + MAX( 0.0d0, xyza_Basic(i,j,k+2,s) + xyza_Var(i,j,k+2,s) ) * xyz_Dens(i,j,k+2) ) * 0.25d0 + EPS )
end do
end do
end do
end do
do s = 1, SpcNum
do k = DimZMin+2, DimZMax-2
do j = DimYMin+2, DimYMax-2
do i = DimXMin+2, DimXMax-2
xyza_DQFILL(i,j,k,s) = - MIN( 0.0d0, xyza_Basic(i,j,k,s) + xyza_Var(i,j,k,s) ) + MAX( 0.0d0, xyza_Basic(i,j,k,s) + xyza_Var(i,j,k,s) ) * ( ( MIN( 0.0d0, xyza_Basic(i-1,j,k,s) + xyza_Var(i-1,j,k,s) ) * xyza_QSUMPN(i-1,j,k,s) * xyz_Dens(i-1,j,k) + MIN( 0.0d0, xyza_Basic(i+1,j,k,s) + xyza_Var(i+1,j,k,s) ) * xyza_QSUMPN(i+1,j,k,s) * xyz_Dens(i+1,j,k) + MIN( 0.0d0, xyza_Basic(i,j-1,k,s) + xyza_Var(i,j-1,k,s) ) * xyza_QSUMPN(i,j-1,k,s) * xyz_Dens(i,j-1,k) + MIN( 0.0d0, xyza_Basic(i,j+1,k,s) + xyza_Var(i,j+1,k,s) ) * xyza_QSUMPN(i,j+1,k,s) * xyz_Dens(i,j+1,k) + MIN( 0.0d0, xyza_Basic(i,j,k-1,s) + xyza_Var(i,j,k-1,s) ) * xyza_QSUMPN(i,j,k-1,s) * xyz_Dens(i,j,k-1) + MIN( 0.0d0, xyza_Basic(i,j,k+1,s) + xyza_Var(i,j,k+1,s) ) * xyza_QSUMPN(i,j,k+1,s) * xyz_Dens(i,j,k+1) ) * 0.75d0 + ( MIN( 0.0d0, xyza_Basic(i-2,j,k,s) + xyza_Var(i-2,j,k,s) ) * xyza_QSUMPN(i-2,j,k,s) * xyz_Dens(i-2,j,k) + MIN( 0.0d0, xyza_Basic(i+2,j,k,s) + xyza_Var(i+2,j,k,s) ) * xyza_QSUMPN(i+2,j,k,s) * xyz_Dens(i+2,j,k) + MIN( 0.0d0, xyza_Basic(i,j-2,k,s) + xyza_Var(i,j-2,k,s) ) * xyza_QSUMPN(i,j-2,k,s) * xyz_Dens(i,j-2,k) + MIN( 0.0d0, xyza_Basic(i,j+2,k,s) + xyza_Var(i,j+2,k,s) ) * xyza_QSUMPN(i,j+2,k,s) * xyz_Dens(i,j+2,k) + MIN( 0.0d0, xyza_Basic(i,j,k-2,s) + xyza_Var(i,j,k-2,s) ) * xyza_QSUMPN(i,j,k-2,s) * xyz_Dens(i,j,k-2) + MIN( 0.0d0, xyza_Basic(i,j,k+2,s) + xyza_Var(i,j,k+2,s) ) * xyza_QSUMPN(i,j,k+2,s) * xyz_Dens(i,j,k+2) ) * 0.25d0 )
end do
end do
end do
end do
!出力
xyza_FillNegative_xyza = xyza_Var + xyza_DQFILL
end function xyza_FillNegative_xyza