File indexing completed on 2023-11-05 05:10:17 UTC
view on githubraw file Latest commit 65754df4 on 2023-11-04 17:55:24 UTC
7bfe6112e8 Jean*0001 #include "CTRL_OPTIONS.h"
94a8024bbe Jean*0002 #ifdef ALLOW_GMREDI
0003 # include "GMREDI_OPTIONS.h"
0004 #endif
c69ccc91fb antn*0005 #ifdef ALLOW_SEAICE
0006 # include "SEAICE_OPTIONS.h"
0007 #endif
7b8b86ab99 Timo*0008 #ifdef ALLOW_SHELFICE
0009 # include "SHELFICE_OPTIONS.h"
0010 #endif
16cc32c739 Mart*0011 #ifdef ALLOW_STREAMICE
0012 # include "STREAMICE_OPTIONS.h"
0013 #endif
11c3150c71 Mart*0014 #ifdef ALLOW_DIC
0015 # include "DIC_OPTIONS.h"
0016 #endif
698b6992ee Jean*0017
ffe95b3b07 Patr*0018
74e877655a Jean*0019
ffe95b3b07 Patr*0020
74e877655a Jean*0021 SUBROUTINE CTRL_MAP_INI_GENARR( myThid )
ffe95b3b07 Patr*0022
0023
74e877655a Jean*0024
0025
0026
0027
4d72283393 Mart*0028
74e877655a Jean*0029
ffe95b3b07 Patr*0030
0031
0032
74e877655a Jean*0033 IMPLICIT NONE
ffe95b3b07 Patr*0034
74e877655a Jean*0035
ffe95b3b07 Patr*0036 #include "SIZE.h"
0037 #include "EEPARAMS.h"
0038 #include "PARAMS.h"
0039 #include "GRID.h"
0040 #include "DYNVARS.h"
0041 #include "FFIELDS.h"
c04085ad02 Patr*0042 #include "CTRL_SIZE.h"
4d72283393 Mart*0043 #include "CTRL.h"
edcd27be69 Mart*0044 #include "CTRL_DUMMY.h"
a6350907f1 Jean*0045 #include "CTRL_FIELDS.h"
c04085ad02 Patr*0046 #include "CTRL_GENARR.h"
94a8024bbe Jean*0047 #ifdef ALLOW_GMREDI
0048 # include "GMREDI.h"
0049 #endif
ffe95b3b07 Patr*0050 #ifdef ALLOW_PTRACERS
0051 # include "PTRACERS_SIZE.h"
698b6992ee Jean*0052 # include "PTRACERS_PARAMS.h"
ffe95b3b07 Patr*0053 # include "PTRACERS_FIELDS.h"
0054 #endif
c69ccc91fb antn*0055 #ifdef ALLOW_SEAICE
0056 # include "SEAICE_SIZE.h"
0057 # include "SEAICE.h"
0058 #endif
7b8b86ab99 Timo*0059 #ifdef ALLOW_SHELFICE
0060 # include "SHELFICE.h"
0061 #endif
16cc32c739 Mart*0062 #ifdef ALLOW_STREAMICE
0063 # include "STREAMICE.h"
0064 #endif
11c3150c71 Mart*0065 #if (defined ALLOW_DIC && defined DIC_BIOTIC)
0066 # include "DIC_VARS.h"
0067 #endif
ffe95b3b07 Patr*0068
0069
a78204c019 Mart*0070
74e877655a Jean*0071 INTEGER myThid
ffe95b3b07 Patr*0072
698b6992ee Jean*0073 #if (defined (ALLOW_GENARR3D_CONTROL) && defined(ALLOW_PTRACERS))
0074
0075 INTEGER ILNBLNK
0076 EXTERNAL ILNBLNK
0077 #endif
0078
416fa3402d Gael*0079
a78204c019 Mart*0080
bb18285007 Gael*0081 #if (defined (ALLOW_GENARR2D_CONTROL) || defined(ALLOW_GENARR3D_CONTROL))
698b6992ee Jean*0082 INTEGER iarr
96b006450c dngo*0083 CHARACTER*(MAX_LEN_FNAM) temp_genarr_fnam
bb18285007 Gael*0084 #endif
0085 #ifdef ALLOW_GENARR2D_CONTROL
c69ccc91fb antn*0086 INTEGER igen_etan, igen_bdrag, igen_geoth
0087 # ifdef ALLOW_SEAICE
0088 INTEGER igen_siarea, igen_siheff
0089 # endif
7b8b86ab99 Timo*0090 # ifdef ALLOW_SHELFICE
0091 INTEGER igen_shiCoeffT, igen_shiCoeffS, igen_shiCDrag
9f5240b52a Jean*0092 INTEGER i, j, bi, bj
0093 # ifdef SHI_ALLOW_GAMMAFRICT
0094 INTEGER k2
7b8b86ab99 Timo*0095 LOGICAL dragThermoEqualMom
9f5240b52a Jean*0096 # endif
7b8b86ab99 Timo*0097 # endif
16cc32c739 Mart*0098 #ifdef ALLOW_STREAMICE
96b006450c dngo*0099 INTEGER igen_b_glen, igen_rlow_streamice
0100 INTEGER igen_beta, igen_bdot_streamice
0101 INTEGER igen_bdot_max_streamice
0102 INTEGER igen_h_streamice
16cc32c739 Mart*0103 # endif
11c3150c71 Mart*0104 # if (defined ALLOW_DIC && defined DIC_BIOTIC)
0105 INTEGER igen_alpha
0106 # endif
bb18285007 Gael*0107 #endif /* ALLOW_GENARR2D_CONTROL */
0108 #ifdef ALLOW_GENARR3D_CONTROL
698b6992ee Jean*0109 INTEGER igen_theta0, igen_salt0
0110 INTEGER igen_kapgm, igen_kapredi, igen_diffkr
0111 # if (defined (ALLOW_UVEL0_CONTROL) && defined (ALLOW_VVEL0_CONTROL))
0112 INTEGER igen_uvel0, igen_vvel0
0113 # endif
0114 # ifdef ALLOW_PTRACERS
0115 INTEGER iPtr, iLen
0116 INTEGER igen_ptr(PTRACERS_num)
0117 # endif
bb18285007 Gael*0118 #endif /* ALLOW_GENARR3D_CONTROL */
416fa3402d Gael*0119
0120
b938a3c63b antn*0121 #ifdef ALLOW_DEBUG
0122 IF (debugMode) CALL DEBUG_ENTER('CTRL_MAP_INI_GENARR', myThid )
0123 #endif
416fa3402d Gael*0124 #ifdef ALLOW_GENARR2D_CONTROL
0125
0126
164786015a Gael*0127 igen_etan=0
416fa3402d Gael*0128 igen_bdrag=0
0129 igen_geoth=0
c69ccc91fb antn*0130 #ifdef ALLOW_SEAICE
0131 igen_siarea=0
0132 igen_siheff=0
0133 #endif
7b8b86ab99 Timo*0134 #ifdef ALLOW_SHELFICE
0135 igen_shiCoeffT=0
0136 igen_shiCoeffS=0
0137 igen_shiCDrag=0
0138 #endif
16cc32c739 Mart*0139 #ifdef ALLOW_STREAMICE
0140 igen_b_glen=0
96b006450c dngo*0141 igen_rlow_streamice=0
0142 igen_beta=0
0143 igen_bdot_streamice=0
0144 igen_bdot_max_streamice=0
16cc32c739 Mart*0145 igen_h_streamice=0
0146 #endif
416fa3402d Gael*0147 DO iarr = 1, maxCtrlArr2D
698b6992ee Jean*0148 IF (xx_genarr2d_weight(iarr).NE.' ') THEN
96b006450c dngo*0149 temp_genarr_fnam = xx_genarr2d_file(iarr)
0150 IF (temp_genarr_fnam(1:7).EQ.'xx_etan')
164786015a Gael*0151 & igen_etan=iarr
96b006450c dngo*0152 IF (temp_genarr_fnam(1:13).EQ.'xx_bottomdrag')
164786015a Gael*0153 & igen_bdrag=iarr
96b006450c dngo*0154 IF (temp_genarr_fnam(1:13).EQ.'xx_geothermal')
164786015a Gael*0155 & igen_geoth=iarr
c69ccc91fb antn*0156 #ifdef ALLOW_SEAICE
96b006450c dngo*0157 IF (temp_genarr_fnam(1:9).EQ.'xx_siarea')
c69ccc91fb antn*0158 & igen_siarea=iarr
96b006450c dngo*0159 IF (temp_genarr_fnam(1:9).EQ.'xx_siheff')
c69ccc91fb antn*0160 & igen_siheff=iarr
0161 #endif
7b8b86ab99 Timo*0162 #ifdef ALLOW_SHELFICE
0163 # ifndef SHI_ALLOW_GAMMAFRICT
96b006450c dngo*0164 IF (temp_genarr_fnam(1:12).EQ.'xx_shicoefft')
7b8b86ab99 Timo*0165 & igen_shiCoeffT=iarr
96b006450c dngo*0166 IF (temp_genarr_fnam(1:12).EQ.'xx_shicoeffs')
7b8b86ab99 Timo*0167 & igen_shiCoeffS=iarr
0168 # else
96b006450c dngo*0169 IF (temp_genarr_fnam(1:11).EQ.'xx_shicdrag')
7b8b86ab99 Timo*0170 & igen_shiCDrag=iarr
0171 # endif
0172 #endif
16cc32c739 Mart*0173 #ifdef ALLOW_STREAMICE
96b006450c dngo*0174 IF (temp_genarr_fnam(1:8).EQ.'xx_bglen')
16cc32c739 Mart*0175 & igen_b_glen=iarr
96b006450c dngo*0176 IF (temp_genarr_fnam(1:17).EQ.'xx_rlow_streamice')
0177 & igen_h_streamice=iarr
0178 IF (temp_genarr_fnam(1:7).EQ.'xx_beta')
0179 & igen_beta=iarr
0180 IF (temp_genarr_fnam(1:7).EQ.'xx_bdot')
0181 & igen_bdot_streamice=iarr
0182 IF (temp_genarr_fnam(1:11).EQ.'xx_bdot_max')
0183 & igen_bdot_max_streamice=iarr
0184 IF (temp_genarr_fnam(1:11).EQ.'xx_h_streamice')
16cc32c739 Mart*0185 & igen_h_streamice=iarr
0186 #endif
11c3150c71 Mart*0187 #if (defined ALLOW_DIC && defined DIC_BIOTIC)
96b006450c dngo*0188 IF (temp_genarr_fnam(1:11).EQ.'xx_alpha')
11c3150c71 Mart*0189 & igen_alpha=iarr
0190 #endif
698b6992ee Jean*0191 ENDIF
416fa3402d Gael*0192 ENDDO
0193
698b6992ee Jean*0194 IF (igen_etan.GT.0) THEN
0195 CALL CTRL_MAP_GENARR2D( etaN, igen_etan, myThid )
0196 ENDIF
416fa3402d Gael*0197 #ifdef ALLOW_BOTTOMDRAG_CONTROL
698b6992ee Jean*0198 IF (igen_bdrag.GT.0)
0199 & CALL CTRL_MAP_GENARR2D( bottomDragFld, igen_bdrag, myThid )
416fa3402d Gael*0200 #endif
0201 #ifdef ALLOW_GEOTHERMAL_FLUX
698b6992ee Jean*0202 IF (igen_geoth.GT.0)
0203 & CALL CTRL_MAP_GENARR2D( geothermalFlux, igen_geoth, myThid )
416fa3402d Gael*0204 #endif
c69ccc91fb antn*0205
0206 #ifdef ALLOW_SEAICE
0207 IF (igen_siarea.GT.0)
0208 & CALL CTRL_MAP_GENARR2D(AREA,igen_siarea,myThid)
0209 IF (igen_siheff.GT.0)
0210 & CALL CTRL_MAP_GENARR2D(HEFF,igen_siheff,myThid)
0211 #endif
7b8b86ab99 Timo*0212 #ifdef ALLOW_SHELFICE
0213 # ifndef SHI_ALLOW_GAMMAFRICT
0214 IF (igen_shiCoeffT.GT.0)
a78204c019 Mart*0215 & CALL CTRL_MAP_GENARR2D(shiTransCoeffT,igen_shiCoeffT,myThid)
7b8b86ab99 Timo*0216
0217 IF (igen_shiCoeffS.GT.0)
a78204c019 Mart*0218 & CALL CTRL_MAP_GENARR2D(shiTransCoeffS,igen_shiCoeffS,myThid)
7b8b86ab99 Timo*0219
0220
0221 IF ((igen_shiCoeffS.EQ.0).AND.(igen_shiCoeffT.GT.0)) THEN
0222 DO bj = myByLo(myThid), myByHi(myThid)
0223 DO bi = myBxLo(myThid), myBxHi(myThid)
0224 DO j = 1-OLy,sNy+OLy
0225 DO i = 1-OLx,sNx+OLx
0226 shiTransCoeffS(i,j,bi,bj) =
0227 & SHELFICEsaltToHeatRatio*shiTransCoeffT(i,j,bi,bj)
0228 ENDDO
0229 ENDDO
0230 ENDDO
0231 ENDDO
0232
0233 ELSEIF ((igen_shiCoeffT.EQ.0).AND.(igen_shiCoeffS.GT.0)) THEN
0234 DO bj = myByLo(myThid), myByHi(myThid)
0235 DO bi = myBxLo(myThid), myBxHi(myThid)
0236 DO j = 1-OLy,sNy+OLy
0237 DO i = 1-OLx,sNx+OLx
0238 shiTransCoeffT(i,j,bi,bj) =
0239 & shiTransCoeffS(i,j,bi,bj)/SHELFICEsaltToHeatRatio
0240 ENDDO
0241 ENDDO
0242 ENDDO
0243 ENDDO
0244 ENDIF
9f5240b52a Jean*0245 # else /* SHI_ALLOW_GAMMAFRICT */
7b8b86ab99 Timo*0246 dragThermoEqualMom = .FALSE.
c69ccc91fb antn*0247 IF (igen_shiCDrag.GT.0) THEN
0248 CALL CTRL_MAP_GENARR2D(shiCDragFld,igen_shiCDrag,myThid)
7b8b86ab99 Timo*0249
0250
c69ccc91fb antn*0251 DO k2 = 1, maxCtrlProc
0252 IF (xx_genarr2d_preproc_c(k2,igen_shiCDrag)(1:3).EQ.'mom')
0253 & dragThermoEqualMom = .TRUE.
0254 ENDDO
0255 ENDIF
7b8b86ab99 Timo*0256 IF (dragThermoEqualMom) THEN
0257 DO bj = myByLo(myThid), myByHi(myThid)
0258 DO bi = myBxLo(myThid), myBxHi(myThid)
0259 DO j = 1-OLy,sNy+OLy
0260 DO i = 1-OLx,sNx+OLx
0261 shiDragQuadFld(i,j,bi,bj) = shiCDragFld(i,j,bi,bj)
0262 ENDDO
0263 ENDDO
0264 ENDDO
0265 ENDDO
0266 ENDIF
0267 # endif /* SHI_ALLOW_GAMMAFRICT */
0268 #endif /* ALLOW_SHELFICE */
96b006450c dngo*0269
16cc32c739 Mart*0270 #ifdef ALLOW_STREAMICE
96b006450c dngo*0271 IF (igen_bdot_max_streamice.GT.0) THEN
0272 #ifdef ALLOW_OPENAD
0273 streamice_bdot_maxmelt_v(1,1,1,1) =
0274 & streamice_bdot_maxmelt_v(1,1,1,1) +
0275 & 0.0 * xx_genarr2d_dummy(igen_bdot_max_streamice)
0276 #endif
0277 CALL CTRL_MAP_GENARR2D( streamice_bdot_maxmelt_v,
0278 & igen_bdot_max_streamice, myThid )
0279 ENDIF
0280 IF (igen_bdot_streamice.GT.0) THEN
0281 #ifdef ALLOW_OPENAD
0282 bdot_streamice(1,1,1,1) = bdot_streamice(1,1,1,1) +
0283 & 0.0 * xx_genarr2d_dummy(igen_bdot_streamice)
0284 #endif
0285 CALL CTRL_MAP_GENARR2D( bdot_streamice, igen_bdot_streamice,
0286 & myThid )
0287 ENDIF
0288 IF (igen_beta.GT.0) THEN
0289 #ifdef ALLOW_OPENAD
0290 C_basal_friction(1,1,1,1) = C_basal_friction(1,1,1,1) +
0291 & 0.0 * xx_genarr2d_dummy(igen_beta)
0292 #endif
0293 CALL CTRL_MAP_GENARR2D( C_basal_friction, igen_beta, myThid )
0294 ENDIF
0295 IF (igen_rlow_streamice.GT.0) THEN
0296 #ifdef ALLOW_OPENAD
0297 r_low_si(1,1,1,1) = r_low_si(1,1,1,1) +
0298 & 0.0 * xx_genarr2d_dummy(igen_rlow_streamice)
0299 #endif
0300 CALL CTRL_MAP_GENARR2D( r_low_si, igen_rlow_streamice, myThid )
0301 ENDIF
0302 IF (igen_b_glen.GT.0) THEN
0303 #ifdef ALLOW_OPENAD
0304 B_glen(1,1,1,1) = B_glen(1,1,1,1) +
0305 & 0.0 * xx_genarr2d_dummy(igen_b_glen)
0306 #endif
0307 CALL CTRL_MAP_GENARR2D( B_glen, igen_b_glen, myThid )
0308 ENDIF
0309 IF (igen_h_streamice.GT.0) THEN
0310 #ifdef ALLOW_OPENAD
0311 h_streamice(1,1,1,1) = h_streamice(1,1,1,1) +
0312 & 0.0 * xx_genarr2d_dummy(igen_h_streamice)
0313 #endif
0314 CALL CTRL_MAP_GENARR2D( h_streamice, igen_h_streamice, myThid )
0315 ENDIF
16cc32c739 Mart*0316 #endif /* ALLOW_STREAMICE */
96b006450c dngo*0317
11c3150c71 Mart*0318 #if (defined ALLOW_DIC && defined DIC_BIOTIC)
0319 IF (igen_alpha.GT.0)
0320 & CALL CTRL_MAP_GENARR2D( alpha, igen_alpha, myThid )
0321 #endif
416fa3402d Gael*0322
0323 #endif /* ALLOW_GENARR2D_CONTROL */
0324
0325 #ifdef ALLOW_GENARR3D_CONTROL
0326
0327
0328 igen_theta0=0
0329 igen_salt0=0
0330 igen_kapgm=0
0331 igen_kapredi=0
0332 igen_diffkr=0
698b6992ee Jean*0333 # if (defined (ALLOW_UVEL0_CONTROL) && defined (ALLOW_VVEL0_CONTROL))
77f894c517 Timo*0334 igen_uvel0=0
0335 igen_vvel0=0
698b6992ee Jean*0336 # endif
0337 # ifdef ALLOW_PTRACERS
0338 DO iPtr = 1, PTRACERS_num
0339 igen_ptr(iPtr) = 0
0340 ENDDO
0341 # endif /* ALLOW_PTRACERS */
416fa3402d Gael*0342 DO iarr = 1, maxCtrlArr3D
698b6992ee Jean*0343 IF (xx_genarr3d_weight(iarr).NE.' ') THEN
0344 IF (xx_genarr3d_file(iarr)(1:8).EQ.'xx_theta')
164786015a Gael*0345 & igen_theta0=iarr
698b6992ee Jean*0346 IF (xx_genarr3d_file(iarr)(1:7).EQ.'xx_salt')
164786015a Gael*0347 & igen_salt0=iarr
698b6992ee Jean*0348 IF (xx_genarr3d_file(iarr)(1:8).EQ.'xx_kapgm')
164786015a Gael*0349 & igen_kapgm=iarr
698b6992ee Jean*0350 IF (xx_genarr3d_file(iarr)(1:10).EQ.'xx_kapredi')
164786015a Gael*0351 & igen_kapredi=iarr
698b6992ee Jean*0352 IF (xx_genarr3d_file(iarr)(1:9).EQ.'xx_diffkr')
164786015a Gael*0353 & igen_diffkr=iarr
698b6992ee Jean*0354 # if (defined (ALLOW_UVEL0_CONTROL) && defined (ALLOW_VVEL0_CONTROL))
0355 IF (xx_genarr3d_file(iarr)(1:7).EQ.'xx_uvel')
6b2230d510 Ou W*0356 & igen_uvel0=iarr
698b6992ee Jean*0357 IF (xx_genarr3d_file(iarr)(1:7).EQ.'xx_vvel')
6b2230d510 Ou W*0358 & igen_vvel0=iarr
698b6992ee Jean*0359 # endif
0360 # ifdef ALLOW_PTRACERS
0361 IF ( usePTRACERS ) THEN
0362 iLen = ILNBLNK(xx_genarr3d_file(iarr))
0363 IF ( iLen.EQ.7 .AND.
0364 & xx_genarr3d_file(iarr)(1:6).EQ.'xx_ptr' ) THEN
0365 READ(xx_genarr3d_file(iarr)(7:7),*) iPtr
0366 IF ( iPtr.GE.1 .AND. iPtr.LE.PTRACERS_numInUse )
0367 & igen_ptr(iPtr) = iarr
0368 ENDIF
0369 ENDIF
0370 # endif /* ALLOW_PTRACERS */
0371 ENDIF
416fa3402d Gael*0372 ENDDO
0373
698b6992ee Jean*0374 IF (igen_theta0.GT.0)
0375 & CALL CTRL_MAP_GENARR3D( theta, igen_theta0, myThid )
0376 IF (igen_salt0.GT.0)
0377 & CALL CTRL_MAP_GENARR3D( salt, igen_salt0, myThid )
94a8024bbe Jean*0378 # if ( defined ALLOW_KAPGM_CONTROL && defined GM_READ_K3D_GM )
698b6992ee Jean*0379 IF (igen_kapgm.GT.0)
94a8024bbe Jean*0380 & CALL CTRL_MAP_GENARR3D( GM_inpK3dGM, igen_kapgm, myThid )
698b6992ee Jean*0381 # endif
94a8024bbe Jean*0382 # if ( defined ALLOW_KAPREDI_CONTROL && defined GM_READ_K3D_REDI )
698b6992ee Jean*0383 IF (igen_kapredi.GT.0)
94a8024bbe Jean*0384 & CALL CTRL_MAP_GENARR3D( GM_inpK3dRedi, igen_kapredi, myThid )
698b6992ee Jean*0385 # endif
0386 # if ( defined ALLOW_DIFFKR_CONTROL && defined ALLOW_3D_DIFFKR )
0387 IF (igen_diffkr.GT.0)
0388 & CALL CTRL_MAP_GENARR3D( diffKr, igen_diffkr, myThid )
0389 # endif
0390
0391 # ifdef ALLOW_PTRACERS
0392
0393 DO iPtr = 1, PTRACERS_num
0394 IF ( igen_ptr(iPtr).GT.0 ) THEN
0395 CALL CTRL_MAP_GENARR3D( pTracer(1-OLx,1-OLy,1,1,1,iPtr),
0396 & igen_ptr(iPtr), myThid )
0397 ENDIF
0398 ENDDO
0399 # endif /* ALLOW_PTRACERS */
0400
0401 # if (defined (ALLOW_UVEL0_CONTROL) && defined (ALLOW_VVEL0_CONTROL))
0402 IF (igen_uvel0.GT.0 .AND. igen_vvel0.GT.0) THEN
0403 CALL CTRL_MAP_GENARR3D( uVel, igen_uvel0, myThid )
0404 CALL CTRL_MAP_GENARR3D( vVel, igen_vvel0, myThid )
0405 CALL EXCH_UV_XYZ_RL( uVel, vVel, .TRUE., myThid )
0406 ENDIF
0407 # endif
416fa3402d Gael*0408
0409 #endif /* ALLOW_GENARR3D_CONTROL */
0410
b938a3c63b antn*0411 #ifdef ALLOW_DEBUG
0412 IF (debugMode) CALL DEBUG_LEAVE('CTRL_MAP_INI_GENARR', myThid )
0413 #endif
0414
416fa3402d Gael*0415 RETURN
0416 END