File indexing completed on 2025-12-21 17:51:03 UTC
view on githubraw file Latest commit feb7fa5d on 2025-11-21 15:45:20 UTC
b4daa24319 Shre*0001 #include "CPP_EEOPTIONS.h"
feb7fa5d1e dngo*0002 #include "TAPENADE_OPTIONS.h"
0003 #ifdef ALLOW_STREAMICE
0004 # include "STREAMICE_OPTIONS.h"
0005 #endif
b4daa24319 Shre*0006
0007 SUBROUTINE GLOBAL_MAX_R8_B(rhsmax, rhsmaxb, myThid)
0008 IMPLICIT NONE
0009 #include "SIZE.h"
0010 #include "EEPARAMS.h"
0011 #include "EESUPPORT.h"
0012 #include "GLOBAL_MAX.h"
0013 _RL rhsmax
0014 _RL rhsmaxb
0015 INTEGER myThid
0016
0017 CALL GLOBAL_ADMAX_R8(rhsmaxb, myThid)
0018 RETURN
0019 END
0020
0021 SUBROUTINE GLOBAL_SUM_TILE_RL_B(phiTile, phiTileb,
0022 & sumPhi, sumPhib, myThid)
0023 IMPLICIT NONE
0024 #include "SIZE.h"
0025 #include "EEPARAMS.h"
0026 #include "EESUPPORT.h"
0027 #include "GLOBAL_SUM.h"
0028 _RL phiTile(nSx,nSy)
0029 _RL phiTileb(nSx,nSy)
0030 _RL sumPhib
0031 _RL sumPhi
0032 INTEGER myThid
0033
0034 CALL GLOBAL_ADSUM_TILE_RL(phiTileb, sumPhib, myThid)
0035 END
0036
0037
0038 SUBROUTINE GLOBAL_SUM_R8_B(sumPhi, sumPhib, myThid)
0039 IMPLICIT NONE
0040 #include "SIZE.h"
0041 #include "EEPARAMS.h"
0042 #include "EESUPPORT.h"
0043 #include "GLOBAL_SUM.h"
0044 _RL sumPhi
0045 _RL sumPhib
0046 INTEGER myThid
0047
0048 CALL GLOBAL_ADSUM_R8(sumPhib, myThid)
0049 END
0050
0051 SUBROUTINE CG2D_B0(cg2d_b, cg2d_bb, cg2d_x,
0052 & cg2d_xb, firstResidual, minResidualSq,
0053 & lastResidual,numIters, nIterMin,myThid)
0054 IMPLICIT NONE
0055 #include "SIZE.h"
0056 #include "EEPARAMS.h"
0057 #include "PARAMS.h"
0058 #include "CG2D.h"
0059 _RL cg2d_b(1-OLx:sNx+OLx, 1-OLy:sNy+OLy, nSx, nSy)
0060 _RL cg2d_bb(1-OLx:sNx+OLx, 1-OLy:sNy+OLy, nSx, nSy)
0061 _RL cg2d_x(1-OLx:sNx+OLx, 1-OLy:sNy+OLy, nSx, nSy)
0062 _RL cg2d_xb(1-OLx:sNx+OLx, 1-OLy:sNy+OLy, nSx, nSy)
0063 _RL firstResidual
0064 _RL minResidualSq
0065 _RL lastResidual
0066 INTEGER numIters
0067 INTEGER nIterMin
0068 INTEGER myThid
0069
0070
0071
0072 cg2d_bb = 0.d0
0073 CALL CG2D(cg2d_xb, cg2d_bb, firstResidual,
0074 + minResidualSq, lastResidual, numIters,
0075 + nIterMin, myThid)
0076
0077 cg2d_xb = 0.d0
0078 END
0079
0080 SUBROUTINE ADEXCH_3D_RL( adVar, Nr, myThid )
0081 IMPLICIT NONE
0082 Real*8 adVar
0083 INTEGER Nr
0084 INTEGER myThid
0085 WRITE(*,*) "Called not yet defined"
0086 END
0087
0088 SUBROUTINE ADEXCH_UV_XY_RS( adU, adV, bool, myThid )
0089 IMPLICIT NONE
0090 Real*8 adU
0091 Real*8 adV
0092 LOGICAL bool
0093 INTEGER myThid
0094 WRITE(*,*) "Called not yet defined"
0095 END
0096
0097 SUBROUTINE ADEXCH_UV_3D_RL( aduVel,advVel, bool, Nr, myThid )
0098 IMPLICIT NONE
0099 LOGICAL bool
0100 Real*8 aduVel
0101 Real*8 advVel
0102 INTEGER Nr
0103 INTEGER myThid
0104 WRITE(*,*) "Called not yet defined"
0105 END
0106
0107 SUBROUTINE ADEXCH_XY_RS( adVar, myThid )
0108 IMPLICIT NONE
0109 Real*8 adVar
0110 INTEGER myThid
0111 WRITE(*,*) "Called not yet defined"
0112 END
0113
0114 SUBROUTINE ADEXCH_XY_RL( adVar, myThid )
0115 IMPLICIT NONE
0116 Real*8 adVar
0117 INTEGER myThid
0118 WRITE(*,*) "Called not yet defined"
0119 END
0120
feb7fa5d1e dngo*0121
0122 SUBROUTINE STREAMICE_CG_SOLVE_D(cg_uin, cg_uinb, cg_vin, cg_vinb,
0123 & cg_bu, cg_bub, cg_bv, cg_bvb, a_uu
0124 & , a_uub, a_uv, a_uvb, a_vu, a_vub
0125 & , a_vv, a_vvb, tolerance, iters,
0126 & maxiter, mythid)
0127 IMPLICIT NONE
0128
0129 #include "SIZE.h"
0130 #include "EEPARAMS.h"
0131 #include "PARAMS.h"
0132
0133 INTEGER myThid
0134 INTEGER iters
0135 INTEGER maxIter
0136 _RL tolerance
0137 _RL cg_Uin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0138 _RL cg_Vin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0139 _RL cg_Bu (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0140 _RL cg_Bv (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0141 _RL
0142 & A_uu (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0143 & A_vu (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0144 & A_uv (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0145 & A_vv (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1)
0146 _RL cg_Uinb (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0147 _RL cg_Vinb (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0148 _RL cg_Bub (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0149 _RL cg_Bvb (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0150 _RL
0151 & A_uub (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0152 & A_vub (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0153 & A_uvb (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0154 & A_vvb (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1)
0155 END
0156
0157
0158 SUBROUTINE STREAMICE_CG_SOLVE_B(cg_uin, cg_uinb, cg_vin, cg_vinb,
0159 & cg_bu, cg_bub, cg_bv, cg_bvb, a_uu
0160 & , a_uub, a_uv, a_uvb, a_vu, a_vub
0161 & , a_vv, a_vvb, tolerance, iters,
0162 & maxiter, mythid)
0163
0164 IMPLICIT NONE
0165
0166 #include "SIZE.h"
0167 #include "EEPARAMS.h"
0168 #include "PARAMS.h"
0169 #ifdef ALLOW_STREAMICE
0170 #include "STREAMICE.h"
0171 #include "STREAMICE_CG.h"
0172 #endif
0173
0174 INTEGER myThid
0175 INTEGER iters
0176 INTEGER maxIter
0177 _RL tolerance
0178 _RL cg_Uin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0179 _RL cg_Vin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0180 _RL cg_Bu (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0181 _RL cg_Bv (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0182 _RL
0183 & A_uu (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0184 & A_vu (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0185 & A_uv (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0186 & A_vv (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1)
0187 _RL cg_Uinb (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0188 _RL cg_Vinb (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0189 _RL cg_Bub (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0190 _RL cg_Bvb (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0191 _RL
0192 & A_uub (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0193 & A_vub (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0194 & A_uvb (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0195 & A_vvb (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1)
0196
0197 #ifdef ALLOW_STREAMICE
0198 INTEGER recalc_vel
0199 recalc_vel = 1
0200 CALL ADSTREAMICE_CG_SOLVE(
0201 U cg_Uin,
0202 I cg_Uinb,
0203 U cg_Vin,
0204 I cg_Vinb,
0205 I cg_Bu,
0206 U cg_Bub,
0207 I cg_Bv,
0208 U cg_Bvb,
0209 I A_uu,
0210 U A_uub,
0211 I A_uv,
0212 U A_uvb,
0213 I A_vu,
0214 U A_vub,
0215 I A_vv,
0216 U A_vvb,
0217 I tolerance,
0218 I maxiter,
0219 I recalc_vel,
0220 I myThid )
0221 #endif
0222 END
0223
0224
0225
0226
0227 SUBROUTINE STREAMICE_CG_SOLVE_FWD(cg_uin,
0228 & cg_vin,
0229 & cg_bu,
0230 & cg_bv,
0231 & a_uu, a_uv,
0232 & a_vu, a_vv,
0233 & tolerance, iters,
0234 & maxiters, mythid)
0235
0236
0237 IMPLICIT NONE
0238
0239 #include "SIZE.h"
0240 #include "EEPARAMS.h"
0241 #include "PARAMS.h"
0242 #ifdef ALLOW_STREAMICE
0243 #include "STREAMICE.h"
0244 #include "STREAMICE_CG.h"
0245 #endif
0246
0247
0248
0249 _RL cg_Uin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0250 _RL cg_Vin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0251 _RL cg_Bu (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0252 _RL cg_Bv (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0253 _RL
0254 & A_uu (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0255 & A_vu (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0256 & A_uv (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0257 & A_vv (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1)
0258 _RL tolerance
0259 INTEGER maxiters
0260 INTEGER iters
0261 INTEGER myThid
0262
0263 #ifdef ALLOW_STREAMICE
0264
0265
0266 INTEGER i, j, bi, bj, colx, coly
0267 INTEGER conv_flag, tmpiter
0268 CHARACTER*(MAX_LEN_MBUF) msgBuf
0269
0270 conv_flag = 0
0271 CALL STREAMICE_CG_SOLVE(
0272 & cg_uin,
0273 & cg_vin,
0274 & cg_bu,
0275 & cg_bv,
0276 & A_uu,
0277 & A_uv,
0278 & A_vu,
0279 & A_vv,
0280 & tolerance,
0281 & iters,
0282 & maxiters,
0283 & myThid )
0284
0285 CALL PUSHREAL8ARRAY(cg_vin, (snx+2*olx)*(sny+2*oly)*nsx*nsy)
0286 CALL PUSHREAL8ARRAY(cg_uin, (snx+2*olx)*(sny+2*oly)*nsx*nsy)
0287 #endif
0288 END
0289
0290
0291
0292
0293 #ifdef ALLOW_PETSC
0294 SUBROUTINE STREAMICE_CG_SOLVE_BWD(
0295 & cg_uin, cg_uinb, cg_vin, cg_vinb,
0296 & cg_bu, cg_bub, cg_bv, cg_bvb, a_uu
0297 & , a_uub, a_uv, a_uvb, a_vu, a_vub
0298 & , a_vv, a_vvb, tolerance
0299 & , toleranceb, iters
0300 & , maxiter, mythid)
0301 #else
0302 SUBROUTINE STREAMICE_CG_SOLVE_BWD(
0303 & cg_uin, cg_uinb, cg_vin, cg_vinb,
0304 & cg_bu, cg_bub, cg_bv, cg_bvb, a_uu
0305 & , a_uub, a_uv, a_uvb, a_vu, a_vub
0306 & , a_vv, a_vvb, tolerance,
0307 & iters, maxiter,
0308 & mythid)
0309 #endif
0310
0311 IMPLICIT NONE
0312
0313 #include "SIZE.h"
0314 #include "EEPARAMS.h"
0315 #include "PARAMS.h"
0316 #ifdef ALLOW_STREAMICE
0317 #include "STREAMICE.h"
0318 #include "STREAMICE_CG.h"
0319 #endif
0320
0321 INTEGER myThid
0322 INTEGER iters
0323 INTEGER maxIter
0324 _RL tolerance
0325 #ifdef ALLOW_PETSC
0326 _RL toleranceb
0327 #endif
0328 _RL cg_Uin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0329 _RL cg_Vin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0330 _RL cg_Bu (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0331 _RL cg_Bv (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0332 _RL
0333 & A_uu (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0334 & A_vu (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0335 & A_uv (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0336 & A_vv (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1)
0337 _RL cg_Uinb (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0338 _RL cg_Vinb (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0339 _RL cg_Bub (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0340 _RL cg_Bvb (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0341 _RL
0342 & A_uub (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0343 & A_vub (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0344 & A_uvb (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1),
0345 & A_vvb (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1)
0346
0347 #ifdef ALLOW_STREAMICE
0348
0349 CALL POPREAL8ARRAY(cg_Uin, (snx+2*olx)*(sny+2*oly)*nsx*nsy)
0350 CALL POPREAL8ARRAY(cg_Vin, (snx+2*olx)*(sny+2*oly)*nsx*nsy)
0351
0352
0353 CALL ADSTREAMICE_CG_SOLVE(
0354 U cg_Uin,
0355 I cg_Uinb,
0356 U cg_Vin,
0357 I cg_Vinb,
0358 I cg_Bu,
0359 U cg_Bub,
0360 I cg_Bv,
0361 U cg_Bvb,
0362 I A_uu,
0363 U A_uub,
0364 I A_uv,
0365 U A_uvb,
0366 I A_vu,
0367 U A_vub,
0368 I A_vv,
0369 U A_vvb,
0370 I tolerance,
0371 I maxiter,
0372 I myThid )
0373 #endif
0374 END