File indexing completed on 2026-03-19 05:08:30 UTC
view on githubraw file Latest commit 69361556 on 2026-03-18 21:20:20 UTC
69361556c2 Mart*0001 #include "CTRL_OPTIONS.h"
0002 #ifdef ALLOW_COST
0003 #include "COST_OPTIONS.h"
0004 #endif
0005
0006
0007
0008
0009 SUBROUTINE CTRL_COST_FINAL( ifc, optimcycle, myThid )
0010
0011
0012
0013
0014
0015
0016
0017 IMPLICIT NONE
0018
0019
0020 #include "EEPARAMS.h"
0021 #include "SIZE.h"
0022 #include "PARAMS.h"
0023 #ifdef ALLOW_COST
0024 # include "cost.h"
0025 #endif
0026 #include "CTRL_SIZE.h"
0027 #include "CTRL.h"
0028 #include "CTRL_GENARR.h"
0029
0030
0031
0032
0033
0034 INTEGER ifc
0035 INTEGER optimcycle
0036 INTEGER myThid
0037
0038 #if defined ALLOW_COST && ( defined ALLOW_GENTIM2D_CONTROL || \
0039 defined ALLOW_GENARR2D_CONTROL || \
0040 defined ALLOW_GENARR3D_CONTROL )
0041
0042 INTEGER ILNBLNK
0043 EXTERNAL ILNBLNK
0044
0045
0046 INTEGER bi, bj, num_var
0047 # ifdef ALLOW_GENTIM2D_CONTROL
0048 _RL f_gentim2d(maxCtrlTim2D)
0049 _RL no_gentim2d(maxCtrlTim2D)
0050 # endif
0051 # ifdef ALLOW_GENARR2D_CONTROL
0052 _RL f_genarr2d(maxCtrlArr2D)
0053 _RL no_genarr2d(maxCtrlArr2D)
0054 # endif
0055 # ifdef ALLOW_GENARR3D_CONTROL
0056 _RL f_genarr3d(maxCtrlArr3D)
0057 _RL no_genarr3d(maxCtrlArr3D)
0058 # endif
0059
0060 CHARACTER*23 cfname
0061 INTEGER IL
0062 CHARACTER*(MAX_LEN_FNAM) xx_fname_loc
0063 CHARACTER*(MAX_LEN_MBUF) msgBuf
0064
0065
0066 IF ( useCtrlCostContribution ) THEN
0067
0068
0069 # ifdef ALLOW_GENTIM2D_CONTROL
0070 DO num_var=1,maxCtrlTim2D
0071 f_gentim2d(num_var)= 0. _d 0
0072 no_gentim2d(num_var)= 0. _d 0
0073 ENDDO
0074 # endif
0075 # ifdef ALLOW_GENARR2D_CONTROL
0076 DO num_var=1,maxCtrlArr2D
0077 f_genarr2d(num_var)= 0. _d 0
0078 no_genarr2d(num_var)= 0. _d 0
0079 ENDDO
0080 # endif
0081 # ifdef ALLOW_GENARR3D_CONTROL
0082 DO num_var=1,maxCtrlArr3D
0083 f_genarr3d(num_var)= 0. _d 0
0084 no_genarr3d(num_var)= 0. _d 0
0085 ENDDO
0086 # endif
0087
0088 DO bj = myByLo(myThid), myByHi(myThid)
0089 DO bi = myBxLo(myThid), myBxHi(myThid)
0090 # ifdef ALLOW_GENTIM2D_CONTROL
0091 DO num_var=1,maxCtrlTim2D
0092 tile_fc(bi,bj) = tile_fc(bi,bj)
0093 & + mult_gentim2d(num_var)
0094 & *objf_gentim2d(bi,bj,num_var)
0095 f_gentim2d(num_var) = f_gentim2d(num_var)
0096 & +objf_gentim2d(bi,bj,num_var)
0097 no_gentim2d(num_var) = no_gentim2d(num_var)
0098 & +num_gentim2d(bi,bj,num_var)
0099 ENDDO
0100 # endif
0101 # ifdef ALLOW_GENARR2D_CONTROL
0102 DO num_var=1,maxCtrlArr2D
0103 tile_fc(bi,bj) = tile_fc(bi,bj)
0104 & + mult_genarr2d(num_var)
0105 & *objf_genarr2d(bi,bj,num_var)
0106 f_genarr2d(num_var) = f_genarr2d(num_var)
0107 & +objf_genarr2d(bi,bj,num_var)
0108 no_genarr2d(num_var) = no_genarr2d(num_var)
0109 & +num_genarr2d(bi,bj,num_var)
0110 ENDDO
0111 # endif
0112 # ifdef ALLOW_GENARR3D_CONTROL
0113 DO num_var=1,maxCtrlArr3D
0114 tile_fc(bi,bj) = tile_fc(bi,bj)
0115 & + mult_genarr3d(num_var)
0116 & *objf_genarr3d(bi,bj,num_var)
0117 f_genarr3d(num_var) = f_genarr3d(num_var)
0118 & +objf_genarr3d(bi,bj,num_var)
0119 no_genarr3d(num_var) = no_genarr3d(num_var)
0120 & +num_genarr3d(bi,bj,num_var)
0121 ENDDO
0122 # endif
0123 ENDDO
0124 ENDDO
0125
0126
0127 # ifdef ALLOW_GENTIM2D_CONTROL
0128 DO num_var=1,maxCtrlTim2D
0129 _GLOBAL_SUM_RL(f_gentim2d(num_var), myThid )
0130 _GLOBAL_SUM_RL(no_gentim2d(num_var), myThid )
0131 IF (no_gentim2d(num_var).GT.0. _d 0) THEN
0132 xx_fname_loc = xx_gentim2d_file(num_var)
0133 IL = ILNBLNK( xx_fname_loc )
0134 WRITE(msgBuf,'(A,1PE22.14,I2,1X,1PE9.2,1X,3A)')
0135 & ' --> f_gentim2d =',f_gentim2d(num_var), num_var,
0136 & mult_gentim2d(num_var), '(', xx_fname_loc(1:IL), ')'
0137 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0138 & SQUEEZE_RIGHT, myThid )
0139 ENDIF
0140 ENDDO
0141 # endif
0142 # ifdef ALLOW_GENARR2D_CONTROL
0143 DO num_var=1,maxCtrlArr2D
0144 _GLOBAL_SUM_RL(f_genarr2d(num_var), myThid )
0145 _GLOBAL_SUM_RL(no_genarr2d(num_var), myThid )
0146 IF (no_genarr2d(num_var).GT.0. _d 0) THEN
0147 xx_fname_loc = xx_genarr2d_file(num_var)
0148 IL = ILNBLNK( xx_fname_loc )
0149 WRITE(msgBuf,'(A,1PE22.14,I2,1X,1PE9.2,1X,3A)')
0150 & ' --> f_genarr2d =',f_genarr2d(num_var), num_var,
0151 & mult_genarr2d(num_var), '(', xx_fname_loc(1:IL), ')'
0152 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0153 & SQUEEZE_RIGHT, myThid )
0154 ENDIF
0155 ENDDO
0156 # endif
0157 # ifdef ALLOW_GENARR3D_CONTROL
0158 DO num_var=1,maxCtrlArr3D
0159 _GLOBAL_SUM_RL(f_genarr3d(num_var), myThid )
0160 _GLOBAL_SUM_RL(no_genarr3d(num_var), myThid )
0161 IF (no_genarr3d(num_var).GT.0. _d 0) THEN
0162 xx_fname_loc = xx_genarr3d_file(num_var)
0163 IL = ILNBLNK( xx_fname_loc )
0164 WRITE(msgBuf,'(A,1PE22.14,I2,1X,1PE9.2,1X,3A)')
0165 & ' --> f_genarr3d =',f_genarr3d(num_var), num_var,
0166 & mult_genarr3d(num_var), '(', xx_fname_loc(1:IL), ')'
0167 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0168 & SQUEEZE_RIGHT, myThid )
0169 ENDIF
0170 ENDDO
0171 # endif
0172
0173
0174
0175
0176 IF ( ifc .NE. -1 ) THEN
0177 WRITE(cfname,'(A,I4.4)') 'costfunction_ctrl.',optimcycle
0178 OPEN(unit=ifc,file=cfname)
0179 WRITE(msgBuf,'(A,A)')
0180 & 'Writing generic ctrl cost function info to ', cfname
0181 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0182 & SQUEEZE_RIGHT, myThid )
0183
0184 # ifdef ALLOW_GENTIM2D_CONTROL
0185 DO num_var=1,maxCtrlTim2D
0186 IF (no_gentim2d(num_var).GT.0. _d 0) THEN
0187 xx_fname_loc = xx_gentim2d_file(num_var)
0188 IL = ILNBLNK( xx_fname_loc )
0189 IL = max (IL,15)
0190 WRITE(ifc,'(2A,I2.0,A,1PE22.14,1PE22.14,1X,1PE9.2)')
0191 & xx_fname_loc(1:IL), ' (gentim2d ', num_var, ') = ',
0192 & f_gentim2d(num_var), no_gentim2d(num_var),
0193 & mult_gentim2d(num_var)
0194 ENDIF
0195 ENDDO
0196 # endif
0197
0198 # ifdef ALLOW_GENARR2D_CONTROL
0199 DO num_var=1,maxCtrlArr2D
0200 IF (no_genarr2d(num_var).GT.0. _d 0) THEN
0201 xx_fname_loc = xx_genarr2d_file(num_var)
0202 IL = ILNBLNK( xx_fname_loc )
0203 IL = max (IL,15)
0204 WRITE(ifc,'(2A,I2.0,A,1PE22.14,1PE22.14,1X,1PE9.2)')
0205 & xx_fname_loc(1:IL), ' (genarr2d ', num_var, ') = ',
0206 & f_genarr2d(num_var), no_genarr2d(num_var),
0207 & mult_genarr2d(num_var)
0208 ENDIF
0209 ENDDO
0210 # endif
0211
0212 # ifdef ALLOW_GENARR3D_CONTROL
0213 DO num_var=1,maxCtrlArr3D
0214 IF (no_genarr3d(num_var).GT.0. _d 0) THEN
0215 xx_fname_loc = xx_genarr3d_file(num_var)
0216 IL = ILNBLNK( xx_fname_loc )
0217 IL = MAX(IL,15)
0218 WRITE(ifc,'(2A,I2.0,A,1PE22.14,1PE22.14,1X,1PE9.2)')
0219 & xx_fname_loc(1:IL), ' (genarr3d ', num_var, ') = ',
0220 & f_genarr3d(num_var), no_genarr3d(num_var),
0221 & mult_genarr3d(num_var)
0222 ENDIF
0223 ENDDO
0224 # endif
0225 CLOSE(ifc)
0226 ENDIF
0227
0228
0229 ENDIF
0230
0231 #endif /* ALLOW_COST */
0232
0233 RETURN
0234 END