21 |
C !USES: |
C !USES: |
22 |
IMPLICIT NONE |
IMPLICIT NONE |
23 |
#include "EEPARAMS.h" |
#include "EEPARAMS.h" |
|
c#include "PARAMS.h" |
|
24 |
#include "SIZE.h" |
#include "SIZE.h" |
25 |
|
#include "PARAMS.h" |
26 |
#include "GRID.h" |
#include "GRID.h" |
27 |
#include "DIAGNOSTICS_CALC.h" |
#include "DIAGNOSTICS_CALC.h" |
28 |
|
#ifdef ALLOW_OBCS |
29 |
|
# include "OBCS_GRID.h" |
30 |
|
#endif /* ALLOW_OBCS */ |
31 |
|
|
32 |
C !INPUT PARAMETERS: |
C !INPUT PARAMETERS: |
33 |
C myThid :: my thread Id number |
C myThid :: my thread Id number |
41 |
_RL dxLoc, dyLoc, d2Loc, d2Min |
_RL dxLoc, dyLoc, d2Loc, d2Min |
42 |
_RL xLine, xy0, xyLoc, xyMin |
_RL xLine, xy0, xyLoc, xyMin |
43 |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
44 |
|
#ifdef ALLOW_OBCS |
45 |
|
LOGICAL kPsi(1:sNx+1,1:sNy+1,nSx,nSy) |
46 |
|
#endif /* ALLOW_OBCS */ |
47 |
|
|
48 |
C-- Set indices of grid-point location where Psi == 0 |
C-- Set indices of grid-point location where Psi == 0 |
49 |
IF ( xPsi0.EQ.UNSET_RS .OR. yPsi0.EQ.UNSET_RS ) THEN |
IF ( xPsi0.EQ.UNSET_RS .OR. yPsi0.EQ.UNSET_RS ) THEN |
55 |
ENDDO |
ENDDO |
56 |
ENDDO |
ENDDO |
57 |
ELSE |
ELSE |
58 |
|
#ifdef ALLOW_OBCS |
59 |
|
C- set flag where Psi is computed |
60 |
|
DO bj=myByLo(myThid),myByHi(myThid) |
61 |
|
DO bi=myBxLo(myThid),myBxHi(myThid) |
62 |
|
DO j = 1,sNy+1 |
63 |
|
DO i = 1,sNx+1 |
64 |
|
kPsi(i,j,bi,bj) = .TRUE. |
65 |
|
ENDDO |
66 |
|
ENDDO |
67 |
|
IF ( useOBCS ) THEN |
68 |
|
DO j = 1,sNy+1 |
69 |
|
DO i = 1,sNx+1 |
70 |
|
kPsi(i,j,bi,bj) = OBCS_insideMask( i , j ,bi,bj).EQ.oneRS |
71 |
|
& .OR. OBCS_insideMask(i-1, j ,bi,bj).EQ.oneRS |
72 |
|
& .OR. OBCS_insideMask( i ,j-1,bi,bj).EQ.oneRS |
73 |
|
& .OR. OBCS_insideMask(i-1,j-1,bi,bj).EQ.oneRS |
74 |
|
ENDDO |
75 |
|
ENDDO |
76 |
|
ENDIF |
77 |
|
ENDDO |
78 |
|
ENDDO |
79 |
|
#endif /* ALLOW_OBCS */ |
80 |
C- find minimum distance: |
C- find minimum distance: |
81 |
d2Min = -1. _d 0 |
d2Min = -1. _d 0 |
82 |
DO bj=myByLo(myThid),myByHi(myThid) |
DO bj=myByLo(myThid),myByHi(myThid) |
86 |
dxLoc = xG(i,j,bi,bj)-xPsi0 |
dxLoc = xG(i,j,bi,bj)-xPsi0 |
87 |
dyLoc = yG(i,j,bi,bj)-yPsi0 |
dyLoc = yG(i,j,bi,bj)-yPsi0 |
88 |
d2Loc = dxLoc*dxLoc + dyLoc*dyLoc |
d2Loc = dxLoc*dxLoc + dyLoc*dyLoc |
89 |
|
#ifdef ALLOW_OBCS |
90 |
|
IF ((d2Loc.LT.d2Min .OR. d2Min.EQ.-1. _d 0) |
91 |
|
& .AND. kPsi(i,j,bi,bj) ) d2Min = d2Loc |
92 |
|
#else |
93 |
IF ( d2Loc.LT.d2Min .OR. d2Min.EQ.-1. _d 0 ) d2Min = d2Loc |
IF ( d2Loc.LT.d2Min .OR. d2Min.EQ.-1. _d 0 ) d2Min = d2Loc |
94 |
|
#endif |
95 |
ENDDO |
ENDDO |
96 |
ENDDO |
ENDDO |
97 |
ENDDO |
ENDDO |
114 |
dxLoc = xG(i,j,bi,bj)-xPsi0 |
dxLoc = xG(i,j,bi,bj)-xPsi0 |
115 |
dyLoc = yG(i,j,bi,bj)-yPsi0 |
dyLoc = yG(i,j,bi,bj)-yPsi0 |
116 |
d2Loc = dxLoc*dxLoc + dyLoc*dyLoc |
d2Loc = dxLoc*dxLoc + dyLoc*dyLoc |
117 |
|
#ifdef ALLOW_OBCS |
118 |
|
IF ( d2Loc.EQ.d2Min .AND. kPsi(i,j,bi,bj) ) THEN |
119 |
|
#else |
120 |
IF ( d2Loc.EQ.d2Min ) THEN |
IF ( d2Loc.EQ.d2Min ) THEN |
121 |
|
#endif |
122 |
xyLoc = xy0 + i + (j-1)*xLine |
xyLoc = xy0 + i + (j-1)*xLine |
123 |
IF ( xyMin.EQ.0. _d 0 ) THEN |
IF ( xyMin.EQ.0. _d 0 ) THEN |
124 |
xyMin = xyLoc |
xyMin = xyLoc |
184 |
& SQUEEZE_RIGHT, myThid ) |
& SQUEEZE_RIGHT, myThid ) |
185 |
ENDIF |
ENDIF |
186 |
ENDIF |
ENDIF |
187 |
|
c WRITE(standardMessageUnit,'(2(A,2I5))') |
188 |
|
c & ' bi,bj=',bi,bj,' i,jPsi0=', iPsi0(bi,bj),jPsi0(bi,bj) |
189 |
ENDDO |
ENDDO |
190 |
ENDDO |
ENDDO |
191 |
ENDIF |
ENDIF |