File indexing completed on 2026-05-05 05:09:01 UTC
view on githubraw file Latest commit 3f0f10fc on 2026-05-04 14:55:37 UTC
2fd913c523 Mart*0001 #include "SEAICE_OPTIONS.h"
0002
0003
0004
0005
ec0d7df165 Mart*0006 SUBROUTINE SEAICE_CALC_RESIDUAL(
0007 I uIceLoc, vIceLoc,
0008 O uIceRes, vIceRes,
2fd913c523 Mart*0009 I newtonIter, krylovIter, myTime, myIter, myThid )
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 IMPLICIT NONE
0023
0024
0025 #include "SIZE.h"
0026 #include "EEPARAMS.h"
0027 #include "SEAICE_SIZE.h"
5bb179ddc2 Mart*0028 #if ( defined SEAICE_ALLOW_BOTTOMDRAG || defined SEAICE_ALLOW_SIDEDRAG )
0029 # include "SEAICE_PARAMS.h"
0030 #endif
3f0f10fc37 Mart*0031 #include "SEAICE_GRID.h"
2fd913c523 Mart*0032 #include "SEAICE.h"
0033
0034
0035
0036
0037
0038
0039
0040
0041 _RL myTime
0042 INTEGER myIter
0043 INTEGER myThid
0044 INTEGER newtonIter
0045 INTEGER krylovIter
0046
0047 _RL uIceLoc(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0048 _RL vIceLoc(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0049
0050 _RL uIceRes(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0051 _RL vIceRes(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0052
45315406aa Mart*0053 #if ( defined SEAICE_CGRID && defined SEAICE_ALLOW_JFNK )
ec0d7df165 Mart*0054
2fd913c523 Mart*0055 _RL uIceLHS(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0056 _RL vIceLHS(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0057
0058 _RL uIceRHS(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0059 _RL vIceRHS(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0060
0061
0062 INTEGER i,j,bi,bj
0063
0064
0065
0066 DO bj=myByLo(myThid),myByHi(myThid)
0067 DO bi=myBxLo(myThid),myBxHi(myThid)
ec0d7df165 Mart*0068 DO J=1-OLy,sNy+OLy
0069 DO I=1-OLx,sNx+OLx
2fd913c523 Mart*0070 uIceLHS(I,J,bi,bj) = 0. _d 0
0071 vIceLHS(I,J,bi,bj) = 0. _d 0
0072 uIceRHS(I,J,bi,bj) = 0. _d 0
0073 vIceRHS(I,J,bi,bj) = 0. _d 0
0074 ENDDO
0075 ENDDO
0076 ENDDO
0077 ENDDO
0078
0079
0080 CALL SEAICE_OCEANDRAG_COEFFS(
ec0d7df165 Mart*0081 I uIceLoc, vIceLoc, HEFFM,
2fd913c523 Mart*0082 O DWATN,
0083 I krylovIter, myTime, myIter, myThid )
df1dac8b7b Mart*0084 #ifdef SEAICE_ALLOW_BOTTOMDRAG
d5254b4e3d Mart*0085 CALL SEAICE_BOTTOMDRAG_COEFFS(
ec0d7df165 Mart*0086 I uIceLoc, vIceLoc, HEFFM,
df1dac8b7b Mart*0087 #ifdef SEAICE_ITD
0088 I HEFFITD, AREAITD, AREA,
0089 #else
0090 I HEFF, AREA,
ec0d7df165 Mart*0091 #endif
df1dac8b7b Mart*0092 O CbotC,
0093 I krylovIter, myTime, myIter, myThid )
0094 #endif /* SEAICE_ALLOW_BOTTOMDRAG */
5bb179ddc2 Mart*0095 #ifdef SEAICE_ALLOW_SIDEDRAG
0096 IF ( SEAICEsideDrag .NE. 0. _d 0 ) CALL SEAICE_SIDEDRAG_STRESS(
0097 I uIceLoc, vIceLoc, coastRoughU, coastRoughV, AREA,
0098 O sideDragU, sideDragV,
0099 I krylovIter, myTime, myIter, myThid )
0100 #endif /* SEAICE_ALLOW_SIDEDRAG */
2fd913c523 Mart*0101 CALL SEAICE_CALC_STRAINRATES(
0102 I uIceLoc, vIceLoc,
0103 O e11, e22, e12,
0104 I krylovIter, myTime, myIter, myThid )
0105 CALL SEAICE_CALC_VISCOSITIES(
8e32c48b8f Mart*0106 I e11, e22, e12, SEAICE_zMin, SEAICE_zMax, HEFFM, press0,
0107 I tensileStrFac,
0fd6b2de1a Mart*0108 O eta, etaZ, zeta, zetaZ, press, deltaC,
2fd913c523 Mart*0109 I krylovIter, myTime, myIter, myThid )
0110
ec0d7df165 Mart*0111
0112
2fd913c523 Mart*0113
0114
0115
0116
0117
0118
0119 CALL SEAICE_CALC_RHS(
0120 O uIceRHS, vIceRHS,
0121 I newtonIter, krylovIter, myTime, myIter, myThid )
0122
0123
0124
0125
df1dac8b7b Mart*0126
2fd913c523 Mart*0127
0128
0129
0130 CALL SEAICE_CALC_LHS(
0131 I uIceLoc, vIceLoc,
0132 O uIceLHS, vIceLHS,
0133 I newtonIter, myTime, myIter, myThid )
0134
0135
0136
0137
0138
0139
0140 DO bj=myByLo(myThid),myByHi(myThid)
0141 DO bi=myBxLo(myThid),myBxHi(myThid)
0142 DO J=1,sNy
0143 DO I=1,sNx
0144 uIceRes(I,J,bi,bj) = uIceLHS(I,J,bi,bj) - uIceRHS(I,J,bi,bj)
0145 vIceRes(I,J,bi,bj) = vIceLHS(I,J,bi,bj) - vIceRHS(I,J,bi,bj)
0146 ENDDO
0147 ENDDO
0148 ENDDO
0149 ENDDO
0150
45315406aa Mart*0151 #endif /* SEAICE_CGRID and SEAICE_ALLOW_JFNK */
2fd913c523 Mart*0152
0153 RETURN
0154 END