File indexing completed on 2024-07-17 05:10:38 UTC
view on githubraw file Latest commit acacc28f on 2024-07-17 03:59:01 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
acacc28f7f Jean*0056 LOGICAL costFinalExist
5cf4364659 Mart*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
acacc28f7f Jean*0113 costFinalExist = .FALSE.
0114 #else /* CTRL_DO_PACK_UNPACK_ONLY */
5cf4364659 Mart*0115
acacc28f7f Jean*0116 INQUIRE( FILE='costfinal', EXIST=costFinalExist )
5cf4364659 Mart*0117
acacc28f7f Jean*0118 #endif /* CTRL_DO_PACK_UNPACK_ONLY */
5cf4364659 Mart*0119
0120 _BARRIER
0121
0122 ivar = 0
0123
0124
0125
0126
0127
0128
0129 #ifdef ALLOW_OBCSN_CONTROL
0130
0131 CALL ctrl_init_rec ( xx_obcsn_file,
0132 I xx_obcsnstartdate1, xx_obcsnstartdate2, xx_obcsnperiod, 4,
0133 O xx_obcsnstartdate, diffrec, startrec, endrec,
0134 I myThid )
0135 ivar = ivar + 1
0136 iarr = 1
0137 CALL ctrl_init_ctrlvar (
0138 I xx_obcsn_file, ivar, iarr, diffrec, startrec, endrec,
acacc28f7f Jean*0139 I sNx, 1, Nr, 'm', 'SecXZ', costFinalExist, myThid )
5cf4364659 Mart*0140 #endif /* ALLOW_OBCSN_CONTROL */
0141
0142
0143
0144 #ifdef ALLOW_OBCSS_CONTROL
0145
0146 CALL ctrl_init_rec ( xx_obcss_file,
0147 I xx_obcssstartdate1, xx_obcssstartdate2, xx_obcssperiod, 4,
0148 O xx_obcssstartdate, diffrec, startrec, endrec,
0149 I myThid )
0150 ivar = ivar+1
0151 iarr = 2
0152 CALL ctrl_init_ctrlvar (
0153 I xx_obcss_file, ivar, iarr, diffrec, startrec, endrec,
acacc28f7f Jean*0154 I sNx, 1, Nr, 'm', 'SecXZ', costFinalExist, myThid )
5cf4364659 Mart*0155 #endif /* ALLOW_OBCSS_CONTROL */
0156
0157
0158
0159 #ifdef ALLOW_OBCSW_CONTROL
0160
0161 CALL ctrl_init_rec ( xx_obcsw_file,
0162 I xx_obcswstartdate1, xx_obcswstartdate2, xx_obcswperiod, 4,
0163 O xx_obcswstartdate, diffrec, startrec, endrec,
0164 I myThid )
0165 ivar = ivar+1
0166 iarr = 4
0167 CALL ctrl_init_ctrlvar (
0168 I xx_obcsw_file, ivar, iarr, diffrec, startrec, endrec,
acacc28f7f Jean*0169 I 1, sNy, Nr, 'm', 'SecYZ', costFinalExist, myThid )
5cf4364659 Mart*0170 #endif /* ALLOW_OBCSW_CONTROL */
0171
0172
0173
0174 #ifdef ALLOW_OBCSE_CONTROL
0175
0176 CALL ctrl_init_rec ( xx_obcse_file,
0177 I xx_obcsestartdate1, xx_obcsestartdate2, xx_obcseperiod, 4,
0178 O xx_obcsestartdate, diffrec, startrec, endrec,
0179 I myThid )
0180 ivar = ivar+1
0181 iarr = 3
0182 CALL ctrl_init_ctrlvar (
0183 I xx_obcse_file, ivar, iarr, diffrec, startrec, endrec,
acacc28f7f Jean*0184 I 1, sNy, Nr, 'm', 'SecYZ', costFinalExist, myThid )
5cf4364659 Mart*0185 #endif /* ALLOW_OBCSE_CONTROL */
0186
0187
0188
0189 #ifdef ALLOW_OBCS_CONTROL_MODES
0190
0191
0192
0193 CALL MDSFINDUNIT( dUnit, myThid )
0194 length_of_rec = MDS_RECLEN( 64, Nr*Nr, myThid )
0195 OPEN( dUnit, FILE='baro_invmodes.bin', STATUS='old',
0196 & ACCESS='direct', RECL=length_of_rec )
0197 DO j = 1,Nr
0198 READ(dUnit,rec=j) ((modesv(k,i,j), k=1,Nr), i=1,Nr)
0199 ENDDO
0200 CLOSE( dUnit )
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
acacc28f7f Jean*0215 #endif /* ALLOW_OBCS_CONTROL_MODES */
5cf4364659 Mart*0216
0217
0218
0219 #ifdef ALLOW_GENARR2D_CONTROL
0220 DO iarr = 1, maxCtrlArr2D
0221 ncvargrdtmp='c'
0222 # ifdef ALLOW_SHELFICE
0223
0224 IF ((xx_genarr2d_file(iarr)(1:11).EQ.'xx_shicoeff').OR.
0225 & (xx_genarr2d_file(iarr)(1:11).EQ.'xx_shicdrag')) THEN
0226 ncvargrdtmp='i'
0227 ENDIF
0228 # endif
0229
0230 #ifndef ALLOW_OPENAD
0231 IF (xx_genarr2d_weight(iarr).NE.' ') THEN
0232 #endif
0233 ivar = ivar+1
0234 CALL ctrl_init_ctrlvar (
0235 I xx_genarr2d_file(iarr),
0236 I ivar, iarr, 1, 1, 1,
acacc28f7f Jean*0237 I sNx, sNy, 1, ncvargrdtmp, 'Arr2D', costFinalExist,
5cf4364659 Mart*0238 I myThid )
0239 #ifndef ALLOW_OPENAD
0240 ENDIF
0241 #endif
0242 ENDDO
0243 #endif /* ALLOW_GENARR2D_CONTROL */
0244
0245
0246
0247 #ifdef ALLOW_GENARR3D_CONTROL
0248 DO iarr = 1, maxCtrlArr3D
0249 ncvargrdtmp='c'
0250 #ifndef ALLOW_OPENAD
0251 IF (xx_genarr3d_weight(iarr).NE.' ') THEN
0252 #endif
0253 ivar = ivar+1
0254 CALL ctrl_init_ctrlvar (
0255 I xx_genarr3d_file(iarr),
0256 I ivar, iarr, 1, 1, 1,
acacc28f7f Jean*0257 I sNx, sNy, Nr, ncvargrdtmp, 'Arr3D', costFinalExist,
5cf4364659 Mart*0258 I myThid )
0259 #ifndef ALLOW_OPENAD
0260 ENDIF
0261 #endif
0262 ENDDO
0263 #endif /* ALLOW_GENARR3D_CONTROL */
0264
0265
0266
0267 #ifdef ALLOW_GENTIM2D_CONTROL
0268 DO iarr = 1, maxCtrlTim2D
0269
0270 #ifdef ALLOW_CAL
0271 IF (xx_gentim2d_startdate1(iarr).EQ.0) THEN
0272 xx_gentim2d_startdate1(iarr)=startdate_1
0273 xx_gentim2d_startdate2(iarr)=startdate_2
0274 ENDIF
0275 #endif
0276 ncvargrdtmp='c'
0277 # ifdef ALLOW_SHELFICE
0278
0279 IF (xx_gentim2d_file(iarr)(1:11).EQ.'xx_shifwflx')
0280 & ncvargrdtmp='i'
0281 # endif
0282 IF (xx_gentim2d_file(iarr)(1:5).EQ.'xx_fu')
0283 & ncvargrdtmp='w'
0284 IF (xx_gentim2d_file(iarr)(1:5).EQ.'xx_fv')
0285 & ncvargrdtmp='s'
0286
0287 CALL ctrl_init_rec ( xx_gentim2d_file(iarr),
0288 I xx_gentim2d_startdate1(iarr),
0289 I xx_gentim2d_startdate2(iarr),
0290 I xx_gentim2d_period(iarr),
0291 I 1,
0292 O xx_gentim2d_startdate(1,iarr),
0293 O diffrec, startrec, endrec,
0294 I myThid )
0295
0296 #ifndef ALLOW_OPENAD
0297 IF (xx_gentim2d_weight(iarr).NE.' ') THEN
0298 #endif
0299 DO k2 = 1, maxCtrlProc
0300 IF (xx_gentim2d_preproc(k2,iarr).EQ.'replicate')
0301 & xx_gentim2d_preproc(k2,iarr)='docycle'
0302 IF (xx_gentim2d_preproc(k2,iarr).EQ.'doglomean')
0303 & xx_gentim2d_glosum(iarr) = .TRUE.
0304 IF (xx_gentim2d_preproc(k2,iarr).EQ.'documul')
0305 & xx_gentim2d_cumsum(iarr) = .TRUE.
0306 ENDDO
0307
0308 diffrecFull=diffrec
0309 endrecFull=endrec
0310 DO k2 = 1, maxCtrlProc
0311 IF (xx_gentim2d_preproc(k2,iarr).EQ.'docycle') THEN
0312 IF (xx_gentim2d_preproc_i(k2,iarr).NE.0) THEN
0313 diffrec=min(diffrec,xx_gentim2d_preproc_i(k2,iarr))
0314 endrec=min(endrec,xx_gentim2d_preproc_i(k2,iarr))
0315 ENDIF
0316 ENDIF
0317 ENDDO
0318
0319 ivar = ivar+1
0320 ilgen = ILNBLNK( xx_gentim2d_file(iarr) )
0321 WRITE(fnamegen,'(2a)')
0322 & xx_gentim2d_file(iarr)(1:ilgen),'.effective'
0323 CALL ctrl_init_ctrlvar (
0324 I fnamegen,
0325 I 0, iarr,
0326 I diffrecFull, startrec, endrecFull,
acacc28f7f Jean*0327 I sNx, sNy, 1, ncvargrdtmp, 'Tim2D', costFinalExist,
5cf4364659 Mart*0328 I myThid )
0329
0330 WRITE(fnamegen,'(2a)')
0331 & xx_gentim2d_file(iarr)(1:ilgen),'.tmp'
0332 CALL ctrl_init_ctrlvar (
0333 I fnamegen,
0334 I 0, iarr,
0335 I diffrecFull, startrec, endrecFull,
acacc28f7f Jean*0336 I sNx, sNy, 1, ncvargrdtmp, 'Tim2D', costFinalExist,
5cf4364659 Mart*0337 I myThid )
0338
0339
0340 CALL ctrl_init_ctrlvar (
0341 I xx_gentim2d_file(iarr),
0342 I ivar, iarr,
0343 I endrec, 1, endrec,
acacc28f7f Jean*0344 I sNx, sNy, 1, ncvargrdtmp, 'Tim2D', costFinalExist,
5cf4364659 Mart*0345 I myThid )
0346
0347 #ifndef ALLOW_OPENAD
0348 ENDIF
0349 #endif
0350
0351 ENDDO
0352 #endif /* ALLOW_GENTIM2D_CONTROL */
0353
0354
0355
0356
0357 WRITE(msgBuf,'(2A,I4,A)') 'CTRL_INIT_FIXED: ',
0358 & 'ivar=', ivar, ' = number of CTRL variables defined'
0359 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0360 & SQUEEZE_RIGHT, myThid )
0361 WRITE(msgBuf,'(A)') ' '
0362 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0363 & SQUEEZE_RIGHT, myThid )
0364
0365
0366
0367 CALL CTRL_INIT_WET( myThid )
0368
0369 #ifdef ALLOW_DIC_CONTROL
0370 DO i = 1, dic_n_control
0371 xx_dic(i) = 0. _d 0
0372 ENDDO
0373 #endif
0374
0375
0376
0377 _BARRIER
0378
0379
0380 _BEGIN_MASTER( myThid )
0381 CALL CTRL_SUMMARY( myThid )
0382 _END_MASTER( myThid )
0383
0384 RETURN
0385 END