C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/generic_advdiff/gad_pqm_p5e_y.F,v 1.1 2016/03/13 01:44:03 jmc Exp $ C $Name: $ # include "GAD_OPTIONS.h" SUBROUTINE GAD_PQM_P5E_Y(bi,bj,kk,ix, & mask,fbar,edge,myThid) C |================================================================| C | PQM_P5E_Y: approximate edge values with degree-5 polynomials. | C | Fixed grid-spacing variant in Y. | C |================================================================| implicit none C =============================================== global variables # include "SIZE.h" # include "GRID.h" # include "GAD.h" C ====================================================== arguments integer bi,bj,kk,ix _RL mask(1-OLy:sNy+OLy) _RL fbar(1-OLy:sNy+OLy) _RL edge(1:2, & 1-OLy:sNy+OLy) integer myThid C ====================================================== variables integer iy _RL mloc(-3:+2) _RL floc(-3:+2) _RL ftmp C ==================== reconstruct 5th--order accurate edge values do iy = 1-OLy+3, sNy+OLy-2 C ================ mask local stencil: expand from centre outwards mloc(-1) = mask(iy-1) mloc(+0) = mask(iy+0) floc(-1) = fbar(iy+0) & + mloc(-1)*(fbar(iy-1)-fbar(iy+0)) floc(+0) = fbar(iy-1) & + mloc(+0)*(fbar(iy+0)-fbar(iy-1)) mloc(-2) = mask(iy-2) * mloc(-1) mloc(-3) = mask(iy-3) * mloc(-2) ftmp = 2. _d 0 * floc(-1) - floc(+0) floc(-2) = ftmp & + mloc(-2)*(fbar(iy-2)-ftmp) ftmp = 2. _d 0 * floc(-2) - floc(-1) floc(-3) = ftmp & + mloc(-3)*(fbar(iy-3)-ftmp) mloc(+1) = mask(iy+1) * mloc(+0) mloc(+2) = mask(iy+2) * mloc(+1) ftmp = 2. _d 0 * floc(+0) - floc(-1) floc(+1) = ftmp & + mloc(+1)*(fbar(iy+1)-ftmp) ftmp = 2. _d 0 * floc(+1) - floc(+0) floc(+2) = ftmp & + mloc(+2)*(fbar(iy+2)-ftmp) C ================ centred, 5th-order interpolation for edge value edge(1,iy) = & +( 1. _d 0/60. _d 0)*(floc(-3)+floc(+2)) & -( 8. _d 0/60. _d 0)*(floc(-2)+floc(+1)) & +(37. _d 0/60. _d 0)*(floc(-1)+floc(+0)) edge(2,iy) = ( & -( 1. _d 0/90. _d 0)*(floc(-3)-floc(+2)) & +( 5. _d 0/36. _d 0)*(floc(-2)-floc(+1)) & -(49. _d 0/36. _d 0)*(floc(-1)-floc(+0)) & ) * recip_dyC(ix,iy,bi,bj) end do return c end subroutine GAD_PQM_P5E_Y end