C $Header: /u/gcmpack/MITgcm/pkg/generic_advdiff/gad_osc_hat_y.F,v 1.1 2016/03/13 01:44:02 jmc Exp $ C $Name: $ # include "GAD_OPTIONS.h" C-- File gad_osc_hat_y.F: Routines ??? C-- Contents C-- o GAD_OSC_LOC_Y C-- o GAD_OSC_HAT_Y C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| SUBROUTINE GAD_OSC_LOC_Y(iy,mask,fbar,ohat) implicit none C =============================================== global variables # include "SIZE.h" C ====================================================== arguments integer iy _RL mask(1-OLy:sNy+OLy) _RL fbar(1-OLy:sNy+OLy) _RL ohat(1:2, & 1-OLy:sNy+OLy) C ====================================================== variables _RL floc(-2:+2) if (iy.gt. +1-OLy .and. & iy.lt.sNy+OLy) then C ================ mask local stencil: expand from centre outwards floc(+0) = fbar(+0+iy) floc(-1) = floc(+0) + & mask(iy-1)*(fbar(iy-1)-floc(+0)) floc(+1) = floc(+0) + & mask(iy+1)*(fbar(iy+1)-floc(+0)) C ================ calc. 1st & 2nd derivatives over masked stencil ohat(+1,iy) = floc(+1)*0.25 _d 0 & - floc(-1)*0.25 _d 0 ohat(+2,iy) = floc(+1)*0.25 _d 0 & - floc(+0)*0.50 _d 0 & + floc(-1)*0.25 _d 0 else if (iy.eq. +1-OLy) then C ================ mask local stencil: expand from centre outwards floc(+0) = fbar(+0+iy) floc(+1) = floc(+0) + & mask(iy+1)*(fbar(iy+1)-floc(+0)) floc(+2) = floc(+1) + & mask(iy+2)*(fbar(iy+2)-floc(+1)) C ================ calc. 1st & 2nd derivatives over masked stencil ohat(+1,iy) = floc(+1)*0.50 _d 0 & - floc(+0)*0.50 _d 0 ohat(+2,iy) = floc(+2)*0.25 _d 0 & - floc(+1)*0.50 _d 0 & + floc(+0)*0.25 _d 0 end if if (iy.eq.sNy+OLy) then C ================ mask local stencil: expand from centre outwards floc(+0) = fbar(+0+iy) floc(-1) = floc(+0) + & mask(iy-1)*(fbar(iy-1)-floc(+0)) floc(-2) = floc(-1) + & mask(iy-2)*(fbar(iy-2)-floc(-1)) C ================ calc. 1st & 2nd derivatives over masked stencil ohat(+1,iy) = floc(+0)*0.50 _d 0 & - floc(-1)*0.50 _d 0 ohat(+2,iy) = floc(+0)*0.25 _d 0 & - floc(-1)*0.50 _d 0 & + floc(-2)*0.25 _d 0 end if end if return c end subroutine GAD_OSC_LOC_Y end C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| SUBROUTINE GAD_OSC_HAT_Y(bi,bj,kk,ix, & mask,fbar,ohat,myThid) C |================================================================| C | OSC_HAT_Y: compute WENO oscillation derivatives in Y. | C |================================================================| implicit none C =============================================== global variables # include "SIZE.h" C ====================================================== arguments integer bi,bj,kk,ix _RL mask(1-OLy:sNy+OLy) _RL fbar(1-OLy:sNy+OLy) _RL ohat(1:2, & 1-OLy:sNy+OLy) integer myThid C ====================================================== variables integer iy C ================================ derivatives for WENO indicators do iy = 1-OLy+0, sNy+OLy-0 CALL GAD_OSC_LOC_Y(iy,mask,fbar,ohat) end do return c end subroutine GAD_OSC_HAT_Y end