/[MITgcm]/MITgcm/pkg/exf/exf_interp.F
ViewVC logotype

Diff of /MITgcm/pkg/exf/exf_interp.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.37 by jmc, Fri Mar 10 00:16:11 2017 UTC revision 1.38 by jmc, Thu Jun 15 23:10:30 2017 UTC
# Line 97  C     arrayin     :: input field array ( Line 97  C     arrayin     :: input field array (
97        _RS      xG(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)        _RS      xG(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
98        _RS      threeSixtyRS        _RS      threeSixtyRS
99        _RL      yPole, symSign, poleValue        _RL      yPole, symSign, poleValue
100          _RL      edgeFac, poleFac
101        PARAMETER ( threeSixtyRS = 360. )        PARAMETER ( threeSixtyRS = 360. )
102        PARAMETER ( yPole = 90. )        PARAMETER ( yPole = 90. )
103        INTEGER  nxd2        INTEGER  nxd2
# Line 226  C-    fill-in added column from nearest Line 227  C-    fill-in added column from nearest
227         IF ( l.GE.1 ) j = nyIn+l         IF ( l.GE.1 ) j = nyIn+l
228         k = MAX(1,MIN(j,nyIn))         k = MAX(1,MIN(j,nyIn))
229         IF ( poleSymmetry .AND. ABS(y_in(j)).GT.yPole ) THEN         IF ( poleSymmetry .AND. ABS(y_in(j)).GT.yPole ) THEN
230            IF ( nyIn.GE.3 .AND. ABS(y_in(k)).EQ.yPole )
231         &    k = MAX(2,MIN(j,nyIn-1))
232  C-    fill-in added row assuming pole-symmetry  C-    fill-in added row assuming pole-symmetry
233          DO i=-1,nxd2          DO i=-1,nxd2
234           arrayin(i,j) = symSign*arrayin(i+nxd2,k)           arrayin(i,j) = symSign*arrayin(i+nxd2,k)
# Line 284  C     averaging properly done if uvInter Line 287  C     averaging properly done if uvInter
287          ENDIF          ENDIF
288         ENDDO         ENDDO
289        ENDIF        ENDIF
290    #ifndef EXF_USE_OLD_INTERP_POLE
291          IF (method.EQ.1 .OR. method.EQ.2) THEN
292    C-    change first additional row from simple copy to linear interpolation
293    C     between nearest column values and pole value
294           DO l=0,1
295            k = l*(nyIn+3) -1
296            IF ( ABS(y_in(k)).EQ.yPole ) THEN
297             j = l*(nyIn+1)
298             i = l*(nyIn-1) +1
299             edgeFac = (y_in(j) - y_in(k)) / (y_in(i) - y_in(k))
300             poleFac = (y_in(i) - y_in(j)) / (y_in(i) - y_in(k))
301             DO i=-1,nxIn+2
302               arrayin(i,j) = arrayin(i,j) * edgeFac
303         &                  + arrayin(i,k) * poleFac
304             ENDDO
305    #ifdef ALLOW_DEBUG
306             prtPole(3*l) = prtPole(3*l) + 0.3
307    #endif
308            ENDIF
309           ENDDO
310          ENDIF
311    #endif /* EXF_USE_OLD_INTERP_POLE */
312    
313  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
314        debugFlag = ( exf_debugLev.GE.debLevC )        debugFlag = ( exf_debugLev.GE.debLevC )

Legend:
Removed from v.1.37  
changed lines
  Added in v.1.38

  ViewVC Help
Powered by ViewVC 1.1.22