Back to home page

MITgcm

 
 

    


File indexing completed on 2025-11-07 06:08:36 UTC

view on githubraw file Latest commit b7411f1a on 2025-11-06 19:05:26 UTC
0c49347dc7 Alis*0001 #include "GMREDI_OPTIONS.h"
94a8024bbe Jean*0002 #ifdef ALLOW_CTRL
                0003 # include "CTRL_OPTIONS.h"
                0004 #endif
0c49347dc7 Alis*0005 
8391062d12 Jean*0006 CBOP
e04376af63 Jean*0007 C     !ROUTINE: GMREDI_INIT_VARIA
8391062d12 Jean*0008 C     !INTERFACE:
e04376af63 Jean*0009       SUBROUTINE GMREDI_INIT_VARIA( myThid )
8391062d12 Jean*0010 
                0011 C     !DESCRIPTION: \bv
                0012 C     *==========================================================*
e04376af63 Jean*0013 C     | SUBROUTINE GMREDI_INIT_VARIA
8391062d12 Jean*0014 C     | o Routine to initialize GM/Redi variables
                0015 C     *==========================================================*
                0016 C     \ev
f6de204bec Jean*0017 
8391062d12 Jean*0018 C     !USES:
0c49347dc7 Alis*0019       IMPLICIT NONE
                0020 
                0021 C     === Global variables ===
                0022 #include "SIZE.h"
                0023 #include "EEPARAMS.h"
                0024 #include "PARAMS.h"
                0025 #include "GRID.h"
                0026 #include "GMREDI.h"
                0027 
8391062d12 Jean*0028 C     !INPUT/OUTPUT PARAMETERS:
                0029 C     myThid ::  my Thread Id number
0c49347dc7 Alis*0030       INTEGER myThid
8391062d12 Jean*0031 CEOP
0c49347dc7 Alis*0032 
                0033 #ifdef ALLOW_GMREDI
8391062d12 Jean*0034 C     !LOCAL VARIABLES:
f42e64b3e7 Jean*0035       INTEGER i,j,k,bi,bj
0c49347dc7 Alis*0036 
94a8024bbe Jean*0037 C--   Initialise again 3-D control variables (AD-compiler need to see this)
                0038 #if (defined ALLOW_KAPREDI_CONTROL && defined GM_READ_K3D_REDI )
                0039 C--   Initialize 3-D Isopycnal diffusivity in common block
                0040       DO bj = myByLo(myThid), myByHi(myThid)
                0041        DO bi = myBxLo(myThid), myBxHi(myThid)
                0042         DO k=1,Nr
                0043          DO j=1-OLy,sNy+OLy
                0044           DO i=1-OLx,sNx+OLx
                0045            GM_inpK3dRedi(i,j,k,bi,bj) = GM_isopycK
                0046      &                  *GM_isoFac1d(k)*GM_isoFac2d(i,j,bi,bj)
                0047           ENDDO
                0048          ENDDO
                0049         ENDDO
                0050        ENDDO
                0051       ENDDO
                0052 #endif /* ALLOW_KAPREDI_CONTROL and GM_READ_K3D_REDI */
                0053 #if (defined ALLOW_KAPGM_CONTROL && defined GM_READ_K3D_GM )
                0054 C--   Initialize 3-D Thickness diffusivity in common block
                0055       DO bj = myByLo(myThid), myByHi(myThid)
                0056        DO bi = myBxLo(myThid), myBxHi(myThid)
                0057         DO k=1,Nr
                0058          DO j=1-OLy,sNy+OLy
                0059           DO i=1-OLx,sNx+OLx
                0060            GM_inpK3dGM(i,j,k,bi,bj) = GM_background_K
                0061      &                  *GM_bolFac1d(k)*GM_bolFac2d(i,j,bi,bj)
                0062           ENDDO
                0063          ENDDO
                0064         ENDDO
                0065        ENDDO
                0066       ENDDO
                0067 #endif /* ALLOW_KAPGM_CONTROL and GM_READ_K3D_GM */
                0068 
                0069 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0070 #ifdef ALLOW_AUTODIFF
                0071 C- Note: To simplify dependency & avoid recomputations, when compiling
                0072 C        pkg/autodiff, we always call GMREDI_INIT_VARIA to initialise control
                0073 C        variables (as done above) without condition on useGMRedi.
                0074 C        Therefore, in this case, the "If useGMRedi" is added back here:
                0075       IF ( useGMRedi ) THEN
                0076 #endif
a4576c7cde Juli*0077 #ifdef GM_GEOM_VARIABLE_K
                0078 C     use AB2 time stepping
                0079        _BEGIN_MASTER( myThid )
                0080         GEOM_startAB = MIN( nIter0, 1 )
                0081        _END_MASTER( myThid )
                0082 #endif
94a8024bbe Jean*0083 
                0084 #if (defined ALLOW_KAPREDI_CONTROL && defined GM_READ_K3D_REDI )
                0085 C--   Read (again) 3-D Isopycnal diffusivity from file
                0086       IF ( GM_K3dRediFile .NE. ' ' ) THEN
                0087        CALL READ_FLD_XYZ_RL( GM_K3dRediFile, ' ',
                0088      &                       GM_inpK3dRedi, 0, myThid )
                0089        CALL EXCH_XYZ_RL( GM_inpK3dRedi, myThid )
                0090       ENDIF
                0091 #endif /* ALLOW_KAPREDI_CONTROL and GM_READ_K3D_REDI */
                0092 #if (defined ALLOW_KAPGM_CONTROL && defined GM_READ_K3D_GM )
                0093 C--   Read (again) 3-D Thickness diffusivity from file
                0094       IF ( GM_K3dGMFile .NE. ' ' ) THEN
                0095        CALL READ_FLD_XYZ_RL( GM_K3dGMFile, ' ',
                0096      &                       GM_inpK3dGM, 0, myThid )
                0097        CALL EXCH_XYZ_RL( GM_inpK3dGM, myThid )
                0098       ENDIF
                0099 #endif /* ALLOW_KAPGM_CONTROL and GM_READ_K3D_GM */
                0100 
0c49347dc7 Alis*0101       DO bj = myByLo(myThid), myByHi(myThid)
                0102        DO bi = myBxLo(myThid), myBxHi(myThid)
f42e64b3e7 Jean*0103 
a4576c7cde Juli*0104 C     Initialize 3-D arrays in common blocks :
f42e64b3e7 Jean*0105         DO k=1,Nr
796b5e35f7 Jean*0106          DO j=1-OLy,sNy+OLy
                0107           DO i=1-OLx,sNx+OLx
b6b11b9b2f Patr*0108            Kwx(i,j,k,bi,bj) = 0. _d 0
                0109            Kwy(i,j,k,bi,bj) = 0. _d 0
                0110            Kwz(i,j,k,bi,bj) = 0. _d 0
796b5e35f7 Jean*0111            Kux(i,j,k,bi,bj) = 0. _d 0
                0112            Kvy(i,j,k,bi,bj) = 0. _d 0
f42e64b3e7 Jean*0113 #ifdef GM_EXTRA_DIAGONAL
b6b11b9b2f Patr*0114            Kuz(i,j,k,bi,bj) = 0. _d 0
                0115            Kvz(i,j,k,bi,bj) = 0. _d 0
f42e64b3e7 Jean*0116 #endif
                0117 #ifdef GM_BOLUS_ADVEC
b6b11b9b2f Patr*0118            GM_PsiX(i,j,k,bi,bj) = 0. _d 0
                0119            GM_PsiY(i,j,k,bi,bj) = 0. _d 0
f42e64b3e7 Jean*0120 #endif
f59d76b0dd Ed D*0121 #ifdef ALLOW_GM_LEITH_QG
                0122            GM_LeithQG_K(i,j,k,bi,bj) = 0. _d 0
f42e64b3e7 Jean*0123 #endif
05118ac017 Jean*0124 #ifdef GM_BATES_K3D
                0125            GM_BatesK3d(i,j,k,bi,bj) = 0. _d 0
0d1e4b948d Mich*0126 #endif
a4576c7cde Juli*0127 #ifdef GM_GEOM_VARIABLE_K
                0128            GEOM_K3d(i,j,k,bi,bj) = 0. _d 0
                0129 #endif
f42e64b3e7 Jean*0130           ENDDO
                0131          ENDDO
                0132         ENDDO
a4576c7cde Juli*0133 C     Initialize 2-D arrays in common blocks :
                0134         DO j=1-OLy,sNy+OLy
                0135          DO i=1-OLx,sNx+OLx
                0136 #ifdef GM_VISBECK_VARIABLE_K
                0137            VisbeckK(i,j,bi,bj) = 0. _d 0
                0138 #endif
                0139 #ifdef GM_GEOM_VARIABLE_K
                0140            GEOM_EKE(i,j,bi,bj) = GEOM_ini_EKE * maskInC(i,j,bi,bj)
                0141            GEOM_gEKE_Nm1(i,j,bi,bj) = 0. _d 0
                0142 #endif
                0143          ENDDO
                0144         ENDDO
f42e64b3e7 Jean*0145 
                0146 C- end bi,bj loops
                0147        ENDDO
                0148       ENDDO
f6de204bec Jean*0149 
94a8024bbe Jean*0150 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
f6de204bec Jean*0151 C--   write GM scaling factors to file:
                0152       IF ( GM_iso1dFile .NE. ' ' ) THEN
                0153         CALL WRITE_GLVEC_RS( 'GM_isoFac1d', ' ', GM_isoFac1d,
                0154      I                        Nr, -1, myThid )
                0155       ENDIF
                0156       IF ( GM_bol1dFile .NE. ' ' ) THEN
                0157         CALL WRITE_GLVEC_RS( 'GM_bolFac1d', ' ', GM_bolFac1d,
                0158      I                        Nr, -1, myThid )
                0159       ENDIF
                0160       IF ( GM_iso2dFile .NE. ' ' ) THEN
                0161         CALL WRITE_FLD_XY_RS( 'GM_isoFac2d',' ',GM_isoFac2d,-1,myThid )
                0162       ENDIF
                0163       IF ( GM_bol2dFile .NE. ' ' ) THEN
                0164         CALL WRITE_FLD_XY_RS( 'GM_bolFac2d',' ',GM_bolFac2d,-1,myThid )
                0165       ENDIF
0c49347dc7 Alis*0166 
a4576c7cde Juli*0167 #if ( defined GM_BATES_K3D || defined GM_GEOM_VARIABLE_K )
                0168       IF ( .NOT.( startTime.EQ.baseTime .AND. nIter0.EQ.0
                0169      &            .AND. pickupSuff.EQ.' ' )
                0170      &     .AND.( GM_useBatesK3d .OR. GM_useGEOM ) ) THEN
                0171         CALL GMREDI_READ_PICKUP( nIter0, myThid )
5a6ef5c2b4 Mich*0172       ENDIF
                0173 #endif
f183cca6ba Davi*0174 
05118ac017 Jean*0175 #ifdef GM_BATES_K3D
a4576c7cde Juli*0176 C     This is put here, but really should be in gmredi_init_fixed.F. The
                0177 C     problem is that fCori, fCoriCos, etc are not initialized when
                0178 C     gmredi_init_fixed.F is called. To be fixed.
f183cca6ba Davi*0179 C     Computing beta = df/dy
                0180       IF ( selectCoriMap.EQ.1 ) THEN
                0181        DO bj = myByLo(myThid), myByHi(myThid)
                0182         DO bi = myBxLo(myThid), myBxHi(myThid)
796b5e35f7 Jean*0183          DO j=1-OLy,sNy+OLy
                0184           DO i=1-OLx,sNx+OLx
f183cca6ba Davi*0185            gradf(i,j,bi,bj) =  beta
                0186           ENDDO
                0187          ENDDO
                0188         ENDDO
                0189        ENDDO
                0190       ELSEIF ( selectCoriMap.EQ.2 ) THEN
                0191        DO bj = myByLo(myThid), myByHi(myThid)
                0192         DO bi = myBxLo(myThid), myBxHi(myThid)
796b5e35f7 Jean*0193          DO j=1-OLy,sNy+OLy
                0194           DO i=1-OLx,sNx+OLx
f183cca6ba Davi*0195            gradf(i,j,bi,bj) = recip_rSphere*fCoriCos(i,j,bi,bj)
                0196           ENDDO
                0197          ENDDO
                0198         ENDDO
                0199        ENDDO
                0200       ELSE
                0201        DO bj = myByLo(myThid), myByHi(myThid)
                0202         DO bi = myBxLo(myThid), myBxHi(myThid)
796b5e35f7 Jean*0203          DO j=1-OLy+1,sNy+OLy-1
                0204           DO i=1-OLx+1,sNx+OLx-1
f183cca6ba Davi*0205            gradf(i,j,bi,bj)  =  .5 _d 0*angleSinC(i,j,bi,bj)*(
                0206      &    (fCori(i+1,j,bi,bj)-fCori(i  ,j,bi,bj))*recip_dxC(i+1,j,bi,bj)
                0207      &   +(fCori(i  ,j,bi,bj)-fCori(i-1,j,bi,bj))*recip_dxC(i,j,bi,bj) )
                0208      &                       +  .5 _d 0*angleCosC(i,j,bi,bj)*(
                0209      &    (fCori(i,j+1,bi,bj)-fCori(i,j  ,bi,bj))*recip_dyC(i,j+1,bi,bj)
                0210      &   +(fCori(i,j  ,bi,bj)-fCori(i,j-1,bi,bj))*recip_dyC(i,j,bi,bj) )
                0211            gradf(i,j,bi,bj)=max(1. _d -18, gradf(i,j,bi,bj) )
                0212           ENDDO
                0213          ENDDO
                0214         ENDDO
                0215        ENDDO
                0216       ENDIF
                0217       CALL EXCH_XY_RL( gradf, myThid)
94a8024bbe Jean*0218 #endif /* GM_BATES_K3D */
                0219 
                0220 #ifdef ALLOW_AUTODIFF
                0221       ENDIF
f183cca6ba Davi*0222 #endif
94a8024bbe Jean*0223 #endif /* ALLOW_GMREDI */
f183cca6ba Davi*0224 
8391062d12 Jean*0225       RETURN
                0226       END