File indexing completed on 2024-03-02 06:10:18 UTC
view on githubraw file Latest commit 5cf43646 on 2024-03-01 18:50:49 UTC
5cf4364659 Mart*0001 #include "CTRL_OPTIONS.h"
0002
0003
0004
0005
0006 SUBROUTINE CTRL_INIT_FIXED( myThid )
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 IMPLICIT NONE
0017
0018
0019 #include "EEPARAMS.h"
0020 #include "SIZE.h"
0021 #include "PARAMS.h"
0022 #include "GRID.h"
0023 #ifdef ALLOW_CTRL
0024 # include "CTRL_SIZE.h"
0025 # include "CTRL.h"
0026 # include "CTRL_GENARR.h"
0027 # include "CTRL_OBCS.h"
0028 #endif
0029 #ifdef ALLOW_CAL
0030 # include "cal.h"
0031 #endif
0032 #ifdef ALLOW_DIC_CONTROL
0033 # include "DIC_CTRL.h"
0034 #endif
0035
0036
0037
0038 INTEGER myThid
0039
0040
0041 #ifdef ALLOW_GENTIM2D_CONTROL
0042 INTEGER ILNBLNK
0043 EXTERNAL ILNBLNK
0044 #endif
0045 #ifdef ALLOW_OBCS_CONTROL_MODES
0046 INTEGER MDS_RECLEN
0047 EXTERNAL MDS_RECLEN
0048 #endif
0049
0050
0051
0052 CHARACTER*(MAX_LEN_MBUF) msgBuf
0053 INTEGER bi, bj
0054 INTEGER i, j, k
0055 INTEGER ivar, iarr
0056 LOGICAL costfinal_exists
0057 _RL dummy
0058 _RL loctmp3d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0059
0060 #if ( defined ALLOW_GENTIM2D_CONTROL || \
0061 defined ALLOW_GENARR2D_CONTROL || \
0062 defined ALLOW_GENARR3D_CONTROL )
0063 CHARACTER*(1) ncvargrdtmp
0064 #endif
0065 #ifdef ALLOW_GENTIM2D_CONTROL
0066 CHARACTER*(MAX_LEN_FNAM) fnamegen
0067 INTEGER ilgen, k2, diffrecFull, endrecFull
0068 INTEGER diffrec, startrec, endrec
0069 #elif ( defined ALLOW_OBCS_CONTROL )
0070 INTEGER diffrec, startrec, endrec
0071 #endif
0072
0073 #ifdef ALLOW_OBCS_CONTROL_MODES
0074 INTEGER length_of_rec, dUnit
0075 #endif
0076
0077
0078
0079
0080
0081 DO ivar = 1,maxcvars
0082 ncvarindex(ivar) = -1
0083 ncvarrecs(ivar) = 0
0084 ncvarxmax(ivar) = 0
0085 ncvarymax(ivar) = 0
0086 ncvarnrmax(ivar) = 0
0087 ncvargrd(ivar) = '?'
0088 ncvartype(ivar) = '?'
0089 ncvarfname(ivar) = ' '
0090 ENDDO
0091
0092
0093 DO bj=1,nSy
0094 DO bi=1,nSx
0095 DO k=1,Nr
0096 wunit(k,bi,bj) = 1. _d 0
0097 DO j=1-OLy,sNy+OLy
0098 DO i=1-OLx,sNx+OLx
0099 loctmp3d(i,j,k,bi,bj) = 1. _d 0
0100 ENDDO
0101 ENDDO
0102 ENDDO
0103 ENDDO
0104 ENDDO
0105
0106 #ifdef ALLOW_AUTODIFF
0107 CALL active_write_xyz( 'wunit', loctmp3d, 1, 0, myThid, dummy)
0108 #else
0109 CALL WRITE_REC_XYZ_RL( 'wunit', loctmp3d, 1, 1, myThid )
0110 #endif
0111
0112 #ifdef CTRL_DO_PACK_UNPACK_ONLY
0113 costfinal_exists=.FALSE.
0114 #else
0115
0116 inquire( file='costfinal', exist=costfinal_exists )
0117
0118
0119
0120 IF ( costfinal_exists ) CALL TURNOFF_MODEL_IO( 1, myThid )
0121 #endif
0122
0123 _BARRIER
0124
0125 ivar = 0
0126
0127
0128
0129
0130
0131
0132 #ifdef ALLOW_OBCSN_CONTROL
0133
0134 CALL ctrl_init_rec ( xx_obcsn_file,
0135 I xx_obcsnstartdate1, xx_obcsnstartdate2, xx_obcsnperiod, 4,
0136 O xx_obcsnstartdate, diffrec, startrec, endrec,
0137 I myThid )
0138 ivar = ivar + 1
0139 iarr = 1
0140 CALL ctrl_init_ctrlvar (
0141 I xx_obcsn_file, ivar, iarr, diffrec, startrec, endrec,
0142 I sNx, 1, Nr, 'm', 'SecXZ', costfinal_exists, myThid )
0143 #endif /* ALLOW_OBCSN_CONTROL */
0144
0145
0146
0147 #ifdef ALLOW_OBCSS_CONTROL
0148
0149 CALL ctrl_init_rec ( xx_obcss_file,
0150 I xx_obcssstartdate1, xx_obcssstartdate2, xx_obcssperiod, 4,
0151 O xx_obcssstartdate, diffrec, startrec, endrec,
0152 I myThid )
0153 ivar = ivar+1
0154 iarr = 2
0155 CALL ctrl_init_ctrlvar (
0156 I xx_obcss_file, ivar, iarr, diffrec, startrec, endrec,
0157 I sNx, 1, Nr, 'm', 'SecXZ', costfinal_exists, myThid )
0158 #endif /* ALLOW_OBCSS_CONTROL */
0159
0160
0161
0162 #ifdef ALLOW_OBCSW_CONTROL
0163
0164 CALL ctrl_init_rec ( xx_obcsw_file,
0165 I xx_obcswstartdate1, xx_obcswstartdate2, xx_obcswperiod, 4,
0166 O xx_obcswstartdate, diffrec, startrec, endrec,
0167 I myThid )
0168 ivar = ivar+1
0169 iarr = 4
0170 CALL ctrl_init_ctrlvar (
0171 I xx_obcsw_file, ivar, iarr, diffrec, startrec, endrec,
0172 I 1, sNy, Nr, 'm', 'SecYZ', costfinal_exists, myThid )
0173 #endif /* ALLOW_OBCSW_CONTROL */
0174
0175
0176
0177 #ifdef ALLOW_OBCSE_CONTROL
0178
0179 CALL ctrl_init_rec ( xx_obcse_file,
0180 I xx_obcsestartdate1, xx_obcsestartdate2, xx_obcseperiod, 4,
0181 O xx_obcsestartdate, diffrec, startrec, endrec,
0182 I myThid )
0183 ivar = ivar+1
0184 iarr = 3
0185 CALL ctrl_init_ctrlvar (
0186 I xx_obcse_file, ivar, iarr, diffrec, startrec, endrec,
0187 I 1, sNy, Nr, 'm', 'SecYZ', costfinal_exists, myThid )
0188 #endif /* ALLOW_OBCSE_CONTROL */
0189
0190
0191
0192 #ifdef ALLOW_OBCS_CONTROL_MODES
0193
0194
0195
0196 CALL MDSFINDUNIT( dUnit, myThid )
0197 length_of_rec = MDS_RECLEN( 64, Nr*Nr, myThid )
0198 OPEN( dUnit, FILE='baro_invmodes.bin', STATUS='old',
0199 & ACCESS='direct', RECL=length_of_rec )
0200 DO j = 1,Nr
0201 READ(dUnit,rec=j) ((modesv(k,i,j), k=1,Nr), i=1,Nr)
0202 ENDDO
0203 CLOSE( dUnit )
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215
0216
0217
0218 #endif
0219
0220
0221
0222 #ifdef ALLOW_GENARR2D_CONTROL
0223 DO iarr = 1, maxCtrlArr2D
0224 ncvargrdtmp='c'
0225 # ifdef ALLOW_SHELFICE
0226
0227 IF ((xx_genarr2d_file(iarr)(1:11).EQ.'xx_shicoeff').OR.
0228 & (xx_genarr2d_file(iarr)(1:11).EQ.'xx_shicdrag')) THEN
0229 ncvargrdtmp='i'
0230 ENDIF
0231 # endif
0232
0233 #ifndef ALLOW_OPENAD
0234 IF (xx_genarr2d_weight(iarr).NE.' ') THEN
0235 #endif
0236 ivar = ivar+1
0237 CALL ctrl_init_ctrlvar (
0238 I xx_genarr2d_file(iarr),
0239 I ivar, iarr, 1, 1, 1,
0240 I sNx, sNy, 1, ncvargrdtmp, 'Arr2D', costfinal_exists,
0241 I myThid )
0242 #ifndef ALLOW_OPENAD
0243 ENDIF
0244 #endif
0245 ENDDO
0246 #endif /* ALLOW_GENARR2D_CONTROL */
0247
0248
0249
0250 #ifdef ALLOW_GENARR3D_CONTROL
0251 DO iarr = 1, maxCtrlArr3D
0252 ncvargrdtmp='c'
0253 #ifndef ALLOW_OPENAD
0254 IF (xx_genarr3d_weight(iarr).NE.' ') THEN
0255 #endif
0256 ivar = ivar+1
0257 CALL ctrl_init_ctrlvar (
0258 I xx_genarr3d_file(iarr),
0259 I ivar, iarr, 1, 1, 1,
0260 I sNx, sNy, Nr, ncvargrdtmp, 'Arr3D', costfinal_exists,
0261 I myThid )
0262 #ifndef ALLOW_OPENAD
0263 ENDIF
0264 #endif
0265 ENDDO
0266 #endif /* ALLOW_GENARR3D_CONTROL */
0267
0268
0269
0270 #ifdef ALLOW_GENTIM2D_CONTROL
0271 DO iarr = 1, maxCtrlTim2D
0272
0273 #ifdef ALLOW_CAL
0274 IF (xx_gentim2d_startdate1(iarr).EQ.0) THEN
0275 xx_gentim2d_startdate1(iarr)=startdate_1
0276 xx_gentim2d_startdate2(iarr)=startdate_2
0277 ENDIF
0278 #endif
0279 ncvargrdtmp='c'
0280 # ifdef ALLOW_SHELFICE
0281
0282 IF (xx_gentim2d_file(iarr)(1:11).EQ.'xx_shifwflx')
0283 & ncvargrdtmp='i'
0284 # endif
0285 IF (xx_gentim2d_file(iarr)(1:5).EQ.'xx_fu')
0286 & ncvargrdtmp='w'
0287 IF (xx_gentim2d_file(iarr)(1:5).EQ.'xx_fv')
0288 & ncvargrdtmp='s'
0289
0290 CALL ctrl_init_rec ( xx_gentim2d_file(iarr),
0291 I xx_gentim2d_startdate1(iarr),
0292 I xx_gentim2d_startdate2(iarr),
0293 I xx_gentim2d_period(iarr),
0294 I 1,
0295 O xx_gentim2d_startdate(1,iarr),
0296 O diffrec, startrec, endrec,
0297 I myThid )
0298
0299 #ifndef ALLOW_OPENAD
0300 IF (xx_gentim2d_weight(iarr).NE.' ') THEN
0301 #endif
0302 DO k2 = 1, maxCtrlProc
0303 IF (xx_gentim2d_preproc(k2,iarr).EQ.'replicate')
0304 & xx_gentim2d_preproc(k2,iarr)='docycle'
0305 IF (xx_gentim2d_preproc(k2,iarr).EQ.'doglomean')
0306 & xx_gentim2d_glosum(iarr) = .TRUE.
0307 IF (xx_gentim2d_preproc(k2,iarr).EQ.'documul')
0308 & xx_gentim2d_cumsum(iarr) = .TRUE.
0309 ENDDO
0310
0311 diffrecFull=diffrec
0312 endrecFull=endrec
0313 DO k2 = 1, maxCtrlProc
0314 IF (xx_gentim2d_preproc(k2,iarr).EQ.'docycle') THEN
0315 IF (xx_gentim2d_preproc_i(k2,iarr).NE.0) THEN
0316 diffrec=min(diffrec,xx_gentim2d_preproc_i(k2,iarr))
0317 endrec=min(endrec,xx_gentim2d_preproc_i(k2,iarr))
0318 ENDIF
0319 ENDIF
0320 ENDDO
0321
0322 ivar = ivar+1
0323 ilgen = ILNBLNK( xx_gentim2d_file(iarr) )
0324 WRITE(fnamegen,'(2a)')
0325 & xx_gentim2d_file(iarr)(1:ilgen),'.effective'
0326 CALL ctrl_init_ctrlvar (
0327 I fnamegen,
0328 I 0, iarr,
0329 I diffrecFull, startrec, endrecFull,
0330 I sNx, sNy, 1, ncvargrdtmp, 'Tim2D', costfinal_exists,
0331 I myThid )
0332
0333 WRITE(fnamegen,'(2a)')
0334 & xx_gentim2d_file(iarr)(1:ilgen),'.tmp'
0335 CALL ctrl_init_ctrlvar (
0336 I fnamegen,
0337 I 0, iarr,
0338 I diffrecFull, startrec, endrecFull,
0339 I sNx, sNy, 1, ncvargrdtmp, 'Tim2D', costfinal_exists,
0340 I myThid )
0341
0342
0343 CALL ctrl_init_ctrlvar (
0344 I xx_gentim2d_file(iarr),
0345 I ivar, iarr,
0346 I endrec, 1, endrec,
0347 I sNx, sNy, 1, ncvargrdtmp, 'Tim2D', costfinal_exists,
0348 I myThid )
0349
0350 #ifndef ALLOW_OPENAD
0351 ENDIF
0352 #endif
0353
0354 ENDDO
0355 #endif /* ALLOW_GENTIM2D_CONTROL */
0356
0357
0358
0359
0360 WRITE(msgBuf,'(2A,I4,A)') 'CTRL_INIT_FIXED: ',
0361 & 'ivar=', ivar, ' = number of CTRL variables defined'
0362 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0363 & SQUEEZE_RIGHT, myThid )
0364 WRITE(msgBuf,'(A)') ' '
0365 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0366 & SQUEEZE_RIGHT, myThid )
0367
0368
0369
0370 CALL CTRL_INIT_WET( myThid )
0371
0372 #ifdef ALLOW_DIC_CONTROL
0373 DO i = 1, dic_n_control
0374 xx_dic(i) = 0. _d 0
0375 ENDDO
0376 #endif
0377
0378
0379
0380 _BARRIER
0381
0382
0383 _BEGIN_MASTER( myThid )
0384 CALL CTRL_SUMMARY( myThid )
0385 _END_MASTER( myThid )
0386
0387 RETURN
0388 END