/[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.2 - (show annotations) (download)
Wed Jul 6 15:28:24 2011 UTC (12 years, 11 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint64, checkpoint65, checkpoint63, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e
Changes since 1.1: +4 -2 lines
fix for multi processors

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_set_calc.F,v 1.1 2011/07/06 01:43:49 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 xyLoc = (sNx+1)*(sNy+1)*nSx*nSy*nPx*nPy + 2.
99 IF ( xyMin.EQ.0. _d 0 ) xyMin = xyLoc
100 xyMin = -xyMin
101 _GLOBAL_MAX_RL( xyMin, myThid )
102 xyMin = -xyMin
103 C- select only one (based on minimum global-map index)
104 _BARRIER
105 _BEGIN_MASTER( myThid )
106 WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_SET_CALC: ',
107 & 'setting indices iPsi0,jPsi0 where Psi == 0 :'
108 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
109 & SQUEEZE_RIGHT, myThid )
110 WRITE(msgBuf,'(A,1P1E19.6,A,0PF16.3)')
111 & 'DIAGNOSTICS_SET_CALC: d2Min=',d2Min, ', ijMin=',xyMin
112 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
113 & SQUEEZE_RIGHT, myThid )
114 IF ( xyMin.EQ.xyLoc ) THEN
115 WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_SET_CALC: ',
116 & 'Fail to find the minimum distance => use Default'
117 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
118 & SQUEEZE_RIGHT, myThid )
119 DO bj=1,nSy
120 DO bi=1,nSx
121 iPsi0(bi,bj) = -1
122 jPsi0(bi,bj) = 0
123 ENDDO
124 ENDDO
125 ELSE
126 DO bj=1,nSy
127 DO bi=1,nSx
128 IF ( iPsi0(bi,bj).GT.0 ) THEN
129 biG = bi-1+(myXGlobalLo-1)/sNx
130 bjG = bj-1+(myYGlobalLo-1)/sNy
131 xy0 = biG*(sNx+1) + bjG*(sNy+1)*xLine
132 xyLoc = xy0 + iPsi0(bi,bj) + (jPsi0(bi,bj)-1)*xLine
133 d2Loc = ABS( xyLoc - xyMin )
134 IF ( d2Loc.GE.0.5 _d 0 ) THEN
135 WRITE(msgBuf,'(2(A,2I5),A,F16.3)')
136 & ' discard: bi,bj=',bi,bj,
137 & ' ; i,j=',iPsi0(bi,bj),jPsi0(bi,bj),' ; ijLoc=',xyLoc
138 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
139 & SQUEEZE_RIGHT, myThid )
140 iPsi0(bi,bj) = 0
141 jPsi0(bi,bj) = 0
142 ELSE
143 WRITE(msgBuf,'(2(A,2I5),A,F16.3)')
144 & ' SELECT : bi,bj=',bi,bj,
145 & ' ; i,j=',iPsi0(bi,bj),jPsi0(bi,bj),' ; ijLoc=',xyLoc
146 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
147 & SQUEEZE_RIGHT, myThid )
148 ENDIF
149 ENDIF
150 ENDDO
151 ENDDO
152 ENDIF
153 WRITE(msgBuf,'(2A)')
154 & '------------------------------------------------------------'
155 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
156 & SQUEEZE_RIGHT, myThid )
157 _END_MASTER( myThid )
158 _BARRIER
159 ENDIF
160
161 RETURN
162 END

  ViewVC Help
Powered by ViewVC 1.1.22