/[MITgcm]/MITgcm/pkg/diagnostics/diagnostics_set_calc.F
ViewVC logotype

Contents of /MITgcm/pkg/diagnostics/diagnostics_set_calc.F

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


Revision 1.1 - (show annotations) (download)
Wed Jul 6 01:43:49 2011 UTC (12 years, 11 months ago) by jmc
Branch: MAIN
add parameter to select grid-point location where PsiVEL == 0

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_is_on.F,v 1.4 2006/10/17 18:56:31 jmc Exp $
2 C $Name: $
3
4 #include "DIAG_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7
8 CBOP 0
9 C !ROUTINE: DIAGNOSTICS_SET_CALC
10
11 C !INTERFACE:
12 SUBROUTINE DIAGNOSTICS_SET_CALC( myThid )
13
14 C !DESCRIPTION:
15 C *==========================================================*
16 C | S/R DIAGNOSTICS_SET_CALC
17 C | Set parameters and variables used in post-processing
18 C | diagnostics
19 C *==========================================================*
20
21 C !USES:
22 IMPLICIT NONE
23 #include "EEPARAMS.h"
24 c#include "PARAMS.h"
25 #include "SIZE.h"
26 #include "GRID.h"
27 #include "DIAGNOSTICS_CALC.h"
28
29 C !INPUT PARAMETERS:
30 C myThid :: my thread Id number
31 INTEGER myThid
32 CEOP
33
34 C !LOCAL VARIABLES:
35 INTEGER bi, bj
36 INTEGER i, j
37 INTEGER biG, bjG
38 _RL dxLoc, dyLoc, d2Loc, d2Min
39 _RL xLine, xy0, xyLoc, xyMin
40 CHARACTER*(MAX_LEN_MBUF) msgBuf
41
42 C-- Set indices of grid-point location where Psi == 0
43 IF ( xPsi0.EQ.UNSET_RS .OR. yPsi0.EQ.UNSET_RS ) THEN
44 C- Set indices to (-1,0) = disabled value
45 DO bj=myByLo(myThid),myByHi(myThid)
46 DO bi=myBxLo(myThid),myBxHi(myThid)
47 iPsi0(bi,bj) = -1
48 jPsi0(bi,bj) = 0
49 ENDDO
50 ENDDO
51 ELSE
52 C- find minimum distance:
53 d2Min = -1. _d 0
54 DO bj=myByLo(myThid),myByHi(myThid)
55 DO bi=myBxLo(myThid),myBxHi(myThid)
56 DO j = 1,sNy+1
57 DO i = 1,sNx+1
58 dxLoc = xG(i,j,bi,bj)-xPsi0
59 dyLoc = yG(i,j,bi,bj)-yPsi0
60 d2Loc = dxLoc*dxLoc + dyLoc*dyLoc
61 IF ( d2Loc.LT.d2Min .OR. d2Min.EQ.-1. _d 0 ) d2Min = d2Loc
62 ENDDO
63 ENDDO
64 ENDDO
65 ENDDO
66 d2Min = -d2Min
67 _GLOBAL_MAX_RL( d2Min, myThid )
68 d2Min = -d2Min
69 C- find list of grid-points at minimum distance:
70 xyMin = 0.
71 xLine = (sNx+1)*nSx*nPx
72 DO bj=myByLo(myThid),myByHi(myThid)
73 DO bi=myBxLo(myThid),myBxHi(myThid)
74 iPsi0(bi,bj) = 0
75 jPsi0(bi,bj) = 0
76 biG = bi-1+(myXGlobalLo-1)/sNx
77 bjG = bj-1+(myYGlobalLo-1)/sNy
78 xy0 = biG*(sNx+1) + bjG*(sNy+1)*xLine
79 DO j = 1,sNy+1
80 DO i = 1,sNx+1
81 dxLoc = xG(i,j,bi,bj)-xPsi0
82 dyLoc = yG(i,j,bi,bj)-yPsi0
83 d2Loc = dxLoc*dxLoc + dyLoc*dyLoc
84 IF ( d2Loc.EQ.d2Min ) THEN
85 xyLoc = xy0 + i + (j-1)*xLine
86 IF ( xyMin.EQ.0. _d 0 ) THEN
87 xyMin = xyLoc
88 ELSE
89 xyMin = MIN( xyMin, xyLoc )
90 ENDIF
91 iPsi0(bi,bj) = i
92 jPsi0(bi,bj) = j
93 ENDIF
94 ENDDO
95 ENDDO
96 ENDDO
97 ENDDO
98 xyMin = -xyMin
99 _GLOBAL_MAX_RL( xyMin, myThid )
100 xyMin = -xyMin
101 C- select only one (based on minimum global-map index)
102 _BARRIER
103 _BEGIN_MASTER( myThid )
104 WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_SET_CALC: ',
105 & 'setting indices iPsi0,jPsi0 where Psi == 0 :'
106 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
107 & SQUEEZE_RIGHT, myThid )
108 WRITE(msgBuf,'(A,1P1E19.6,A,0PF16.3)')
109 & 'DIAGNOSTICS_SET_CALC: d2Min=',d2Min, ', ijMin=',xyMin
110 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
111 & SQUEEZE_RIGHT, myThid )
112 IF ( xyMin.EQ.0. _d 0 ) THEN
113 WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_SET_CALC: ',
114 & 'Fail to find the minimum distance => use Default'
115 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
116 & SQUEEZE_RIGHT, myThid )
117 DO bj=1,nSy
118 DO bi=1,nSx
119 iPsi0(bi,bj) = -1
120 jPsi0(bi,bj) = 0
121 ENDDO
122 ENDDO
123 ELSE
124 DO bj=1,nSy
125 DO bi=1,nSx
126 IF ( iPsi0(bi,bj).GT.0 ) THEN
127 biG = bi-1+(myXGlobalLo-1)/sNx
128 bjG = bj-1+(myYGlobalLo-1)/sNy
129 xy0 = biG*(sNx+1) + bjG*(sNy+1)*xLine
130 xyLoc = xy0 + iPsi0(bi,bj) + (jPsi0(bi,bj)-1)*xLine
131 d2Loc = ABS( xyLoc - xyMin )
132 IF ( d2Loc.GE.0.5 _d 0 ) THEN
133 WRITE(msgBuf,'(2(A,2I5),A,F16.3)')
134 & ' discard: bi,bj=',bi,bj,
135 & ' ; i,j=',iPsi0(bi,bj),jPsi0(bi,bj),' ; ijLoc=',xyLoc
136 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
137 & SQUEEZE_RIGHT, myThid )
138 iPsi0(bi,bj) = 0
139 jPsi0(bi,bj) = 0
140 ELSE
141 WRITE(msgBuf,'(2(A,2I5),A,F16.3)')
142 & ' SELECT : bi,bj=',bi,bj,
143 & ' ; i,j=',iPsi0(bi,bj),jPsi0(bi,bj),' ; ijLoc=',xyLoc
144 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
145 & SQUEEZE_RIGHT, myThid )
146 ENDIF
147 ENDIF
148 ENDDO
149 ENDDO
150 ENDIF
151 WRITE(msgBuf,'(2A)')
152 & '------------------------------------------------------------'
153 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
154 & SQUEEZE_RIGHT, myThid )
155 _END_MASTER( myThid )
156 _BARRIER
157 ENDIF
158
159 RETURN
160 END

  ViewVC Help
Powered by ViewVC 1.1.22