Back to home page

MITgcm

 
 

    


File indexing completed on 2023-07-14 05:10:51 UTC

view on githubraw file Latest commit de57a2ec on 2023-07-13 16:55:13 UTC
0c3d35c9cd Gael*0001 #include "SMOOTH_OPTIONS.h"
                0002 
9f5240b52a Jean*0003       SUBROUTINE SMOOTH_CORREL2D(
                0004      &           fld_in, mask_in, smoothOpNb, myThid )
0c3d35c9cd Gael*0005 
                0006 C     *==========================================================*
                0007 C     | SUBROUTINE smooth_correl2D
7b8b86ab99 Timo*0008 C     | o Routine that applies spatial correlation
0c3d35c9cd Gael*0009 C     |   operator to a 2D control field
                0010 C     *==========================================================*
                0011 
                0012       IMPLICIT NONE
                0013 #include "SIZE.h"
                0014 #include "EEPARAMS.h"
                0015 #include "GRID.h"
                0016 #include "PARAMS.h"
                0017 #include "SMOOTH.h"
                0018 
                0019       _RL fld_in(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
9f5240b52a Jean*0020       _RS mask_in(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0021       INTEGER smoothOpNb
                0022       INTEGER myThid
0c3d35c9cd Gael*0023 
9f5240b52a Jean*0024       INTEGER nbt_in
de57a2ec4b Mart*0025       CHARACTER*(MAX_LEN_FNAM) fnamegeneric
9f5240b52a Jean*0026       INTEGER i,j,bi,bj
f9d7cbfb72 Ou W*0027       INTEGER IL
                0028 
                0029 c     == functions ==
                0030       INTEGER  ILNBLNK
                0031       EXTERNAL ILNBLNK
                0032 
                0033       IL = ILNBLNK( smoothDir )
0c3d35c9cd Gael*0034 
                0035 c read smoothing [i.e diffusion] operator:
f9d7cbfb72 Ou W*0036       WRITE(fnamegeneric,'(2A,I3.3)')
                0037      &      smoothDir(1:IL),
0c3d35c9cd Gael*0038      &    'smooth2Doperator',smoothOpNb
9f5240b52a Jean*0039       CALL READ_REC_3D_RL( fnamegeneric, smoothprec,
                0040      &                     1, smooth2D_Kux,1,1,myThid )
                0041       CALL READ_REC_3D_RL( fnamegeneric, smoothprec,
                0042      &                     1, smooth2D_Kvy,2,1,myThid )
                0043       CALL EXCH_XY_RL( smooth2D_Kux, myThid )
                0044       CALL EXCH_XY_RL( smooth2D_Kvy, myThid )
0c3d35c9cd Gael*0045 
                0046 c read normalization field [i.e. 1/sqrt(var(filter))]:
f9d7cbfb72 Ou W*0047       WRITE(fnamegeneric,'(2A,I3.3)')
                0048      &      smoothDir(1:IL),
                0049      &     'smooth2Dnorm',smoothOpNb
9f5240b52a Jean*0050       CALL READ_REC_3D_RL( fnamegeneric, smoothprec,
                0051      &                     1, smooth2Dnorm, 1, 1, myThid )
                0052       CALL EXCH_XY_RL( smooth2Dnorm, myThid )
0c3d35c9cd Gael*0053 
                0054 c division by ~sqrt(area):
9f5240b52a Jean*0055       DO bj=myByLo(myThid),myByHi(myThid)
                0056        DO bi=myBxLo(myThid),myBxHi(myThid)
0c3d35c9cd Gael*0057         DO j = 1,sNy
7b8b86ab99 Timo*0058          DO i = 1,sNx
9f5240b52a Jean*0059            fld_in(i,j,bi,bj)=fld_in(i,j,bi,bj)
                0060      & *SQRT(recip_rA(i,j,bi,bj))
0c3d35c9cd Gael*0061          ENDDO
                0062         ENDDO
7b8b86ab99 Timo*0063        ENDDO
0c3d35c9cd Gael*0064       ENDDO
be12682802 Gael*0065       CALL EXCH_XY_RL ( fld_in , myThid )
0c3d35c9cd Gael*0066 
                0067 c do the smoothing:
9f5240b52a Jean*0068       nbt_in = smooth2Dnbt(smoothOpNb)/2
                0069       CALL SMOOTH_DIFF2D( fld_in, mask_in, nbt_in, myThid )
0c3d35c9cd Gael*0070 
                0071 c division by ~sqrt(var(filter)):
9f5240b52a Jean*0072       DO bj=myByLo(myThid),myByHi(myThid)
                0073        DO bi=myBxLo(myThid),myBxHi(myThid)
0c3d35c9cd Gael*0074          DO j = 1,sNy
                0075           DO i = 1,sNx
9f5240b52a Jean*0076             fld_in(i,j,bi,bj) = fld_in(i,j,bi,bj)
                0077      &                        *smooth2Dnorm(i,j,bi,bj)
0c3d35c9cd Gael*0078           ENDDO
                0079          ENDDO
                0080         ENDDO
                0081        ENDDO
9f5240b52a Jean*0082       CALL EXCH_XY_RL( fld_in , myThid )
7b8b86ab99 Timo*0083 
9f5240b52a Jean*0084       RETURN
                0085       END