File indexing completed on 2021-11-06 05:17:09 UTC
view on githubraw file Latest commit 1c2b1fa3 on 2021-10-19 18:24:13 UTC
aecc8b0f47 Mart*0001 #include "AUTODIFF_OPTIONS.h"
0002 #ifdef ALLOW_CTRL
0003 # include "CTRL_OPTIONS.h"
0004 #endif
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 SUBROUTINE CG2D_MAD(
0015 U cg2d_b_ad,
0016 U cg2d_x_ad,
0017 U numIters, nIterMin,
0018 I myThid )
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042 IMPLICIT NONE
0043
0044 #include "SIZE.h"
0045 #include "EEPARAMS.h"
0046 #include "PARAMS.h"
0047 #if ( defined NONLIN_FRSURF || defined ALLOW_DEPTH_CONTROL )
0048 # include "CG2D.h"
0049 #endif
0050 #ifdef ALLOW_AUTODIFF_TAMC
0051 # include "AUTODIFF_PARAMS.h"
0052 #endif
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066 _RL cg2d_b_ad(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0067 _RL cg2d_x_ad(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0068
0069 INTEGER numIters
0070 INTEGER nIterMin
0071 INTEGER myThid
0072
0073 #ifdef ALLOW_AUTODIFF_TAMC
0074 #if ( defined NONLIN_FRSURF || defined ALLOW_DEPTH_CONTROL )
0075
0076
f71d880987 Jean*0077 _RS aW2d_ad(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0078 _RS aS2d_ad(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0079 _RS aC2d_ad(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0080 _RS pW_ad (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0081 _RS pS_ad (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0082 _RS pC_ad (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
1c2b1fa3bc Mart*0083 COMMON /ADCG2D_I_RS/
aecc8b0f47 Mart*0084 & aW2d_ad, aS2d_ad, aC2d_ad, pW_ad, pS_ad, pC_ad
0085 #endif /* NONLIN_FRSURF or ALLOW_DEPTH_CONTROL */
0086
0087
0088
0089
0090
0091
0092 INTEGER i,j,bi,bj
0093 _RL firstResidual, minResidualSq, lastResidual
0094 #if ( defined NONLIN_FRSURF || defined ALLOW_DEPTH_CONTROL )
0095 INTEGER numItersFwd, nIterMinFwd
0096 _RL recip_cg2dNorm
0097 _RL cg2d_x(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0098 #endif
0099 CHARACTER*(MAX_LEN_MBUF) msgBuf
0100
0101
0102
0103 IF ( debugLevel .GE. debLevZero ) THEN
0104 _BEGIN_MASTER( myThid )
44d3986245 Jean*0105 WRITE(standardMessageUnit,'(A)')
aecc8b0f47 Mart*0106 & ' Calling cg2d from S/R CG2D_MAD'
0107 _END_MASTER( myThid )
0108 ENDIF
0109
0110 #if ( defined NONLIN_FRSURF || defined ALLOW_DEPTH_CONTROL )
0111
0112 numItersFwd = numIters
0113 nIterMinFwd = nIterMin
0114 #endif
0115
0116 #ifdef ALLOW_SRCG
0117 IF ( useSRCGSolver ) THEN
0118
0119 CALL CG2D_SR(
0120 U cg2d_x_ad, cg2d_b_ad,
0121 O firstResidual, minResidualSq, lastResidual,
0122 U numIters, nIterMin,
0123 I myThid )
0124 ELSE
0125 #else
0126 IF (.TRUE.) THEN
0127 #endif /* ALLOW_SRCG */
0128
0129 CALL CG2D(
0130 U cg2d_x_ad, cg2d_b_ad,
0131 O firstResidual, minResidualSq, lastResidual,
0132 U numIters, nIterMin,
0133 I myThid )
0134 ENDIF
0135
0136
0137
0138
0139
0140
0141
0142 DO bj=myByLo(myThid),myByHi(myThid)
0143 DO bi=myBxLo(myThid),myBxHi(myThid)
0144 DO j=1-OLy,sNy+OLy
0145 DO i=1-OLx,sNx+OLx
0146 cg2d_x_ad(i,j,bi,bj) = 0. _d 0
0147 ENDDO
0148 ENDDO
0149 ENDDO
0150 ENDDO
0151
0152
0153
0154
0155 IF ( debugLevel .GE. debLevC ) THEN
0156 _BEGIN_MASTER( myThid )
0157 WRITE(msgBuf,'(A30,1PE23.14)')
0158 & 'CG2D_MAD cg2d_init_res =',firstResidual
0159 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
0160 WRITE(msgBuf,'(A37,2I8)')
0161 & 'CG2D_MAD: cg2d_iters(min,last) =', nIterMin, numIters
0162 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
0163 IF ( minResidualSq.GE.0. ) THEN
0164 minResidualSq = SQRT(minResidualSq)
0165 WRITE(msgBuf,'(A30,1PE23.14)')
0166 & 'CG2D_MAD: cg2d_min_res =',minResidualSq
0167 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
0168 ENDIF
0169 WRITE(msgBuf,'(A30,1PE23.14)')
0170 & 'CG2D_MAD: cg2d_last_res =',lastResidual
0171 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
0172 _END_MASTER( myThid )
0173 ENDIF
0174
0175 #if ( defined NONLIN_FRSURF || defined ALLOW_DEPTH_CONTROL )
0176 recip_cg2dNorm = 1.0 _d 0
0177 IF ( cg2dNorm .NE. 0. _d 0 ) THEN
0178 recip_cg2dNorm = 1./cg2dNorm
0179 ENDIF
0180
0181 IF ( cg2dFullAdjoint ) THEN
0182
0183 CALL CG2D_STORE( cg2d_x, .FALSE., myThid )
0184
0185
0186 DO bj=myByLo(myThid),myByHi(myThid)
0187 DO bi=myBxLo(myThid),myBxHi(myThid)
0188 DO j=1,sNy
0189 DO i=1,sNx
0190 aC2d_ad(i,j,bi,bj) = aC2d_ad(i,j,bi,bj)
0191 & - cg2d_b_ad(i,j,bi,bj) * cg2d_x(i,j,bi,bj)
0192 & * recip_cg2dNorm
0193 aW2d_ad(i, j,bi,bj) = aW2d_ad(i,j,bi,bj)
0194 & - cg2d_b_ad(i,j,bi,bj) * cg2d_x(i-1,j,bi,bj)
0195 & * recip_cg2dNorm
0196 aW2d_ad(i+1,j,bi,bj) = aW2d_ad(i+1,j,bi,bj)
0197 & - cg2d_b_ad(i,j,bi,bj) * cg2d_x(i+1,j,bi,bj)
0198 & * recip_cg2dNorm
0199 aS2d_ad(i,j, bi,bj) = aS2d_ad(i,j,bi,bj)
0200 & - cg2d_b_ad(i,j,bi,bj) * cg2d_x(i,j-1,bi,bj)
0201 & * recip_cg2dNorm
0202 aS2d_ad(i,j+1,bi,bj) = aS2d_ad(i,j+1,bi,bj)
0203 & - cg2d_b_ad(i,j,bi,bj) * cg2d_x(i,j+1,bi,bj)
0204 & * recip_cg2dNorm
0205
0206
0207
0208
0209
0210
0211
0212
0213 pW_ad(i,j,bi,bj) = 0. _d 0
0214 pS_ad(i,j,bi,bj) = 0. _d 0
0215 pC_ad(i,j,bi,bj) = 0. _d 0
0216 ENDDO
0217 ENDDO
0218 ENDDO
0219 ENDDO
0220 ELSE
0221
0222
0223 DO bj=myByLo(myThid),myByHi(myThid)
0224 DO bi=myBxLo(myThid),myBxHi(myThid)
0225 DO j=1-OLy,sNy+OLy
0226 DO i=1-OLx,sNx+OLx
0227 aW2d_ad(i,j,bi,bj) = 0. _d 0
0228 aS2d_ad(i,j,bi,bj) = 0. _d 0
0229 aC2d_ad(i,j,bi,bj) = 0. _d 0
0230 pW_ad (i,j,bi,bj) = 0. _d 0
0231 pS_ad (i,j,bi,bj) = 0. _d 0
0232 pC_ad (i,j,bi,bj) = 0. _d 0
0233 ENDDO
0234 ENDDO
0235 ENDDO
0236 ENDDO
0237 ENDIF
0238 #endif /* NONLIN_FRSURF or ALLOW_DEPTH_CONTROL */
0239 #endif /* ALLOW_AUTODIFF_TAMC */
0240
0241 RETURN
0242 END
0243
0244
0245
0246
0247
0248
0249 SUBROUTINE CG2D_STORE(
0250 U cg2d_x,
0251 I doStore,
0252 I myThid )
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264 IMPLICIT NONE
0265
0266 #include "SIZE.h"
0267 #include "EEPARAMS.h"
0268 #include "PARAMS.h"
0269 #include "AUTODIFF_PARAMS.h"
0270 #ifdef ALLOW_AUTODIFF_TAMC
0271 # include "tamc.h"
0272 #endif
0273
0274
0275
0276
0277
0278
0279 _RL cg2d_x(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0280 LOGICAL doStore
0281 INTEGER myThid
0282
0283 #ifdef ALLOW_AUTODIFF_TAMC
0284 #if ( defined NONLIN_FRSURF || defined ALLOW_DEPTH_CONTROL )
0285 _RL cg2d_tape(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,nchklev_1)
0286 COMMON /CG2D_TAPE_RL/ cg2d_tape
0287
0288
0289
0290
0291
0292 INTEGER i,j,bi,bj
0293
0294
0295
0296 IF ( debugLevel .GE. debLevZero ) THEN
0297 _BEGIN_MASTER( myThid )
44d3986245 Jean*0298 WRITE(standardMessageUnit,'(A,L1)')
aecc8b0f47 Mart*0299 & ' Calling CG2D_STORE with doStore = ', doStore
44d3986245 Jean*0300 WRITE(standardMessageUnit,'(A,I6)')
0301 & ' Calling CG2D_STORE with ikey_dynamics=', ikey_dynamics
aecc8b0f47 Mart*0302 _END_MASTER( myThid )
0303 ENDIF
0304
0305 IF ( doStore ) THEN
0306
0307 DO bj = myByLo(myThid), myByHi(myThid)
0308 DO bi = myBxLo(myThid), myBxHi(myThid)
0309 DO j=1-OLy,sNy+OLy
0310 DO i=1-OLx,sNx+OLx
0311 cg2d_tape(i,j,bi,bj,ikey_dynamics) = cg2d_x(i,j,bi,bj)
0312 ENDDO
0313 ENDDO
0314 ENDDO
0315 ENDDO
0316 ELSE
0317
0318 DO bj = myByLo(myThid), myByHi(myThid)
0319 DO bi = myBxLo(myThid), myBxHi(myThid)
0320 DO j=1-OLy,sNy+OLy
0321 DO i=1-OLx,sNx+OLx
0322 cg2d_x(i,j,bi,bj) = cg2d_tape(i,j,bi,bj,ikey_dynamics)
0323 ENDDO
0324 ENDDO
0325 ENDDO
0326 ENDDO
0327 ENDIF
0328 #endif /* NONLIN_FRSURF or ALLOW_DEPTH_CONTROL */
0329 #endif /* ALLOW_AUTODIFF_TAMC */
0330
0331 RETURN
0332 END