File indexing completed on 2023-11-05 05:11:20 UTC
view on githubraw file Latest commit 65754df4 on 2023-11-04 17:55:24 UTC
a235da16e6 Jean*0001 #include "CTRL_OPTIONS.h"
a78204c019 Mart*0002 #ifdef ALLOW_SHELFICE
0003 # include "SHELFICE_OPTIONS.h"
0004 #endif
a897a05ba0 Patr*0005
0006
0601e85e79 Jean*0007
a897a05ba0 Patr*0008
0601e85e79 Jean*0009 SUBROUTINE CTRL_MAP_INI_GENARR( myThid )
a897a05ba0 Patr*0010
0011
0601e85e79 Jean*0012
0013
0014
0015
4d72283393 Mart*0016
0601e85e79 Jean*0017
a897a05ba0 Patr*0018
0019
0020
0601e85e79 Jean*0021 IMPLICIT NONE
a897a05ba0 Patr*0022
0601e85e79 Jean*0023
a897a05ba0 Patr*0024 #include "SIZE.h"
9b14145662 Jean*0025 #include "EEPARAMS.h"
a897a05ba0 Patr*0026 #include "PARAMS.h"
0027 #include "GRID.h"
0028 #include "DYNVARS.h"
0029 #include "FFIELDS.h"
0030 #include "CTRL_SIZE.h"
4d72283393 Mart*0031 #include "CTRL.h"
65754df434 Mart*0032 #include "OPTIMCYCLE.h"
edcd27be69 Mart*0033 #include "CTRL_DUMMY.h"
a78204c019 Mart*0034 #include "CTRL_FIELDS.h"
0035 #include "CTRL_GENARR.h"
a897a05ba0 Patr*0036 #ifdef ALLOW_PTRACERS
0037 # include "PTRACERS_SIZE.h"
a78204c019 Mart*0038 # include "PTRACERS_PARAMS.h"
a897a05ba0 Patr*0039 # include "PTRACERS_FIELDS.h"
0040 #endif
a78204c019 Mart*0041 #ifdef ALLOW_SHELFICE
0042 # include "SHELFICE.h"
0043 #endif
a897a05ba0 Patr*0044
0045
0601e85e79 Jean*0046
0047 INTEGER myThid
a897a05ba0 Patr*0048
a78204c019 Mart*0049 #if (defined (ALLOW_GENARR3D_CONTROL) && defined(ALLOW_PTRACERS))
0601e85e79 Jean*0050
a78204c019 Mart*0051 INTEGER ILNBLNK
0601e85e79 Jean*0052 EXTERNAL ILNBLNK
a78204c019 Mart*0053 #endif
a897a05ba0 Patr*0054
0601e85e79 Jean*0055
0056
a78204c019 Mart*0057 #if (defined (ALLOW_GENARR2D_CONTROL) || defined(ALLOW_GENARR3D_CONTROL))
0058 INTEGER iarr
7c50f07931 Mart*0059 #endif
a78204c019 Mart*0060 #ifdef ALLOW_GENARR2D_CONTROL
0061 _RL airTlev1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0062 _RL airQlev1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0063 INTEGER igen_etan,igen_bdrag,igen_geoth
0064 # ifdef ALLOW_SHELFICE
0065 INTEGER igen_shiCoeffT, igen_shiCoeffS, igen_shiCDrag
0066 INTEGER i, j, bi, bj, k2
0067 LOGICAL dragThermoEqualMom
0068 # else
0069 INTEGER i, j, bi, bj
0070 # endif
0071 #endif /* ALLOW_GENARR2D_CONTROL */
7c50f07931 Mart*0072 #ifdef ALLOW_GENARR3D_CONTROL
a78204c019 Mart*0073 INTEGER igen_theta0, igen_salt0
0074 INTEGER igen_kapgm, igen_kapredi, igen_diffkr
0075 # if (defined (ALLOW_UVEL0_CONTROL) && defined (ALLOW_VVEL0_CONTROL))
0076 INTEGER igen_uvel0, igen_vvel0
0077 # endif
0078 # ifdef ALLOW_PTRACERS
0079 INTEGER iPtr, iLen
0080 INTEGER igen_ptr(PTRACERS_num)
0081 # endif
0082 #endif /* ALLOW_GENARR3D_CONTROL */
a897a05ba0 Patr*0083
0084
0085 #ifdef ALLOW_GENARR2D_CONTROL
a78204c019 Mart*0086
0087
0088 igen_etan=0
0089 igen_bdrag=0
0090 igen_geoth=0
0091 #ifdef ALLOW_SHELFICE
0092 igen_shiCoeffT=0
0093 igen_shiCoeffS=0
0094 igen_shiCDrag=0
0095 #endif
0601e85e79 Jean*0096 DO iarr = 1, maxCtrlArr2D
a78204c019 Mart*0097 IF (xx_genarr2d_weight(iarr).NE.' ') THEN
0098 IF (xx_genarr2d_file(iarr)(1:7).EQ.'xx_etan')
0099 & igen_etan=iarr
0100 IF (xx_genarr2d_file(iarr)(1:13).EQ.'xx_bottomdrag')
0101 & igen_bdrag=iarr
0102 IF (xx_genarr2d_file(iarr)(1:13).EQ.'xx_geothermal')
0103 & igen_geoth=iarr
0104 #ifdef ALLOW_SHELFICE
0105 # ifndef SHI_ALLOW_GAMMAFRICT
0106 IF (xx_genarr2d_file(iarr)(1:12).EQ.'xx_shicoefft')
0107 & igen_shiCoeffT=iarr
0108 IF (xx_genarr2d_file(iarr)(1:12).EQ.'xx_shicoeffs')
0109 & igen_shiCoeffS=iarr
0110 # else
0111 IF (xx_genarr2d_file(iarr)(1:11).EQ.'xx_shicdrag')
0112 & igen_shiCDrag=iarr
0113 # endif
0114 #endif
0115 ENDIF
0116 ENDDO
0117
0118 IF (igen_etan.GT.0) THEN
0119 CALL CTRL_MAP_GENARR2D( etaN, igen_etan, myThid )
0120 ENDIF
0121 #ifdef ALLOW_BOTTOMDRAG_CONTROL
0122 IF (igen_bdrag.GT.0)
0123 & CALL CTRL_MAP_GENARR2D( bottomDragFld, igen_bdrag, myThid )
0124 #endif
0125 #ifdef ALLOW_GEOTHERMAL_FLUX
0126 IF (igen_geoth.GT.0)
0127 & CALL CTRL_MAP_GENARR2D( geothermalFlux, igen_geoth, myThid )
0128 #endif
0129 #ifdef ALLOW_SHELFICE
0130 # ifndef SHI_ALLOW_GAMMAFRICT
0131 IF (igen_shiCoeffT.GT.0)
0132 & CALL CTRL_MAP_GENARR2D(shiTransCoeffT,igen_shiCoeffT,myThid)
0133
0134 IF (igen_shiCoeffS.GT.0)
0135 & CALL CTRL_MAP_GENARR2D(shiTransCoeffS,igen_shiCoeffS,myThid)
0601e85e79 Jean*0136
a78204c019 Mart*0137
0138 IF ((igen_shiCoeffS.EQ.0).AND.(igen_shiCoeffT.GT.0)) THEN
0139 DO bj = myByLo(myThid), myByHi(myThid)
0140 DO bi = myBxLo(myThid), myBxHi(myThid)
0141 DO j = 1-OLy,sNy+OLy
0142 DO i = 1-OLx,sNx+OLx
0143 shiTransCoeffS(i,j,bi,bj) =
0144 & SHELFICEsaltToHeatRatio*shiTransCoeffT(i,j,bi,bj)
0145 ENDDO
0146 ENDDO
0601e85e79 Jean*0147 ENDDO
0148 ENDDO
a78204c019 Mart*0149
0150 ELSEIF ((igen_shiCoeffT.EQ.0).AND.(igen_shiCoeffS.GT.0)) THEN
0151 DO bj = myByLo(myThid), myByHi(myThid)
0152 DO bi = myBxLo(myThid), myBxHi(myThid)
0153 DO j = 1-OLy,sNy+OLy
0154 DO i = 1-OLx,sNx+OLx
0155 shiTransCoeffT(i,j,bi,bj) =
0156 & shiTransCoeffS(i,j,bi,bj)/SHELFICEsaltToHeatRatio
0157 ENDDO
0158 ENDDO
0159 ENDDO
0160 ENDDO
0161 ENDIF
0162 # else
0163 dragThermoEqualMom = .FALSE.
0164 IF (igen_shiCDrag.GT.0)
0165 & CALL CTRL_MAP_GENARR2D(shiCDragFld,igen_shiCDrag,myThid)
0166
0167
0168 DO k2 = 1, maxCtrlProc
57b21c88e4 Patr*0169
a78204c019 Mart*0170 IF (xx_genarr2d_preproc_c(k2,igen_shiCDrag)(1:3).EQ.'mom')
0171 & dragThermoEqualMom = .TRUE.
0172 ENDDO
0173 IF (dragThermoEqualMom) THEN
0174 DO bj = myByLo(myThid), myByHi(myThid)
0175 DO bi = myBxLo(myThid), myBxHi(myThid)
0176 DO j = 1-OLy,sNy+OLy
0177 DO i = 1-OLx,sNx+OLx
0178 shiDragQuadFld(i,j,bi,bj) = shiCDragFld(i,j,bi,bj)
0179 ENDDO
0180 ENDDO
0181 ENDDO
0182 ENDDO
0183 ENDIF
0184 # endif /* SHI_ALLOW_GAMMAFRICT */
0185 #endif /* ALLOW_SHELFICE */
0186
0187 DO bj=myByLo(myThid), myByHi(myThid)
0188 DO bi=myBxLo(myThid), myBxHi(myThid)
0189 DO j = 1-OLy,sNy+OLy
0190 DO i = 1-OLx,sNx+OLx
0191 airTlev1(i,j,bi,bj) = theta(i,j,1,bi,bj)
0192 airQlev1(i,j,bi,bj) = salt (i,j,1,bi,bj)
0193 ENDDO
0194 ENDDO
0195 ENDDO
0196 ENDDO
0197 iarr = 1
0198 CALL CTRL_MAP_GENARR2D( airTlev1, iarr, myThid )
0199 iarr = 2
0200 CALL CTRL_MAP_GENARR2D( airQlev1, iarr, myThid )
0201 DO bj=myByLo(myThid), myByHi(myThid)
0202 DO bi=myBxLo(myThid), myBxHi(myThid)
0203 DO j = 1-OLy,sNy+OLy
0204 DO i = 1-OLx,sNx+OLx
0205 theta(i,j,1,bi,bj) = airTlev1(i,j,bi,bj)
0206 salt (i,j,1,bi,bj) = airQlev1(i,j,bi,bj)
0207 ENDDO
0208 ENDDO
0209 ENDDO
0210 ENDDO
0211
0601e85e79 Jean*0212
0213 #endif /* ALLOW_GENARR2D_CONTROL */
a897a05ba0 Patr*0214
0215 #ifdef ALLOW_GENARR3D_CONTROL
a78204c019 Mart*0216
0217
0218 igen_theta0=0
0219 igen_salt0=0
0220 igen_kapgm=0
0221 igen_kapredi=0
0222 igen_diffkr=0
0223 # if (defined (ALLOW_UVEL0_CONTROL) && defined (ALLOW_VVEL0_CONTROL))
0224 igen_uvel0=0
0225 igen_vvel0=0
0226 # endif
0227 # ifdef ALLOW_PTRACERS
0228 DO iPtr = 1, PTRACERS_num
0229 igen_ptr(iPtr) = 0
0230 ENDDO
0231 # endif /* ALLOW_PTRACERS */
0601e85e79 Jean*0232 DO iarr = 1, maxCtrlArr3D
a78204c019 Mart*0233 IF (xx_genarr3d_weight(iarr).NE.' ') THEN
0234 IF (xx_genarr3d_file(iarr)(1:8).EQ.'xx_theta')
0235 & igen_theta0=iarr
0236 IF (xx_genarr3d_file(iarr)(1:7).EQ.'xx_salt')
0237 & igen_salt0=iarr
0238 IF (xx_genarr3d_file(iarr)(1:8).EQ.'xx_kapgm')
0239 & igen_kapgm=iarr
0240 IF (xx_genarr3d_file(iarr)(1:10).EQ.'xx_kapredi')
0241 & igen_kapredi=iarr
0242 IF (xx_genarr3d_file(iarr)(1:9).EQ.'xx_diffkr')
0243 & igen_diffkr=iarr
0244 # if (defined (ALLOW_UVEL0_CONTROL) && defined (ALLOW_VVEL0_CONTROL))
0245 IF (xx_genarr3d_file(iarr)(1:7).EQ.'xx_uvel')
0246 & igen_uvel0=iarr
0247 IF (xx_genarr3d_file(iarr)(1:7).EQ.'xx_vvel')
0248 & igen_vvel0=iarr
0249 # endif
0250 # ifdef ALLOW_PTRACERS
0251 IF ( usePTRACERS ) THEN
0252 iLen = ILNBLNK(xx_genarr3d_file(iarr))
0253 IF ( iLen.EQ.7 .AND.
0254 & xx_genarr3d_file(iarr)(1:6).EQ.'xx_ptr' ) THEN
0255 READ(xx_genarr3d_file(iarr)(7:7),*) iPtr
0256 IF ( iPtr.GE.1 .AND. iPtr.LE.PTRACERS_numInUse )
0257 & igen_ptr(iPtr) = iarr
0258 ENDIF
0259 ENDIF
0260 # endif /* ALLOW_PTRACERS */
0261 ENDIF
0262 ENDDO
0601e85e79 Jean*0263
a78204c019 Mart*0264
0265
0266
0267
0268
0269
0270
0271
0272
0273 # ifdef ALLOW_KAPGM_CONTROL
0274 IF (igen_kapgm.GT.0)
0275 & CALL CTRL_MAP_GENARR3D( kapGM, igen_kapgm, myThid )
0276 # endif
0277 # ifdef ALLOW_KAPREDI_CONTROL
0278 IF (igen_kapredi.GT.0)
0279 & CALL CTRL_MAP_GENARR3D( kapRedi, igen_kapredi, myThid )
0280 # endif
0281 # if ( defined ALLOW_DIFFKR_CONTROL && defined ALLOW_3D_DIFFKR )
0282 IF (igen_diffkr.GT.0)
0283 & CALL CTRL_MAP_GENARR3D( diffKr, igen_diffkr, myThid )
0284 # endif
0285
0286 # ifdef ALLOW_PTRACERS
0287
0288 DO iPtr = 1, PTRACERS_num
0289 IF ( igen_ptr(iPtr).GT.0 ) THEN
0290 CALL CTRL_MAP_GENARR3D( pTracer(1-OLx,1-OLy,1,1,1,iPtr),
0291 & igen_ptr(iPtr), myThid )
0292 ENDIF
0601e85e79 Jean*0293 ENDDO
a78204c019 Mart*0294 # endif /* ALLOW_PTRACERS */
57b21c88e4 Patr*0295
a78204c019 Mart*0296 # if (defined (ALLOW_UVEL0_CONTROL) && defined (ALLOW_VVEL0_CONTROL))
0297 IF (igen_uvel0.GT.0 .AND. igen_vvel0.GT.0) THEN
0298 CALL CTRL_MAP_GENARR3D( uVel, igen_uvel0, myThid )
0299 CALL CTRL_MAP_GENARR3D( vVel, igen_vvel0, myThid )
0300 CALL EXCH_UV_XYZ_RL( uVel, vVel, .TRUE., myThid )
0301 ENDIF
0302 # endif
0601e85e79 Jean*0303
0304 #endif /* ALLOW_GENARR3D_CONTROL */
a897a05ba0 Patr*0305
0601e85e79 Jean*0306 RETURN
0307 END