File indexing completed on 2023-01-19 06:09:43 UTC
view on githubraw file Latest commit 1d99daea on 2023-01-18 14:54:58 UTC
4b158a6b20 Jean*0001 #include "DIAG_OPTIONS.h"
0002
0003
0004
0005
0006
0007
0008 SUBROUTINE DIAGNOSTICS_SUM_LEVELS(
0009 I listId, md, ndId, ip, im, lm,
0010 U fld3d,
0011 I undef,
0012 I myTime, myIter, myThid )
0013
0014
0015
0016
0017
0018
0019
0020 IMPLICIT NONE
0021 #include "SIZE.h"
0022 #include "EEPARAMS.h"
0023 #include "PARAMS.h"
0024 #include "GRID.h"
0025 #include "DIAGNOSTICS_SIZE.h"
0026 #include "DIAGNOSTICS.h"
0027
0028 INTEGER NrMax
0029 PARAMETER( NrMax = numLevels )
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043 INTEGER listId, md, ndId, ip, im, lm
0044 _RL fld3d(1-OLx:sNx+OLx,1-OLy:sNy+OLy,NrMax,nSx,nSy)
0045 _RL undef
0046 _RL myTime
0047 INTEGER myIter, myThid
0048
0049
0050
0051
0052
0053
0054 INTEGER i, j, k
0055 INTEGER bi, bj
0056 INTEGER kLev
0057 _RL tmpFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0058 _RL tmpFac, hFacLoc
0059
0060 CHARACTER*(10) gcode
6094e476c8 Jean*0061 LOGICAL wFac
4b158a6b20 Jean*0062
0063
0064
6094e476c8 Jean*0065 IF ( fflags(listId)(2:2).EQ.'I' ) THEN
4b158a6b20 Jean*0066
0067 gcode = gdiag(ndId)(1:10)
6094e476c8 Jean*0068 wFac = jdiag(md,listId).LT.0
4b158a6b20 Jean*0069
0070
0071 DO bj = myByLo(myThid), myByHi(myThid)
0072 DO bi = myBxLo(myThid), myBxHi(myThid)
0073
0074 DO j = 1-OLy,sNy+OLy
0075 DO i = 1-OLx,sNx+OLx
0076 tmpFld(i,j) = 0. _d 0
0077 ENDDO
0078 ENDDO
0079
0080 IF ( gcode(3:3).EQ.' ' ) THEN
0081
0082
0083 DO k = 1,nlevels(listId)
0084 kLev = NINT(levs(k,listId))
1d99daeaf6 Oliv*0085 DO j = 1,sNy+1
0086 DO i = 1,sNx+1
4b158a6b20 Jean*0087 tmpFld(i,j) = tmpFld(i,j) + fld3d(i,j,kLev,bi,bj)
0088 ENDDO
0089 ENDDO
0090 ENDDO
0091 DO j = 1-OLy,sNy+OLy
0092 DO i = 1-OLx,sNx+OLx
0093 fld3d(i,j,1,bi,bj) = tmpFld(i,j)
0094 ENDDO
0095 ENDDO
0096
6094e476c8 Jean*0097 ELSEIF ( gcode(3:3).EQ.'r' .OR.
0098 & (gcode(3:3).EQ.'R' .AND. wFac) ) THEN
4b158a6b20 Jean*0099
0100
0101 DO k = 1,nlevels(listId)
0102 kLev = NINT(levs(k,listId))
0103 IF ( gcode(9:9).EQ.'L' ) THEN
0104 tmpFac = drC(kLev)
0105 ELSE
0106 tmpFac = drF(kLev)
0107 ENDIF
1d99daeaf6 Oliv*0108 DO j = 1,sNy+1
0109 DO i = 1,sNx+1
4b158a6b20 Jean*0110 tmpFld(i,j) = tmpFld(i,j)
0111 & + tmpFac*fld3d(i,j,kLev,bi,bj)
0112 ENDDO
0113 ENDDO
0114 ENDDO
0115 DO j = 1-OLy,sNy+OLy
0116 DO i = 1-OLx,sNx+OLx
0117 fld3d(i,j,1,bi,bj) = tmpFld(i,j)
0118 ENDDO
0119 ENDDO
0120
0121 ELSEIF ( gcode(3:3).EQ.'R' ) THEN
0122
0123
0124 IF ( gcode(2:2).EQ.'M' ) THEN
0125 DO k = 1,nlevels(listId)
0126 kLev = NINT(levs(k,listId))
0127 IF ( gcode(9:9).EQ.'L' ) THEN
0128 tmpFac = drC(kLev)
0129 ELSE
0130 tmpFac = drF(kLev)
0131 ENDIF
1d99daeaf6 Oliv*0132 DO j = 1,sNy+1
0133 DO i = 1,sNx+1
4b158a6b20 Jean*0134 tmpFld(i,j) = tmpFld(i,j)
0135 & + tmpFac*fld3d(i,j,kLev,bi,bj)
0136 & *hFacC(i,j,kLev,bi,bj)
0137 ENDDO
0138 ENDDO
0139 ENDDO
0140 ELSEIF ( gcode(2:2).EQ.'U' ) THEN
0141 DO k = 1,nlevels(listId)
0142 kLev = NINT(levs(k,listId))
0143 IF ( gcode(9:9).EQ.'L' ) THEN
0144 tmpFac = drC(kLev)
0145 ELSE
0146 tmpFac = drF(kLev)
0147 ENDIF
1d99daeaf6 Oliv*0148 DO j = 1,sNy+1
0149 DO i = 1,sNx+1
4b158a6b20 Jean*0150 tmpFld(i,j) = tmpFld(i,j)
0151 & + tmpFac*fld3d(i,j,kLev,bi,bj)
0152 & *hFacW(i,j,kLev,bi,bj)
0153 ENDDO
0154 ENDDO
0155 ENDDO
0156 ELSEIF ( gcode(2:2).EQ.'V' ) THEN
0157 DO k = 1,nlevels(listId)
0158 kLev = NINT(levs(k,listId))
0159 IF ( gcode(9:9).EQ.'L' ) THEN
0160 tmpFac = drC(kLev)
0161 ELSE
0162 tmpFac = drF(kLev)
0163 ENDIF
1d99daeaf6 Oliv*0164 DO j = 1,sNy+1
0165 DO i = 1,sNx+1
4b158a6b20 Jean*0166 tmpFld(i,j) = tmpFld(i,j)
0167 & + tmpFac*fld3d(i,j,kLev,bi,bj)
0168 & *hFacS(i,j,kLev,bi,bj)
0169 ENDDO
0170 ENDDO
0171 ENDDO
0172 ELSEIF ( gcode(2:2).EQ.'Z' ) THEN
0173 DO k = 1,nlevels(listId)
0174 kLev = NINT(levs(k,listId))
0175 IF ( gcode(9:9).EQ.'L' ) THEN
0176 tmpFac = drC(kLev)
0177 ELSE
0178 tmpFac = drF(kLev)
0179 ENDIF
1d99daeaf6 Oliv*0180 DO j = 1,sNy+1
0181 DO i = 1,sNx+1
4b158a6b20 Jean*0182 hFacLoc = MIN(
0183 & hFacW( i, j, kLev,bi,bj),
0184 & hFacW( i,j-1,kLev,bi,bj),
0185 & hFacS( i, j, kLev,bi,bj),
0186 & hFacS(i-1,j, kLev,bi,bj)
0187 & )
0188 tmpFld(i,j) = tmpFld(i,j)
0189 & + tmpFac*fld3d(i,j,kLev,bi,bj)
0190 & *hFacLoc
0191 ENDDO
0192 ENDDO
0193 ENDDO
0194 ELSE
0195 STOP 'DIAGNOSTICS_SUM_LEVELS: invalid gcode(2)'
0196 ENDIF
0197 DO j = 1-OLy,sNy+OLy
0198 DO i = 1-OLx,sNx+OLx
0199 fld3d(i,j,1,bi,bj) = tmpFld(i,j)
0200 ENDDO
0201 ENDDO
0202
0203 ELSE
0204 STOP 'DIAGNOSTICS_SUM_LEVELS: Bad gcode(3) option'
0205 ENDIF
0206
0207
0208 ENDDO
0209 ENDDO
0210
0211 ENDIF
0212
0213 RETURN
0214 END