blob: 02645793e0ec918814680e091574a42ac022d281 [file] [log] [blame]
c---------------------------------------------------------------------
c---------------------------------------------------------------------
subroutine jacu(k)
c---------------------------------------------------------------------
c---------------------------------------------------------------------
c---------------------------------------------------------------------
c compute the upper triangular part of the jacobian matrix
c---------------------------------------------------------------------
implicit none
include 'applu.incl'
c---------------------------------------------------------------------
c input parameters
c---------------------------------------------------------------------
integer k
c---------------------------------------------------------------------
c local variables
c---------------------------------------------------------------------
integer i, j
double precision r43
double precision c1345
double precision c34
double precision tmp1, tmp2, tmp3
r43 = ( 4.0d+00 / 3.0d+00 )
c1345 = c1 * c3 * c4 * c5
c34 = c3 * c4
!$omp do schedule(static)
do j = jend, jst, -1
do i = iend, ist, -1
c---------------------------------------------------------------------
c form the block daigonal
c---------------------------------------------------------------------
tmp1 = rho_i(i,j,k)
tmp2 = tmp1 * tmp1
tmp3 = tmp1 * tmp2
du(1,1,i,j) = 1.0d+00
> + dt * 2.0d+00 * ( tx1 * dx1
> + ty1 * dy1
> + tz1 * dz1 )
du(1,2,i,j) = 0.0d+00
du(1,3,i,j) = 0.0d+00
du(1,4,i,j) = 0.0d+00
du(1,5,i,j) = 0.0d+00
du(2,1,i,j) = dt * 2.0d+00
> * ( - tx1 * r43 - ty1 - tz1 )
> * ( c34 * tmp2 * u(2,i,j,k) )
du(2,2,i,j) = 1.0d+00
> + dt * 2.0d+00 * c34 * tmp1
> * ( tx1 * r43 + ty1 + tz1 )
> + dt * 2.0d+00 * ( tx1 * dx2
> + ty1 * dy2
> + tz1 * dz2 )
du(2,3,i,j) = 0.0d+00
du(2,4,i,j) = 0.0d+00
du(2,5,i,j) = 0.0d+00
du(3,1,i,j) = dt * 2.0d+00
> * ( - tx1 - ty1 * r43 - tz1 )
> * ( c34 * tmp2 * u(3,i,j,k) )
du(3,2,i,j) = 0.0d+00
du(3,3,i,j) = 1.0d+00
> + dt * 2.0d+00 * c34 * tmp1
> * ( tx1 + ty1 * r43 + tz1 )
> + dt * 2.0d+00 * ( tx1 * dx3
> + ty1 * dy3
> + tz1 * dz3 )
du(3,4,i,j) = 0.0d+00
du(3,5,i,j) = 0.0d+00
du(4,1,i,j) = dt * 2.0d+00
> * ( - tx1 - ty1 - tz1 * r43 )
> * ( c34 * tmp2 * u(4,i,j,k) )
du(4,2,i,j) = 0.0d+00
du(4,3,i,j) = 0.0d+00
du(4,4,i,j) = 1.0d+00
> + dt * 2.0d+00 * c34 * tmp1
> * ( tx1 + ty1 + tz1 * r43 )
> + dt * 2.0d+00 * ( tx1 * dx4
> + ty1 * dy4
> + tz1 * dz4 )
du(4,5,i,j) = 0.0d+00
du(5,1,i,j) = -dt * 2.0d+00
> * ( ( ( tx1 * ( r43*c34 - c1345 )
> + ty1 * ( c34 - c1345 )
> + tz1 * ( c34 - c1345 ) ) * ( u(2,i,j,k) ** 2 )
> + ( tx1 * ( c34 - c1345 )
> + ty1 * ( r43*c34 - c1345 )
> + tz1 * ( c34 - c1345 ) ) * ( u(3,i,j,k) ** 2 )
> + ( tx1 * ( c34 - c1345 )
> + ty1 * ( c34 - c1345 )
> + tz1 * ( r43*c34 - c1345 ) ) * ( u(4,i,j,k) ** 2 )
> ) * tmp3
> + ( tx1 + ty1 + tz1 ) * c1345 * tmp2 * u(5,i,j,k) )
du(5,2,i,j) = dt * 2.0d+00
> * ( tx1 * ( r43*c34 - c1345 )
> + ty1 * ( c34 - c1345 )
> + tz1 * ( c34 - c1345 ) ) * tmp2 * u(2,i,j,k)
du(5,3,i,j) = dt * 2.0d+00
> * ( tx1 * ( c34 - c1345 )
> + ty1 * ( r43*c34 -c1345 )
> + tz1 * ( c34 - c1345 ) ) * tmp2 * u(3,i,j,k)
du(5,4,i,j) = dt * 2.0d+00
> * ( tx1 * ( c34 - c1345 )
> + ty1 * ( c34 - c1345 )
> + tz1 * ( r43*c34 - c1345 ) ) * tmp2 * u(4,i,j,k)
du(5,5,i,j) = 1.0d+00
> + dt * 2.0d+00 * ( tx1 + ty1 + tz1 ) * c1345 * tmp1
> + dt * 2.0d+00 * ( tx1 * dx5
> + ty1 * dy5
> + tz1 * dz5 )
c---------------------------------------------------------------------
c form the first block sub-diagonal
c---------------------------------------------------------------------
tmp1 = rho_i(i+1,j,k)
tmp2 = tmp1 * tmp1
tmp3 = tmp1 * tmp2
au(1,1,i,j) = - dt * tx1 * dx1
au(1,2,i,j) = dt * tx2
au(1,3,i,j) = 0.0d+00
au(1,4,i,j) = 0.0d+00
au(1,5,i,j) = 0.0d+00
au(2,1,i,j) = dt * tx2
> * ( - ( u(2,i+1,j,k) * tmp1 ) ** 2
> + c2 * qs(i+1,j,k) * tmp1 )
> - dt * tx1 * ( - r43 * c34 * tmp2 * u(2,i+1,j,k) )
au(2,2,i,j) = dt * tx2
> * ( ( 2.0d+00 - c2 ) * ( u(2,i+1,j,k) * tmp1 ) )
> - dt * tx1 * ( r43 * c34 * tmp1 )
> - dt * tx1 * dx2
au(2,3,i,j) = dt * tx2
> * ( - c2 * ( u(3,i+1,j,k) * tmp1 ) )
au(2,4,i,j) = dt * tx2
> * ( - c2 * ( u(4,i+1,j,k) * tmp1 ) )
au(2,5,i,j) = dt * tx2 * c2
au(3,1,i,j) = dt * tx2
> * ( - ( u(2,i+1,j,k) * u(3,i+1,j,k) ) * tmp2 )
> - dt * tx1 * ( - c34 * tmp2 * u(3,i+1,j,k) )
au(3,2,i,j) = dt * tx2 * ( u(3,i+1,j,k) * tmp1 )
au(3,3,i,j) = dt * tx2 * ( u(2,i+1,j,k) * tmp1 )
> - dt * tx1 * ( c34 * tmp1 )
> - dt * tx1 * dx3
au(3,4,i,j) = 0.0d+00
au(3,5,i,j) = 0.0d+00
au(4,1,i,j) = dt * tx2
> * ( - ( u(2,i+1,j,k)*u(4,i+1,j,k) ) * tmp2 )
> - dt * tx1 * ( - c34 * tmp2 * u(4,i+1,j,k) )
au(4,2,i,j) = dt * tx2 * ( u(4,i+1,j,k) * tmp1 )
au(4,3,i,j) = 0.0d+00
au(4,4,i,j) = dt * tx2 * ( u(2,i+1,j,k) * tmp1 )
> - dt * tx1 * ( c34 * tmp1 )
> - dt * tx1 * dx4
au(4,5,i,j) = 0.0d+00
au(5,1,i,j) = dt * tx2
> * ( ( c2 * 2.0d0 * qs(i+1,j,k)
> - c1 * u(5,i+1,j,k) )
> * ( u(2,i+1,j,k) * tmp2 ) )
> - dt * tx1
> * ( - ( r43*c34 - c1345 ) * tmp3 * ( u(2,i+1,j,k)**2 )
> - ( c34 - c1345 ) * tmp3 * ( u(3,i+1,j,k)**2 )
> - ( c34 - c1345 ) * tmp3 * ( u(4,i+1,j,k)**2 )
> - c1345 * tmp2 * u(5,i+1,j,k) )
au(5,2,i,j) = dt * tx2
> * ( c1 * ( u(5,i+1,j,k) * tmp1 )
> - c2
> * ( u(2,i+1,j,k)*u(2,i+1,j,k) * tmp2
> + qs(i+1,j,k) * tmp1 ) )
> - dt * tx1
> * ( r43*c34 - c1345 ) * tmp2 * u(2,i+1,j,k)
au(5,3,i,j) = dt * tx2
> * ( - c2 * ( u(3,i+1,j,k)*u(2,i+1,j,k) ) * tmp2 )
> - dt * tx1
> * ( c34 - c1345 ) * tmp2 * u(3,i+1,j,k)
au(5,4,i,j) = dt * tx2
> * ( - c2 * ( u(4,i+1,j,k)*u(2,i+1,j,k) ) * tmp2 )
> - dt * tx1
> * ( c34 - c1345 ) * tmp2 * u(4,i+1,j,k)
au(5,5,i,j) = dt * tx2
> * ( c1 * ( u(2,i+1,j,k) * tmp1 ) )
> - dt * tx1 * c1345 * tmp1
> - dt * tx1 * dx5
c---------------------------------------------------------------------
c form the second block sub-diagonal
c---------------------------------------------------------------------
tmp1 = rho_i(i,j+1,k)
tmp2 = tmp1 * tmp1
tmp3 = tmp1 * tmp2
bu(1,1,i,j) = - dt * ty1 * dy1
bu(1,2,i,j) = 0.0d+00
bu(1,3,i,j) = dt * ty2
bu(1,4,i,j) = 0.0d+00
bu(1,5,i,j) = 0.0d+00
bu(2,1,i,j) = dt * ty2
> * ( - ( u(2,i,j+1,k)*u(3,i,j+1,k) ) * tmp2 )
> - dt * ty1 * ( - c34 * tmp2 * u(2,i,j+1,k) )
bu(2,2,i,j) = dt * ty2 * ( u(3,i,j+1,k) * tmp1 )
> - dt * ty1 * ( c34 * tmp1 )
> - dt * ty1 * dy2
bu(2,3,i,j) = dt * ty2 * ( u(2,i,j+1,k) * tmp1 )
bu(2,4,i,j) = 0.0d+00
bu(2,5,i,j) = 0.0d+00
bu(3,1,i,j) = dt * ty2
> * ( - ( u(3,i,j+1,k) * tmp1 ) ** 2
> + c2 * ( qs(i,j+1,k) * tmp1 ) )
> - dt * ty1 * ( - r43 * c34 * tmp2 * u(3,i,j+1,k) )
bu(3,2,i,j) = dt * ty2
> * ( - c2 * ( u(2,i,j+1,k) * tmp1 ) )
bu(3,3,i,j) = dt * ty2 * ( ( 2.0d+00 - c2 )
> * ( u(3,i,j+1,k) * tmp1 ) )
> - dt * ty1 * ( r43 * c34 * tmp1 )
> - dt * ty1 * dy3
bu(3,4,i,j) = dt * ty2
> * ( - c2 * ( u(4,i,j+1,k) * tmp1 ) )
bu(3,5,i,j) = dt * ty2 * c2
bu(4,1,i,j) = dt * ty2
> * ( - ( u(3,i,j+1,k)*u(4,i,j+1,k) ) * tmp2 )
> - dt * ty1 * ( - c34 * tmp2 * u(4,i,j+1,k) )
bu(4,2,i,j) = 0.0d+00
bu(4,3,i,j) = dt * ty2 * ( u(4,i,j+1,k) * tmp1 )
bu(4,4,i,j) = dt * ty2 * ( u(3,i,j+1,k) * tmp1 )
> - dt * ty1 * ( c34 * tmp1 )
> - dt * ty1 * dy4
bu(4,5,i,j) = 0.0d+00
bu(5,1,i,j) = dt * ty2
> * ( ( c2 * 2.0d0 * qs(i,j+1,k)
> - c1 * u(5,i,j+1,k) )
> * ( u(3,i,j+1,k) * tmp2 ) )
> - dt * ty1
> * ( - ( c34 - c1345 )*tmp3*(u(2,i,j+1,k)**2)
> - ( r43*c34 - c1345 )*tmp3*(u(3,i,j+1,k)**2)
> - ( c34 - c1345 )*tmp3*(u(4,i,j+1,k)**2)
> - c1345*tmp2*u(5,i,j+1,k) )
bu(5,2,i,j) = dt * ty2
> * ( - c2 * ( u(2,i,j+1,k)*u(3,i,j+1,k) ) * tmp2 )
> - dt * ty1
> * ( c34 - c1345 ) * tmp2 * u(2,i,j+1,k)
bu(5,3,i,j) = dt * ty2
> * ( c1 * ( u(5,i,j+1,k) * tmp1 )
> - c2
> * ( qs(i,j+1,k) * tmp1
> + u(3,i,j+1,k)*u(3,i,j+1,k) * tmp2 ) )
> - dt * ty1
> * ( r43*c34 - c1345 ) * tmp2 * u(3,i,j+1,k)
bu(5,4,i,j) = dt * ty2
> * ( - c2 * ( u(3,i,j+1,k)*u(4,i,j+1,k) ) * tmp2 )
> - dt * ty1 * ( c34 - c1345 ) * tmp2 * u(4,i,j+1,k)
bu(5,5,i,j) = dt * ty2
> * ( c1 * ( u(3,i,j+1,k) * tmp1 ) )
> - dt * ty1 * c1345 * tmp1
> - dt * ty1 * dy5
c---------------------------------------------------------------------
c form the third block sub-diagonal
c---------------------------------------------------------------------
tmp1 = rho_i(i,j,k+1)
tmp2 = tmp1 * tmp1
tmp3 = tmp1 * tmp2
cu(1,1,i,j) = - dt * tz1 * dz1
cu(1,2,i,j) = 0.0d+00
cu(1,3,i,j) = 0.0d+00
cu(1,4,i,j) = dt * tz2
cu(1,5,i,j) = 0.0d+00
cu(2,1,i,j) = dt * tz2
> * ( - ( u(2,i,j,k+1)*u(4,i,j,k+1) ) * tmp2 )
> - dt * tz1 * ( - c34 * tmp2 * u(2,i,j,k+1) )
cu(2,2,i,j) = dt * tz2 * ( u(4,i,j,k+1) * tmp1 )
> - dt * tz1 * c34 * tmp1
> - dt * tz1 * dz2
cu(2,3,i,j) = 0.0d+00
cu(2,4,i,j) = dt * tz2 * ( u(2,i,j,k+1) * tmp1 )
cu(2,5,i,j) = 0.0d+00
cu(3,1,i,j) = dt * tz2
> * ( - ( u(3,i,j,k+1)*u(4,i,j,k+1) ) * tmp2 )
> - dt * tz1 * ( - c34 * tmp2 * u(3,i,j,k+1) )
cu(3,2,i,j) = 0.0d+00
cu(3,3,i,j) = dt * tz2 * ( u(4,i,j,k+1) * tmp1 )
> - dt * tz1 * ( c34 * tmp1 )
> - dt * tz1 * dz3
cu(3,4,i,j) = dt * tz2 * ( u(3,i,j,k+1) * tmp1 )
cu(3,5,i,j) = 0.0d+00
cu(4,1,i,j) = dt * tz2
> * ( - ( u(4,i,j,k+1) * tmp1 ) ** 2
> + c2 * ( qs(i,j,k+1) * tmp1 ) )
> - dt * tz1 * ( - r43 * c34 * tmp2 * u(4,i,j,k+1) )
cu(4,2,i,j) = dt * tz2
> * ( - c2 * ( u(2,i,j,k+1) * tmp1 ) )
cu(4,3,i,j) = dt * tz2
> * ( - c2 * ( u(3,i,j,k+1) * tmp1 ) )
cu(4,4,i,j) = dt * tz2 * ( 2.0d+00 - c2 )
> * ( u(4,i,j,k+1) * tmp1 )
> - dt * tz1 * ( r43 * c34 * tmp1 )
> - dt * tz1 * dz4
cu(4,5,i,j) = dt * tz2 * c2
cu(5,1,i,j) = dt * tz2
> * ( ( c2 * 2.0d0 * qs(i,j,k+1)
> - c1 * u(5,i,j,k+1) )
> * ( u(4,i,j,k+1) * tmp2 ) )
> - dt * tz1
> * ( - ( c34 - c1345 ) * tmp3 * (u(2,i,j,k+1)**2)
> - ( c34 - c1345 ) * tmp3 * (u(3,i,j,k+1)**2)
> - ( r43*c34 - c1345 )* tmp3 * (u(4,i,j,k+1)**2)
> - c1345 * tmp2 * u(5,i,j,k+1) )
cu(5,2,i,j) = dt * tz2
> * ( - c2 * ( u(2,i,j,k+1)*u(4,i,j,k+1) ) * tmp2 )
> - dt * tz1 * ( c34 - c1345 ) * tmp2 * u(2,i,j,k+1)
cu(5,3,i,j) = dt * tz2
> * ( - c2 * ( u(3,i,j,k+1)*u(4,i,j,k+1) ) * tmp2 )
> - dt * tz1 * ( c34 - c1345 ) * tmp2 * u(3,i,j,k+1)
cu(5,4,i,j) = dt * tz2
> * ( c1 * ( u(5,i,j,k+1) * tmp1 )
> - c2
> * ( qs(i,j,k+1) * tmp1
> + u(4,i,j,k+1)*u(4,i,j,k+1) * tmp2 ) )
> - dt * tz1 * ( r43*c34 - c1345 ) * tmp2 * u(4,i,j,k+1)
cu(5,5,i,j) = dt * tz2
> * ( c1 * ( u(4,i,j,k+1) * tmp1 ) )
> - dt * tz1 * c1345 * tmp1
> - dt * tz1 * dz5
end do
end do
!$omp end do nowait
return
end