Back to home page

MITgcm

 
 

    


File indexing completed on 2023-09-21 05:10:48 UTC

view on githubraw file Latest commit 96b00645 on 2023-09-20 15:15:14 UTC
5ca83cd8f7 Dani*0001 #include "STREAMICE_OPTIONS.h"
                0002 
                0003 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0004 
                0005 CBOP
96b006450c dngo*0006       SUBROUTINE STREAMICE_CG_WRAPPER(
                0007      U                               cg_Uin,
                0008      U                               cg_Vin,
5ca83cd8f7 Dani*0009      I                               cg_tauU,
                0010      I                               cg_tauV,
96b006450c dngo*0011      I                               tolerance,
5ca83cd8f7 Dani*0012      O                               iters,
d2cdb9260d Dani*0013      I                               maxIter,
5ca83cd8f7 Dani*0014      I                               myThid )
96b006450c dngo*0015 
5ca83cd8f7 Dani*0016 C     /============================================================\
96b006450c dngo*0017 C     | SUBROUTINE                                                 |
5ca83cd8f7 Dani*0018 C     | o                                                          |
                0019 C     |============================================================|
                0020 C     |                                                            |
                0021 C     \============================================================/
                0022       IMPLICIT NONE
                0023 
                0024 C     === Global variables ===
                0025 #include "SIZE.h"
                0026 #include "EEPARAMS.h"
                0027 #include "PARAMS.h"
                0028 #include "STREAMICE.h"
                0029 #include "STREAMICE_CG.h"
                0030 
                0031 C     !INPUT/OUTPUT ARGUMENTS
                0032 C     cg_Uin, cg_Vin - input and output velocities
                0033 C     cg_Bu, cg_Bv - driving stress
                0034 
                0035       INTEGER myThid
                0036       INTEGER iters
d2cdb9260d Dani*0037       INTEGER maxIter
5ca83cd8f7 Dani*0038       _RL tolerance
                0039 
                0040       _RL cg_Uin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0041       _RL cg_Vin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0042       _RL cg_tauU (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0043       _RL cg_tauV (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0044 
                0045 #ifdef ALLOW_STREAMICE
                0046 
                0047       INTEGER i, j, bi, bj
                0048 
                0049       DO bj = myByLo(myThid), myByHi(myThid)
                0050        DO bi = myBxLo(myThid), myBxHi(myThid)
                0051         DO j=1,sNy
                0052          DO i=1,sNx
96b006450c dngo*0053 
5ca83cd8f7 Dani*0054           DIAGu_SI (i,j,bi,bj) = 0. _d 0
                0055           DIAGv_SI (i,j,bi,bj) = 0. _d 0
                0056           ubd_SI (i,j,bi,bj) = 0. _d 0
                0057           vbd_SI (i,j,bi,bj) = 0. _d 0
                0058          ENDDO
                0059         ENDDO
                0060        ENDDO
                0061       ENDDO
                0062 
                0063 C     DIRICHLET BOUNDARY VALUES ADDED TO RHS
                0064 
96b006450c dngo*0065       CALL STREAMICE_CG_BOUND_VALS( myThid,
                0066      O    ubd_SI,
5ca83cd8f7 Dani*0067      O    vbd_SI)
                0068 
7b7bae94ed Mart*0069       _EXCH_XY_RL(ubd_SI, myThid)
                0070       _EXCH_XY_RL(vbd_SI, myThid)
5ca83cd8f7 Dani*0071 
96b006450c dngo*0072 c      CALL WRITE_FLD_XY_RL ( "ubd_SI", "",
                0073 c     &   ubd_SI, 0, myThid )
5ca83cd8f7 Dani*0074 
96b006450c dngo*0075 c      CALL WRITE_FLD_XY_RL ( "vbd_SI", "",
                0076 c     &   STREAMICE_vmask, 0, myThid )
5ca83cd8f7 Dani*0077 
                0078       DO bj = myByLo(myThid), myByHi(myThid)
                0079        DO bi = myBxLo(myThid), myBxHi(myThid)
                0080         DO j=1-OLy,sNy+OLy
                0081          DO i=1-OLx,sNx+OLx
96b006450c dngo*0082           RHSu_SI (i,j,bi,bj) = cg_tauU (i,j,bi,bj)
5ca83cd8f7 Dani*0083      &     - ubd_SI(i,j,bi,bj)
96b006450c dngo*0084           RHSv_SI (i,j,bi,bj) = cg_tauV (i,j,bi,bj)
5ca83cd8f7 Dani*0085      &     - vbd_SI(i,j,bi,bj)
                0086          ENDDO
                0087         ENDDO
                0088        ENDDO
                0089       ENDDO
                0090 
                0091       _EXCH_XY_RL( RHSu_SI, myThid )
                0092       _EXCH_XY_RL( RHSv_SI, myThid )
                0093 
96b006450c dngo*0094 C     GET DIAGONAL OF MATRIX
5ca83cd8f7 Dani*0095 
96b006450c dngo*0096       CALL STREAMICE_CG_ADIAG( myThid,
                0097      O    DIAGu_SI,
5ca83cd8f7 Dani*0098      O    DIAGv_SI)
                0099 
                0100       _EXCH_XY_RL( DIAGu_SI, myThid )
                0101       _EXCH_XY_RL( DIAGv_SI, myThid )
                0102 
                0103 C     ccccc
                0104 
                0105       DO bj = myByLo(myThid), myByHi(myThid)
                0106        DO bi = myBxLo(myThid), myBxHi(myThid)
                0107         DO j=1-OLy,sNy+OLy
                0108          DO i=1-OLy,sNx+OLy
                0109           IF (STREAMICE_umask(i,j,bi,bj).ne.1.0)
                0110      &     cg_Uin(i,j,bi,bj)=0.0
                0111           IF (STREAMICE_vmask(i,j,bi,bj).ne.1.0)
                0112      &     cg_Vin(i,j,bi,bj)=0.0
                0113 
96b006450c dngo*0114 c           print *, "rhs", i,j,RHSu_SI(i,j,bi,bj)
5ca83cd8f7 Dani*0115 
                0116          ENDDO
                0117         ENDDO
                0118        ENDDO
                0119       ENDDO
                0120 
                0121 #ifdef STREAMICE_CONSTRUCT_MATRIX
                0122 
                0123       CALL STREAMICE_CG_MAKE_A(myThid)
                0124 
96b006450c dngo*0125 c      call write_fld_xy_rl ("streamicb_cg_A1_m1_m1","",
                0126 c     & streamice_cg_A1(:,:,1,1,-1,-1),0,myThid)
67b4a2b594 Dani*0127 c      call write_fld_xy_rl ("streamicb_cg_A1_m1_0","",
                0128 c     & streamice_cg_A1(:,:,1,1,-1,0),0,myThid)
                0129 c      call write_fld_xy_rl ("streamicb_cg_A1_m1_p1","",
                0130 c     & streamice_cg_A1(:,:,1,1,-1,1),0,myThid)
                0131 c      call write_fld_xy_rl ("streamicb_cg_A1_0_m1","",
                0132 c     & streamice_cg_A1(:,:,1,1,0,-1),0,myThid)
                0133 c      call write_fld_xy_rl ("streamicb_cg_A1_0_0","",
                0134 c     & streamice_cg_A1(:,:,1,1,0,0),0,myThid)
                0135 c      call write_fld_xy_rl ("streamicb_cg_A1_0_p1","",
                0136 c     & streamice_cg_A1(:,:,1,1,0,1),0,myThid)
                0137 c      call write_fld_xy_rl ("streamicb_cg_A1_p1_m1","",
                0138 c     & streamice_cg_A1(:,:,1,1,1,-1),0,myThid)
                0139 c      call write_fld_xy_rl ("streamicb_cg_A1_p1_0","",
                0140 c     & streamice_cg_A1(:,:,1,1,1,0),0,myThid)
                0141 c      call write_fld_xy_rl ("streamicb_cg_A1_p1_p1","",
                0142 c     & streamice_cg_A1(:,:,1,1,1,1),0,myThid)
                0143 c
                0144 c      call write_fld_xy_rl ("streamicb_cg_A2_m1_m1","",
                0145 c     & streamice_cg_A2(:,:,1,1,-1,-1),0,myThid)
                0146 c      call write_fld_xy_rl ("streamicb_cg_A2_m1_0","",
                0147 c     & streamice_cg_A2(:,:,1,1,-1,0),0,myThid)
                0148 c      call write_fld_xy_rl ("streamicb_cg_A2_m1_p1","",
                0149 c     & streamice_cg_A2(:,:,1,1,-1,1),0,myThid)
                0150 c      call write_fld_xy_rl ("streamicb_cg_A2_0_m1","",
                0151 c     & streamice_cg_A2(:,:,1,1,0,-1),0,myThid)
                0152 c      call write_fld_xy_rl ("streamicb_cg_A2_0_0","",
                0153 c     & streamice_cg_A2(:,:,1,1,0,0),0,myThid)
                0154 c      call write_fld_xy_rl ("streamicb_cg_A2_0_p1","",
                0155 c     & streamice_cg_A2(:,:,1,1,0,1),0,myThid)
                0156 c      call write_fld_xy_rl ("streamicb_cg_A2_p1_m1","",
                0157 c     & streamice_cg_A2(:,:,1,1,1,-1),0,myThid)
                0158 c      call write_fld_xy_rl ("streamicb_cg_A2_p1_0","",
                0159 c     & streamice_cg_A2(:,:,1,1,1,0),0,myThid)
                0160 c      call write_fld_xy_rl ("streamicb_cg_A2_p1_p1","",
                0161 c     & streamice_cg_A2(:,:,1,1,1,1),0,myThid)
                0162 c
                0163 c      call write_fld_xy_rl ("streamicb_cg_A3_m1_m1","",
                0164 c     & streamice_cg_A3(:,:,1,1,-1,-1),0,myThid)
                0165 c      call write_fld_xy_rl ("streamicb_cg_A3_m1_0","",
                0166 c     & streamice_cg_A3(:,:,1,1,-1,0),0,myThid)
                0167 c      call write_fld_xy_rl ("streamicb_cg_A3_m1_p1","",
                0168 c     & streamice_cg_A3(:,:,1,1,-1,1),0,myThid)
                0169 c      call write_fld_xy_rl ("streamicb_cg_A3_0_m1","",
                0170 c     & streamice_cg_A3(:,:,1,1,0,-1),0,myThid)
                0171 c      call write_fld_xy_rl ("streamicb_cg_A3_0_0","",
                0172 c     & streamice_cg_A3(:,:,1,1,0,0),0,myThid)
                0173 c      call write_fld_xy_rl ("streamicb_cg_A3_0_p1","",
                0174 c     & streamice_cg_A3(:,:,1,1,0,1),0,myThid)
                0175 c      call write_fld_xy_rl ("streamicb_cg_A3_p1_m1","",
                0176 c     & streamice_cg_A3(:,:,1,1,1,-1),0,myThid)
                0177 c      call write_fld_xy_rl ("streamicb_cg_A3_p1_0","",
                0178 c     & streamice_cg_A3(:,:,1,1,1,0),0,myThid)
                0179 c      call write_fld_xy_rl ("streamicb_cg_A3_p1_p1","",
                0180 c     & streamice_cg_A3(:,:,1,1,1,1),0,myThid)
                0181 c
                0182 c      call write_fld_xy_rl ("streamicb_cg_A4_m1_m1","",
                0183 c     & streamice_cg_A4(:,:,1,1,-1,-1),0,myThid)
                0184 c      call write_fld_xy_rl ("streamicb_cg_A4_m1_0","",
                0185 c     & streamice_cg_A4(:,:,1,1,-1,0),0,myThid)
                0186 c      call write_fld_xy_rl ("streamicb_cg_A4_m1_p1","",
                0187 c     & streamice_cg_A4(:,:,1,1,-1,1),0,myThid)
                0188 c      call write_fld_xy_rl ("streamicb_cg_A4_0_m1","",
                0189 c     & streamice_cg_A4(:,:,1,1,0,-1),0,myThid)
                0190 c      call write_fld_xy_rl ("streamicb_cg_A4_0_0","",
                0191 c     & streamice_cg_A4(:,:,1,1,0,0),0,myThid)
                0192 c      call write_fld_xy_rl ("streamicb_cg_A4_0_p1","",
                0193 c     & streamice_cg_A4(:,:,1,1,0,1),0,myThid)
                0194 c      call write_fld_xy_rl ("streamicb_cg_A4_p1_m1","",
                0195 c     & streamice_cg_A4(:,:,1,1,1,-1),0,myThid)
                0196 c      call write_fld_xy_rl ("streamicb_cg_A4_p1_0","",
                0197 c     & streamice_cg_A4(:,:,1,1,1,0),0,myThid)
                0198 c      call write_fld_xy_rl ("streamicb_cg_A4_p1_p1","",
                0199 c     & streamice_cg_A4(:,:,1,1,1,1),0,myThid)
                0200 c
                0201 
96b006450c dngo*0202 c       print *, "MATRIX 1"
                0203 c       do i=1,sNx
                0204 c        print *, i,
                0205 c      & streamice_cg_A1(i,1,1,1,-1,0),
                0206 c      & streamice_cg_A1(i,1,1,1,0,0),
                0207 c      & streamice_cg_A1(i,1,1,1,1,0),
                0208 c      & streamice_cg_A1(i,2,1,1,-1,0),
                0209 c      & streamice_cg_A1(i,2,1,1,0,0),
                0210 c      & streamice_cg_A1(i,2,1,1,1,0),
                0211 c      & streamice_cg_A1(i,3,1,1,-1,0),
                0212 c      & streamice_cg_A1(i,3,1,1,0,0),
                0213 c      & streamice_cg_A1(i,3,1,1,1,0),
                0214 c      & visc_streamice(i,1,1,1),visc_streamice(i,2,1,1),
                0215 c      & visc_streamice(i,3,1,1)
                0216 c       enddo
                0217 
                0218       CALL STREAMICE_CG_SOLVE(
5ca83cd8f7 Dani*0219      &  cg_Uin,
                0220      &  cg_Vin,
                0221      &  RHSu_SI,
                0222      &  RHSv_SI,
                0223      &  streamice_cg_A1,
                0224      &  streamice_cg_A2,
                0225      &  streamice_cg_A3,
96b006450c dngo*0226      &  streamice_cg_A4,
                0227      &  tolerance,
5ca83cd8f7 Dani*0228      &  iters,
d2cdb9260d Dani*0229      &  maxIter,
5ca83cd8f7 Dani*0230      &  myThid )
                0231 
                0232       _EXCH_XY_RL( RHSu_SI, myThid )
                0233       _EXCH_XY_RL( RHSv_SI, myThid )
                0234 
96b006450c dngo*0235 c       DO bj = myByLo(myThid), myByHi(myThid)
                0236 c        DO bi = myBxLo(myThid), myBxHi(myThid)
                0237 c         DO j=1-OLy,sNy+OLy
                0238 c          DO i=1-OLx,sNx+OLx
                0239 c           cg_Uin(i,j,bi,bj) = cg_Uin(i,j,bi,bj) +
                0240 c      &     0.0 * cg_Uin(i,j,bi,bj)**2
                0241 c           cg_Vin(i,j,bi,bj) = cg_Vin(i,j,bi,bj) +
                0242 c      &     0.0 * cg_Vin(i,j,bi,bj)**2
                0243 c          ENDDO
                0244 c         ENDDO
                0245 c        ENDDO
                0246 c       ENDDO
5ca83cd8f7 Dani*0247 
                0248 #else
                0249 
96b006450c dngo*0250       CALL STREAMICE_CG_SOLVE_MATFREE(
5ca83cd8f7 Dani*0251      &  cg_Uin,
                0252      &  cg_Vin,
                0253      &  RHSu_SI,
                0254      &  RHSv_SI,
96b006450c dngo*0255      &  tolerance,
5ca83cd8f7 Dani*0256      &  iters,
                0257      &  myThid )
                0258 
                0259 #endif
                0260 
                0261 C    ACTUAL CG CALL
                0262 
                0263       DO bj = myByLo(myThid), myByHi(myThid)
                0264        DO bi = myBxLo(myThid), myBxHi(myThid)
                0265         DO j=1-OLy,sNy+OLy
                0266          DO i=1-OLy,sNx+OLy
                0267           IF (STREAMICE_umask(i,j,bi,bj).eq.3.0)
                0268      &     cg_Uin(i,j,bi,bj)=u_bdry_values_SI(i,j,bi,bj)
                0269           IF (STREAMICE_vmask(i,j,bi,bj).eq.3.0)
                0270      &     cg_Vin(i,j,bi,bj)=v_bdry_values_SI(i,j,bi,bj)
96b006450c dngo*0271 
                0272 c           print *, "rhs", i,j,RHSu_SI(i,j,bi,bj)
                0273 
5ca83cd8f7 Dani*0274          ENDDO
                0275         ENDDO
                0276        ENDDO
96b006450c dngo*0277       ENDDO
5ca83cd8f7 Dani*0278 
                0279       _EXCH_XY_RL( cg_Uin, myThid )
96b006450c dngo*0280       _EXCH_XY_RL( cg_Vin, myThid )
5ca83cd8f7 Dani*0281 
                0282 #endif
                0283       RETURN
96b006450c dngo*0284       END