!=========================================================================== ! subroutine y_der1_st & (f,df,dx,dy,dz,orderi,orderb, & biL, biR, bjL, bjR, bkL, bkR, & fiL, fiR, fjL, fjR, fkL, fkR, & iiL, iiR, ijL, ijR, ikL, ikR, & dfiL,dfiR,dfjL,dfjR,dfkL,dfkR, & iperx,ipery,iperz,ierror,error) ! include 'der1_include_st.h' ! call der1_pre_st(ierror,error, & xbegin,xend,ybegin,yend,zbegin,zend, & bnd2A, bnd3A, bnd3B, bnd4C, bnd6D, bnd8E, & iperx,ipery,iperz, orderi, orderb, & biL, biR, bjL, bjR, bkL, bkR, & fiL, fiR, fjL, fjR, fkL, fkR, & iiL, iiR, ijL, ijR, ikL, ikR, & dfiL,dfiR,dfjL,dfjR,dfkL,dfkR, & piL, piR, pjL, pjR, pkL, pkR, & nproLx,nproRx,nproLy,nproRy,nproLz,nproRz, & proL,proR,promax,dx,dy,dz,rdx,rdy,rdz,width) ! if( width .gt. pjR-pjL+1) then ierror = -100 error = 'DER_1_ST: Stencil is wider than the f domain' return endif ! ! Zero-out first derivative ! do k = ikL, ikR do j = ijL, ijR-1 do i = iiL, iiR df(i,j,k) = 0.0 end do end do end do ! !======================================================================== ! CENTERED DIFFERENCE OPERATORS ! !----------------------------- ! 2nd-order explicit: (1-2E-1) ! if ( orderi .eq. 2 ) then ! ae = (1.d0/ 1.d0) * rdy ! ! Internal nodes: ! do k = ikL, ikR do j = ybegin, yend do i = iiL, iiR df(i,j,k) = ae *( f(i,j+1,k)-f(i,j-0,k) ) end do end do end do ! end if ! !----------------------------- ! 4th order explicit: (3,3-4E-3,3) ! if ( orderi .eq. 4 ) then ! ae = +(27.d0/24.d0) * rdy be = -( 1.d0/24.d0) * rdy ! ! Internal nodes: ! do k = ikL, ikR do j = ybegin, yend do i = iiL, iiR df(i,j,k) = ae *( f(i,j+1,k)-f(i,j-0,k) ) & + be *( f(i,j+2,k)-f(i,j-1,k) ) end do end do end do ! ! Boundary nodes: ! ! Left side: ! if ( nproLy .eq. 1 ) then do k = ikL, ikR do i = iiL, iiR df(i,ybegin-1,k) = (bnd3A(4)*f(i,ybegin-1,k) + & bnd3A(3)*f(i,ybegin+0,k) + & bnd3A(2)*f(i,ybegin+1,k) + & bnd3A(1)*f(i,ybegin+2,k))*rdy end do end do end if ! ! Right side: ! if ( nproRy .eq. 1 ) then do k = ikL, ikR do i = iiL, iiR df(i,yend+1,k) = -(bnd3A(4)*f(i,yend+2,k) + & bnd3A(3)*f(i,yend+1,k) + & bnd3A(2)*f(i,yend+0,k) + & bnd3A(1)*f(i,yend-1,k))*rdy end do end do end if ! end if ! !----------------------------- ! 6th order explicit: (3,3,4-6E-4,3,3) ! ! if ( orderi .eq. 6 ) then ! ae = +(2250.d0/1920.d0) * rdy be = -( 125.d0/1920.d0) * rdy ce = +( 9.d0/1920.d0) * rdy ! ! Internal nodes: ! do k = ikL, ikR do j = ybegin, yend do i = iiL, iiR df(i,j,k) = ae *( f(i,j+1,k)-f(i,j-0,k) ) & + be *( f(i,j+2,k)-f(i,j-1,k) ) & + ce *( f(i,j+3,k)-f(i,j-2,k) ) end do end do end do ! ! Boundary nodes: ! ! Left side: ! if ( nproLy .ge. 1 ) then do k = ikL, ikR do i = iiL, iiR df(i,ybegin-1,k) = (bnd4C(4)*f(i,ybegin-2,k) + & bnd4C(3)*f(i,ybegin-1,k) + & bnd4C(2)*f(i,ybegin+0,k) + & bnd4C(1)*f(i,ybegin+1,k))*rdy end do end do end if ! if ( nproLy .eq. 2 ) then do k = ikL, ikR do i = iiL, iiR df(i,ybegin-2,k) = (bnd3A(4)*f(i,ybegin-2,k) + & bnd3A(3)*f(i,ybegin-1,k) + & bnd3A(2)*f(i,ybegin+0,k) + & bnd3A(1)*f(i,ybegin+1,k))*rdy end do end do end if ! ! Right side: ! if ( nproRy .ge. 1 ) then do k = ikL, ikR do i = iiL, iiR df(i,yend+1,k) = -(bnd4C(4)*f(i,yend+3,k) + & bnd4C(3)*f(i,yend+2,k) + & bnd4C(2)*f(i,yend+1,k) + & bnd4C(1)*f(i,yend+0,k))*rdy end do end do end if if ( nproRy .eq. 2 ) then do k = ikL, ikR do i = iiL, iiR df(i,yend+2,k) = -(bnd3A(4)*f(i,yend+3,k) + & bnd3A(3)*f(i,yend+2,k) + & bnd3A(2)*f(i,yend+1,k) + & bnd3A(1)*f(i,yend+0,k))*rdy end do end do end if ! end if !----------------------------- ! 8th order explicit: (3,3,4,6-8E-6,4,3,3) ! ! if ( orderi .eq. 8 ) then ! ae = +(128625.d0/107520.d0) * rdy be = -( 8575.d0/107520.d0) * rdy ce = +( 1029.d0/107520.d0) * rdy de = -( 75.d0/107520.d0) * rdy ! ! Internal nodes: ! do k = ikL, ikR do j = ybegin, yend do i = iiL, iiR df(i,j,k) = ae *( f(i,j+1,k)-f(i,j-0,k) ) & + be *( f(i,j+2,k)-f(i,j-1,k) ) & + ce *( f(i,j+3,k)-f(i,j-2,k) ) & + de *( f(i,j+4,k)-f(i,j-3,k) ) end do end do end do ! ! Boundary nodes: ! ! Left side: ! if ( nproLy .ge. 1 ) then do k = ikL, ikR do i = iiL, iiR df(i,ybegin-1,k) = (bnd6D(6)*f(i,ybegin-3,k) + & bnd6D(5)*f(i,ybegin-2,k) + & bnd6D(4)*f(i,ybegin-1,k) + & bnd6D(3)*f(i,ybegin+0,k) + & bnd6D(2)*f(i,ybegin+1,k) + & bnd6D(1)*f(i,ybegin+2,k))*rdy end do end do end if ! if ( nproLy .ge. 2 ) then do k = ikL, ikR do i = iiL, iiR df(i,ybegin-2,k) = (bnd4C(4)*f(i,ybegin-3,k) + & bnd4C(3)*f(i,ybegin-2,k) + & bnd4C(2)*f(i,ybegin-1,k) + & bnd4C(1)*f(i,ybegin+0,k))*rdy end do end do end if ! if ( nproLy .eq. 3 ) then do k = ikL, ikR do i = iiL, iiR df(i,ybegin-3,k) = (bnd3A(4)*f(i,ybegin-3,k) + & bnd3A(3)*f(i,ybegin-2,k) + & bnd3A(2)*f(i,ybegin-1,k) + & bnd3A(1)*f(i,ybegin+0,k))*rdy end do end do end if ! ! Right side: ! if ( nproRy .ge. 1 ) then do k = ikL, ikR do i = iiL, iiR df(i,yend+1,k) = -(bnd6D(6)*f(i,yend+4,k) + & bnd6D(5)*f(i,yend+3,k) + & bnd6D(4)*f(i,yend+2,k) + & bnd6D(3)*f(i,yend+1,k) + & bnd6D(2)*f(i,yend+0,k) + & bnd6D(1)*f(i,yend-1,k))*rdy end do end do end if ! if ( nproRy .ge. 2 ) then do k = ikL, ikR do i = iiL, iiR df(i,yend+2,k) = -(bnd4C(4)*f(i,yend+4,k) + & bnd4C(3)*f(i,yend+3,k) + & bnd4C(2)*f(i,yend+2,k) + & bnd4C(1)*f(i,yend+1,k))*rdy end do end do end if ! if ( nproRy .eq. 3 ) then do k = ikL, ikR do i = iiL, iiR df(i,yend+3,k) = -(bnd3A(4)*f(i,yend+4,k) + & bnd3A(3)*f(i,yend+3,k) + & bnd3A(2)*f(i,yend+2,k) + & bnd3A(1)*f(i,yend+1,k))*rdy end do end do end if ! end if ! ! End Centered Difference Operators ! return end ! !===========================================================================