|
||||
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 UTC5ca83cd8f7 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
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated from https://github.com/MITgcm/MITgcm by the 2.2.1-MITgcm-0.1 LXR engine. The LXR team |