File indexing completed on 2024-11-30 06:11:25 UTC
view on githubraw file Latest commit 7bb5a8a1 on 2024-11-29 14:30:55 UTC
809c36b928 Patr*0001 #include "SEAICE_OPTIONS.h"
7bb5a8a109 Jean*0002 #ifdef ALLOW_GENERIC_ADVDIFF
0003 # include "GAD_OPTIONS.h"
0004 #endif
37e58bbaf7 Jean*0005
b7e868d5f4 Jean*0006
0007
0008
0009 SUBROUTINE DIFFUS(
0010 U fld,
0011 I DIFFA, iceMsk, myThid )
0012
0013
37e58bbaf7 Jean*0014
b7e868d5f4 Jean*0015
0016
0017
37e58bbaf7 Jean*0018
b7e868d5f4 Jean*0019
0020
0021
809c36b928 Patr*0022 IMPLICIT NONE
37e58bbaf7 Jean*0023
b7e868d5f4 Jean*0024
809c36b928 Patr*0025 #include "SIZE.h"
0026 #include "EEPARAMS.h"
4366d31d92 Mart*0027 #include "GRID.h"
7303eab4f2 Patr*0028 #include "SEAICE_SIZE.h"
9cf7ff39d8 Mart*0029 #include "SEAICE_PARAMS.h"
37e58bbaf7 Jean*0030
b7e868d5f4 Jean*0031
0032
0033
0034
0035
0036
1a11ffcc11 Mart*0037 _RL fld (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0038 _RL DIFFA (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
b7e868d5f4 Jean*0039 _RL iceMsk (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
809c36b928 Patr*0040 INTEGER myThid
b7e868d5f4 Jean*0041
809c36b928 Patr*0042
b7e868d5f4 Jean*0043
0044
0045
cee16b76ae Dimi*0046 INTEGER i, j, bi, bj
b7e868d5f4 Jean*0047 _RL DELTXX, DELTYY
0048 _RL tmpFld (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
04a836ae4f Mart*0049 _RL dfx (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0050 _RL dfy (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
809c36b928 Patr*0051
b7e868d5f4 Jean*0052
0053
809c36b928 Patr*0054 DO bj=myByLo(myThid),myByHi(myThid)
0055 DO bi=myBxLo(myThid),myBxHi(myThid)
b7e868d5f4 Jean*0056 IF ( SEAICEuseFluxForm ) THEN
0057
809c36b928 Patr*0058
7bb5a8a109 Jean*0059 DO j=1-OLy,sNy+OLy
0060 DO i=1-OLx,sNx+OLx
b7e868d5f4 Jean*0061 dfx(i,j) = 0. _d 0
0062 dfy(i,j) = 0. _d 0
0063 ENDDO
0064 ENDDO
0065
0066 DO j=1,sNy+1
0067 DO i=1,sNx+1
0068 dfx(i,j) = _dyG(i,j,bi,bj) * _recip_dxC(i,j,bi,bj)
0069 & * (fld(i,j,bi,bj)-fld(i-1,j,bi,bj))
0070 & * cosFacU(j,bi,bj)
0071 & * iceMsk(i,j,bi,bj)*iceMsk(i-1,j,bi,bj)
0072 & * ( DIFFA(i,j,bi,bj)+DIFFA(i-1,j,bi,bj) )*HALF
036cdc98c8 Jean*0073 #ifdef ALLOW_OBCS
b7e868d5f4 Jean*0074 & * maskInW(i,j,bi,bj)
036cdc98c8 Jean*0075 #endif
b7e868d5f4 Jean*0076 dfy(i,j) = _dxG(i,j,bi,bj) * _recip_dyC(i,j,bi,bj)
0077 & * (fld(i,j,bi,bj)-fld(i,j-1,bi,bj))
0078 #ifdef ISOTROPIC_COS_SCALING
0079 & * cosFacV(j,bi,bj)
036cdc98c8 Jean*0080 #endif
b7e868d5f4 Jean*0081 & * iceMsk(i,j,bi,bj)*iceMsk(i,j-1,bi,bj)
0082 & * ( DIFFA(i,j,bi,bj)+DIFFA(i,j-1,bi,bj) )*HALF
036cdc98c8 Jean*0083 #ifdef ALLOW_OBCS
b7e868d5f4 Jean*0084 & * maskInS(i,j,bi,bj)
036cdc98c8 Jean*0085 #endif
b7e868d5f4 Jean*0086 ENDDO
0087 ENDDO
0088 DO j=1-OLy,sNy+OLy
0089 DO i=1-OLx,sNx+OLx
0090 fld(i,j,bi,bj) = 0. _d 0
0091 ENDDO
0092 ENDDO
0093
0094 DO j=1,sNy
0095 DO i=1,sNx
0096 fld(i,j,bi,bj) = (
0097 & ( dfx(i+1,j) - dfx(i,j) )
0098 & + ( dfy(i,j+1) - dfy(i,j) )
0099 & ) * recip_rA(i,j,bi,bj)
0100 ENDDO
0101 ENDDO
0102
0103 ELSE
0104
0105
0106 DO j=1-OLy,sNy+OLy
0107 DO i=1-OLx,sNx+OLx
0108 tmpFld(i,j) = 0.0 _d 0
0109 ENDDO
0110 ENDDO
0111
0112 DO j=1,sNy
0113 DO i=1,sNx
0114 DELTXX = DIFFA(i,j,bi,bj)
0115 & * _recip_dxF(i,j,bi,bj)*_recip_dxF(i,j,bi,bj)
0116 DELTYY = DIFFA(i,j,bi,bj)
0117 & * _recip_dyF(i,j,bi,bj)*_recip_dyF(i,j,bi,bj)
0118 & * _recip_dxF(i,j,bi,bj)
0119 tmpFld(i,j) =
0120 & DELTXX*(
0121 & (fld(i+1,j,bi,bj)-fld(i, j,bi,bj))
0122 & *iceMsk(i+1,j,bi,bj)
036cdc98c8 Jean*0123 #ifdef ALLOW_OBCS
b7e868d5f4 Jean*0124 & *maskInW(i+1,j,bi,bj)
036cdc98c8 Jean*0125 #endif
b7e868d5f4 Jean*0126 & -(fld(i, j,bi,bj)-fld(i-1,j,bi,bj))
0127 & *iceMsk(i-1,j,bi,bj)
036cdc98c8 Jean*0128 #ifdef ALLOW_OBCS
b7e868d5f4 Jean*0129 & *maskInW(i,j,bi,bj)
036cdc98c8 Jean*0130 #endif
b7e868d5f4 Jean*0131 & )
0132 & +DELTYY*(
0133 & (fld(i,j+1,bi,bj)-fld(i,j, bi,bj))
0134 & * _dxG(i,j+1,bi,bj)*iceMsk(i,j+1,bi,bj)
0135 #ifdef ALLOW_OBCS
0136 & *maskInS(i,j+1,bi,bj)
37e58bbaf7 Jean*0137 #endif
b7e868d5f4 Jean*0138 & -(fld(i,j, bi,bj)-fld(i,j-1,bi,bj))
0139 & * _dxG(i,j, bi,bj)*iceMsk(i,j-1,bi,bj)
036cdc98c8 Jean*0140 #ifdef ALLOW_OBCS
b7e868d5f4 Jean*0141 & *maskInS(i,j,bi,bj)
036cdc98c8 Jean*0142 #endif
b7e868d5f4 Jean*0143 & )
0144 ENDDO
0145 ENDDO
0146 DO j=1-OLy,sNy+OLy
0147 DO i=1-OLx,sNx+OLx
0148 fld(i,j,bi,bj) = tmpFld(i,j)
0149 ENDDO
0150 ENDDO
809c36b928 Patr*0151
b7e868d5f4 Jean*0152
0153 ENDIF
809c36b928 Patr*0154 ENDDO
0155 ENDDO
0156
0157 RETURN
0158 END