File indexing completed on 2026-03-19 05:08:48 UTC
view on githubraw file Latest commit 69361556 on 2026-03-18 21:20:20 UTC
69361556c2 Mart*0001 #include "OBCS_OPTIONS.h"
6805a315c1 Gael*0002 #ifdef ALLOW_CTRL
0003 # include "CTRL_OPTIONS.h"
0004 #endif
69361556c2 Mart*0005 #ifdef ALLOW_ECCO
0006 # include "ECCO_OPTIONS.h"
0007 #endif
5001c65f45 Patr*0008
69361556c2 Mart*0009
0010
0011 subroutine obcs_cost_ageos( mytime, myiter, mythid )
5001c65f45 Patr*0012
0013
69361556c2 Mart*0014
5001c65f45 Patr*0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
69361556c2 Mart*0025
5001c65f45 Patr*0026
0027
0028 implicit none
0029
0030
0031
69361556c2 Mart*0032 #ifdef OBCS_AGEOS_COST_CONTRIBUTION
5001c65f45 Patr*0033 #include "EEPARAMS.h"
0034 #include "SIZE.h"
0035 #include "GRID.h"
0036 #include "DYNVARS.h"
0037 #include "PARAMS.h"
0038 #ifdef ALLOW_OBCS
46c1d12550 Jean*0039 # include "OBCS_GRID.h"
5001c65f45 Patr*0040 #endif
0041
c509d7e04a Gael*0042 #ifdef ALLOW_CAL
0043 # include "cal.h"
0044 #endif
0045 #ifdef ALLOW_ECCO
0046 # include "ecco_cost.h"
0047 #endif
0048 #ifdef ALLOW_CTRL
0049 # include "CTRL_SIZE.h"
4d72283393 Mart*0050 # include "CTRL.h"
edcd27be69 Mart*0051 # include "CTRL_DUMMY.h"
65754df434 Mart*0052 # include "OPTIMCYCLE.h"
c509d7e04a Gael*0053 # include "CTRL_OBCS.h"
0054 #endif
69361556c2 Mart*0055 #endif
5001c65f45 Patr*0056
0057
0058 _RL mytime
69361556c2 Mart*0059 integer myiter
5001c65f45 Patr*0060 integer mythid
0061
c509d7e04a Gael*0062 #if (defined (ALLOW_CTRL) && \
0063 defined (ALLOW_OBCS) && \
0064 defined (ALLOW_ECCO))
0065
9f5240b52a Jean*0066 #ifdef OBCS_AGEOS_COST_CONTRIBUTION
5001c65f45 Patr*0067
0068
0069 integer bi,bj
0070 integer i,j,k
0071 integer itlo,ithi
0072 integer jtlo,jthi
0073 integer jmin,jmax
0074 integer imin,imax
0075 integer irec
0076 integer levmon
0077 integer levoff
0078 integer iltheta
0079 integer ilsalt
0080 integer iluvel
0081 integer ilvvel
0082 integer ip1, jp1
0083
0084 _RL fctile
0085 _RL fcthread
0086
9f5240b52a Jean*0087 _RL rholoc (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0088 _RL xzgrdrho(1-OLx:sNx+OLx,Nr,nSx,nSy)
0089 _RL yzgrdrho(1-OLy:sNy+OLy,Nr,nSx,nSy)
0090 _RL xzdvel1 (1-OLx:sNx+OLx,Nr,nSx,nSy)
0091 _RL xzdvel2 (1-OLx:sNx+OLx,Nr,nSx,nSy)
0092 _RL yzdvel1 (1-OLy:sNy+OLy,Nr,nSx,nSy)
0093 _RL yzdvel2 (1-OLy:sNy+OLy,Nr,nSx,nSy)
0094 _RL maskxzageos (1-OLx:sNx+OLx,Nr,nSx,nSy)
0095 _RL maskyzageos (1-OLy:sNy+OLy,Nr,nSx,nSy)
5001c65f45 Patr*0096 _RL dummy
0097
de57a2ec4b Mart*0098 character*(MAX_LEN_FNAM) fnametheta
0099 character*(MAX_LEN_FNAM) fnamesalt
0100 character*(MAX_LEN_FNAM) fnameuvel
0101 character*(MAX_LEN_FNAM) fnamevvel
5001c65f45 Patr*0102
0103 logical doglobalread
0104 logical ladinit
0105
0106 character*(MAX_LEN_MBUF) msgbuf
0107
0108
0109
0110 integer ilnblnk
0111 external ilnblnk
0112
0113
0114
9f5240b52a Jean*0115 jtlo = myByLo(mythid)
0116 jthi = myByHi(mythid)
0117 itlo = myBxLo(mythid)
0118 ithi = myBxHi(mythid)
5001c65f45 Patr*0119 jmin = 1
9f5240b52a Jean*0120 jmax = sNy
5001c65f45 Patr*0121 imin = 1
9f5240b52a Jean*0122 imax = sNx
5001c65f45 Patr*0123
0124
0125 doglobalread = .false.
0126 ladinit = .false.
0127
0128 #ifdef ECCO_VERBOSE
0129 _BEGIN_MASTER( mythid )
0130 write(msgbuf,'(a)') ' '
0131 call print_message( msgbuf, standardmessageunit,
0132 & SQUEEZE_RIGHT , mythid)
0133 write(msgbuf,'(a,i8.8)')
69361556c2 Mart*0134 & ' obcs_cost_ageos: number of records to process = ',nmonsrec
5001c65f45 Patr*0135 call print_message( msgbuf, standardmessageunit,
0136 & SQUEEZE_RIGHT , mythid)
0137 write(msgbuf,'(a)') ' '
0138 call print_message( msgbuf, standardmessageunit,
0139 & SQUEEZE_RIGHT , mythid)
0140 _END_MASTER( mythid )
9f5240b52a Jean*0141 #endif /* ECCO_VERBOSE */
5001c65f45 Patr*0142
0143 if (optimcycle .ge. 0) then
0144 iltheta = ilnblnk( tbarfile )
de57a2ec4b Mart*0145 write(fnametheta,'(2a,i10.10)')
5001c65f45 Patr*0146 & tbarfile(1:iltheta),'.',optimcycle
0147 ilsalt = ilnblnk( sbarfile )
de57a2ec4b Mart*0148 write(fnamesalt,'(2a,i10.10)')
5001c65f45 Patr*0149 & sbarfile(1:ilsalt),'.',optimcycle
0150 iluvel = ilnblnk( ubarfile )
de57a2ec4b Mart*0151 write(fnameuvel,'(2a,i10.10)')
5001c65f45 Patr*0152 & ubarfile(1:iluvel),'.',optimcycle
0153 ilvvel = ilnblnk( vbarfile )
de57a2ec4b Mart*0154 write(fnamevvel,'(2a,i10.10)')
5001c65f45 Patr*0155 & vbarfile(1:ilvvel),'.',optimcycle
0156 endif
0157
0158 fcthread = 0. _d 0
0159 fctile = 0. _d 0
0160
0161
0162 do bj = jtlo,jthi
0163 do bi = itlo,ithi
9f5240b52a Jean*0164 do k = 1,Nr
0165 do i = 1-OLx,sNx+OLx
5001c65f45 Patr*0166 maskxzageos(i,k,bi,bj) = 0. _d 0
0167 xzdvel1(i,k,bi,bj) = 0. _d 0
0168 xzdvel2(i,k,bi,bj) = 0. _d 0
0169 xzgrdrho(i,k,bi,bj) = 0. _d 0
0170 enddo
9f5240b52a Jean*0171 do j = 1-OLy,sNy+OLy
5001c65f45 Patr*0172 maskyzageos(j,k,bi,bj) = 0. _d 0
0173 yzdvel1(j,k,bi,bj) = 0. _d 0
0174 yzdvel2(j,k,bi,bj) = 0. _d 0
0175 yzgrdrho(j,k,bi,bj) = 0. _d 0
0176 enddo
0177 enddo
0178 enddo
0179 enddo
0180
0181 do bj = jtlo,jthi
0182 do bi = itlo,ithi
9f5240b52a Jean*0183 do j = 1-OLy,sNy+OLy
0184 do i = 1-OLx,sNx+OLx
5001c65f45 Patr*0185 rholoc(i,j,bi,bj) = 0. _d 0
0186 enddo
0187 enddo
0188 enddo
0189 enddo
0190
0191
0192 do irec = 1,nmonsrec
0193
0194
720a211d38 Ou W*0195 #ifdef ALLOW_AUTODIFF
5001c65f45 Patr*0196 call active_read_xyz( fnametheta, tbar, irec,
0197 & doglobalread, ladinit,
0198 & optimcycle, mythid,
0199 & xx_tbar_mean_dummy )
0200
0201 call active_read_xyz( fnamesalt, sbar, irec,
0202 & doglobalread, ladinit,
0203 & optimcycle, mythid,
0204 & xx_sbar_mean_dummy )
0205
0206 call active_read_xyz( fnameuvel, ubar, irec,
0207 & doglobalread, ladinit,
0208 & optimcycle, mythid,
0209 & xx_ubar_mean_dummy )
0210
0211 call active_read_xyz( fnamevvel, vbar, irec,
0212 & doglobalread, ladinit,
0213 & optimcycle, mythid,
0214 & xx_vbar_mean_dummy )
720a211d38 Ou W*0215 #else
0216 call read_rec_xyz_rl( fnametheta, tbar, irec, 1, myThid )
0217
0218 call read_rec_xyz_rl( fnamesalt, sbar, irec, 1, myThid )
0219
0220 call read_rec_xyz_rl( fnameuvel, ubar, irec, 1, myThid )
0221
0222 call read_rec_xyz_rl( fnamevvel, vbar, irec, 1, myThid )
0223 #endif
5001c65f45 Patr*0224
0225
0226 _BARRIER
6637358eea Jean*0227 _EXCH_XYZ_RL(tbar,myThid)
0228 _EXCH_XYZ_RL(sbar,myThid)
5001c65f45 Patr*0229
0230 do bj = jtlo,jthi
0231 do bi = itlo,ithi
0232
0233 #ifdef ALLOW_OBCSN_CONTROL
0234 jp1 = 0
0235
0236
9f5240b52a Jean*0237 do k = 1,Nr-1
5001c65f45 Patr*0238 do i = imin, imax
9fd29e65a3 Jean*0239 j = OB_Jn(i,bi,bj)
951926fb9b Jean*0240
9fd29e65a3 Jean*0241 if ( j.eq.OB_indexNone ) then
5001c65f45 Patr*0242 maskxzageos(i,k,bi,bj) = 0.
0243 else
951926fb9b Jean*0244 maskxzageos(i,k,bi,bj) =
5001c65f45 Patr*0245 & hfacC(i,j+jp1,k,bi,bj)*hfacC(i+1,j+jp1,k,bi,bj) *
0246 & hfacC(i-1,j+jp1,k,bi,bj)*hfacC(i,j+jp1,k+1,bi,bj)*
0247 & hfacC(i-1,j+jp1,k+1,bi,bj)*hfacC(i+1,j+jp1,k+1,bi,bj)*
0248 & hfacS(i,j+jp1,k,bi,bj)*hfacS(i,j+jp1,k+1,bi,bj)
0249 endif
0250 enddo
0251 enddo
951926fb9b Jean*0252
9f5240b52a Jean*0253 do k = 1,Nr
852c7dfbb9 Jean*0254
0255
46c1d12550 Jean*0256 IF ( bi.NE.1 .OR. bj.NE.1 )
69361556c2 Mart*0257 & STOP 'OBCS_COST_AGEOS wrong with more than 1 tile/proc'
852c7dfbb9 Jean*0258 call find_rho_2d(
0259 I iMin, iMax, jMin, jMax, k,
46c1d12550 Jean*0260 I tbar(1-OLx,1-OLy,k,bi,bj),
852c7dfbb9 Jean*0261 I sbar(1-OLx,1-OLy,k,bi,bj),
0262 O rholoc,
0263 I k, bi, bj, myThid )
6637358eea Jean*0264 _EXCH_XY_RL(rholoc , myThid)
5001c65f45 Patr*0265
0266
0267 do i = imin, imax
9fd29e65a3 Jean*0268 j = OB_Jn(i,bi,bj)
0269 if ( j.eq.OB_indexNone ) j = 1
951926fb9b Jean*0270 xzgrdrho(i,k,bi,bj) =
5001c65f45 Patr*0271 & (rholoc(i-1,j+jp1,bi,bj)-rholoc(i+1,j+jp1,bi,bj))
0272 & /(2.*dxc(i,j+jp1,bi,bj))
0273 enddo
0274 enddo
0275
0276
0277
0278
0279 do k = 4,Nr-1
0280 do i = imin,imax
9fd29e65a3 Jean*0281 j = OB_Jn(i,bi,bj)
0282 if ( j.eq.OB_indexNone ) j = 1
5001c65f45 Patr*0283 xzdvel1(i,k,bi,bj) = vbar(i,j+jp1,k ,bi,bj)
0284 & - vbar(i,j+jp1,k+1,bi,bj)
0285 xzdvel2(i,k,bi,bj)=((xzgrdrho(i,k,bi,bj)*delz(k)/2.)+
0286 & (xzgrdrho(i,k+1,bi,bj)*delz(k+1)/2.))
0287 & * gravity / f0 / rhonil
0288
0289 fctile = fctile + 100*wcurrent(k,bi,bj) *
0290 & maskxzageos(i,k,bi,bj)*
0291 & (xzdvel2(i,k,bi,bj) - xzdvel1(i,k,bi,bj))*
0292 & (xzdvel2(i,k,bi,bj) - xzdvel1(i,k,bi,bj))
0293 if (maskxzageos(i,k,bi,bj) .ne. 0) then
0294
0295
0296 endif
0297 enddo
0298 enddo
0299
0300 #endif /* ALLOW_OBCSN_CONTROL */
0301
0302 #ifdef ALLOW_OBCSS_CONTROL
0303 jp1 = 1
0304
0305
9f5240b52a Jean*0306 do k = 1,Nr-1
5001c65f45 Patr*0307 do i = imin, imax
9fd29e65a3 Jean*0308 j = OB_Js(i,bi,bj)
0309 if ( j.eq.OB_indexNone ) then
5001c65f45 Patr*0310 maskxzageos(i,k,bi,bj) = 0.
0311 else
951926fb9b Jean*0312
0313 maskxzageos(i,k,bi,bj) =
5001c65f45 Patr*0314 & hfacC(i,j+jp1,k,bi,bj)*hfacC(i+1,j+jp1,k,bi,bj) *
0315 & hfacC(i-1,j+jp1,k,bi,bj)*hfacC(i,j+jp1,k+1,bi,bj)*
0316 & hfacC(i-1,j+jp1,k+1,bi,bj)*hfacC(i+1,j+jp1,k+1,bi,bj)*
0317 & hfacS(i,j+jp1,k,bi,bj)*hfacS(i,j+jp1,k+1,bi,bj)
951926fb9b Jean*0318 endif
5001c65f45 Patr*0319 enddo
0320 enddo
0321
9f5240b52a Jean*0322 do k = 1,Nr
5001c65f45 Patr*0323
46c1d12550 Jean*0324
0325 IF ( bi.NE.1 .OR. bj.NE.1 )
69361556c2 Mart*0326 & STOP 'OBCS_COST_AGEOS wrong with more than 1 tile/proc'
852c7dfbb9 Jean*0327 call find_rho_2d(
0328 I iMin, iMax, jMin, jMax, k,
46c1d12550 Jean*0329 I tbar(1-OLx,1-OLy,k,bi,bj),
852c7dfbb9 Jean*0330 I sbar(1-OLx,1-OLy,k,bi,bj),
0331 O rholoc,
0332 I k, bi, bj, myThid )
0333
6637358eea Jean*0334 _EXCH_XY_RL(rholoc , myThid)
5001c65f45 Patr*0335
0336
0337 do i = imin, imax
9fd29e65a3 Jean*0338 j = OB_Js(i,bi,bj)
0339 if ( j.eq.OB_indexNone ) j = 1
951926fb9b Jean*0340 xzgrdrho(i,k,bi,bj) =
5001c65f45 Patr*0341 & (rholoc(i-1,j+jp1,bi,bj)-rholoc(i+1,j+jp1,bi,bj))
0342 & /(2.*dxc(i,j+jp1,bi,bj))
0343 enddo
0344 enddo
0345
0346
0347 do k = 4,Nr-1
0348 do i = imin,imax
9fd29e65a3 Jean*0349 j = OB_Js(i,bi,bj)
0350 if ( j.eq.OB_indexNone ) j = 1
5001c65f45 Patr*0351
0352 xzdvel1(i,k,bi,bj) = vbar(i,j+jp1,k ,bi,bj)
0353 & - vbar(i,j+jp1,k+1,bi,bj)
0354
0355
0356 xzdvel2(i,k,bi,bj) =((xzgrdrho(i,k,bi,bj)*delz(k)/2.)+
0357 & (xzgrdrho(i,k+1,bi,bj)*delz(k+1)/2.))
0358 & * gravity / f0 /rhonil
0359
0360
0361 fctile = fctile + 100*wcurrent(k,bi,bj) *
0362 & maskxzageos(i,k,bi,bj)*
0363 & (xzdvel2(i,k,bi,bj) - xzdvel1(i,k,bi,bj))*
0364 & (xzdvel2(i,k,bi,bj) - xzdvel1(i,k,bi,bj))
0365
0366 enddo
0367 enddo
0368
9f5240b52a Jean*0369 #endif /* ALLOW_OBCSS_CONTROL */
5001c65f45 Patr*0370
0371 #ifdef ALLOW_OBCSW_CONTROL
0372 ip1 = 1
0373
0374
9f5240b52a Jean*0375 do k = 1,Nr-1
5001c65f45 Patr*0376 do j = jmin, jmax
9fd29e65a3 Jean*0377 i = OB_Iw(j,bi,bj)
5001c65f45 Patr*0378
9fd29e65a3 Jean*0379 if ( i.eq.OB_indexNone ) then
5001c65f45 Patr*0380 maskyzageos(j,k,bi,bj) = 0.
951926fb9b Jean*0381 else
0382 maskyzageos(j,k,bi,bj) =
5001c65f45 Patr*0383 & hfacC(i+ip1,j,k,bi,bj)*hfacC(i+ip1,j+1,k,bi,bj) *
0384 & hfacC(i+ip1,j-1,k,bi,bj)*hfacC(i+ip1,j,k+1,bi,bj)*
0385 & hfacC(i+ip1,j-1,k+1,bi,bj)*hfacC(i+ip1,j+1,k+1,bi,bj)*
0386 & hfacW(i+ip1,j,k,bi,bj)*hfacW(i+ip1,j,k+1,bi,bj)
0387 endif
0388 enddo
0389 enddo
0390
9f5240b52a Jean*0391 do k = 1,Nr
5001c65f45 Patr*0392
46c1d12550 Jean*0393 IF ( bi.NE.1 .OR. bj.NE.1 )
69361556c2 Mart*0394 & STOP 'OBCS_COST_AGEOS wrong with more than 1 tile/proc'
852c7dfbb9 Jean*0395 call find_rho_2d(
0396 I iMin, iMax, jMin, jMax, k,
46c1d12550 Jean*0397 I tbar(1-OLx,1-OLy,k,bi,bj),
852c7dfbb9 Jean*0398 I sbar(1-OLx,1-OLy,k,bi,bj),
0399 O rholoc,
0400 I k, bi, bj, myThid )
6637358eea Jean*0401 _EXCH_XY_RL(rholoc , myThid)
5001c65f45 Patr*0402
0403
0404 do j = jmin, jmax
9fd29e65a3 Jean*0405 i = OB_Iw(j,bi,bj)
0406 if ( i.eq.OB_indexNone ) i = 1
5001c65f45 Patr*0407
951926fb9b Jean*0408 yzgrdrho(j,k,bi,bj) =
5001c65f45 Patr*0409 & (rholoc(i+ip1,j+1,bi,bj)-rholoc(i+ip1,j-1,bi,bj))
0410 & /(2.*dyc(i+ip1,j,bi,bj))
0411 enddo
0412 enddo
0413
0414
0415 do k = 4,Nr-1
0416 do j = jmin,jmax
9fd29e65a3 Jean*0417 i = OB_Iw(j,bi,bj)
0418 if ( i.eq.OB_indexNone ) i = 1
5001c65f45 Patr*0419
0420 yzdvel1(j,k,bi,bj) = ubar(i+ip1,j,k ,bi,bj)
0421 & - ubar(i+ip1,j,k+1,bi,bj)
0422
0423
0424 yzdvel2(j,k,bi,bj) =((yzgrdrho(j,k ,bi,bj)*delz(k)/2.)+
0425 & (yzgrdrho(j,k+1,bi,bj)*delz(k+1)/2.))
0426 & * gravity / f0 / rhonil
0427
0428
0429 fctile = fctile + 100*wcurrent(k,bi,bj) *
0430 & maskyzageos(j,k,bi,bj) *
0431 & (yzdvel2(j,k,bi,bj) - yzdvel1(j,k,bi,bj))*
0432 & (yzdvel2(j,k,bi,bj) - yzdvel1(j,k,bi,bj))
0433 enddo
0434 enddo
0435
9f5240b52a Jean*0436 #endif /* ALLOW_OBCSW_CONTROL */
5001c65f45 Patr*0437
0438 #ifdef ALLOW_OBCSE_CONTROL
0439 ip1 = 0
0440
0441
9f5240b52a Jean*0442 do k = 1,Nr-1
5001c65f45 Patr*0443 do j = jmin, jmax
9fd29e65a3 Jean*0444 i = OB_Ie(j,bi,bj)
0445 if ( i.eq.OB_indexNone ) then
5001c65f45 Patr*0446 maskyzageos(j,k,bi,bj) =0.
0447 else
951926fb9b Jean*0448
0449 maskyzageos(j,k,bi,bj) =
5001c65f45 Patr*0450 & hfacC(i+ip1,j,k,bi,bj)*hfacC(i+ip1,j+1,k,bi,bj) *
0451 & hfacC(i+ip1,j-1,k,bi,bj)*hfacC(i+ip1,j,k+1,bi,bj)*
0452 & hfacC(i+ip1,j-1,k+1,bi,bj)*hfacC(i+ip1,j+1,k+1,bi,bj)*
0453 & hfacW(i+ip1,j,k,bi,bj)*hfacW(i+ip1,j,k+1,bi,bj)
0454 endif
0455 enddo
0456 enddo
0457
9f5240b52a Jean*0458 do k = 1,Nr
5001c65f45 Patr*0459
46c1d12550 Jean*0460 IF ( bi.NE.1 .OR. bj.NE.1 )
69361556c2 Mart*0461 & STOP 'OBCS_COST_AGEOS wrong with more than 1 tile/proc'
852c7dfbb9 Jean*0462 call find_rho_2d(
0463 I iMin, iMax, jMin, jMax, k,
46c1d12550 Jean*0464 I tbar(1-OLx,1-OLy,k,bi,bj),
852c7dfbb9 Jean*0465 I sbar(1-OLx,1-OLy,k,bi,bj),
0466 O rholoc,
0467 I k, bi, bj, myThid )
6637358eea Jean*0468 _EXCH_XY_RL(rholoc , myThid)
5001c65f45 Patr*0469
0470
0471 do j = jmin, jmax
9fd29e65a3 Jean*0472 i = OB_Ie(j,bi,bj)
0473 if ( i.eq.OB_indexNone ) i = 1
5001c65f45 Patr*0474
951926fb9b Jean*0475 yzgrdrho(j,k,bi,bj) =
720a211d38 Ou W*0476 & (rholoc(i+ip1,j+1,bi,bj)-rholoc(i+ip1,j-1,bi,bj))
5001c65f45 Patr*0477 & /(2.*dyc(i+ip1,j,bi,bj))
0478 enddo
0479 enddo
0480
0481
0482 do k = 4,Nr-1
0483 do j = jmin,jmax
9fd29e65a3 Jean*0484 i = OB_Ie(j,bi,bj)
0485 if ( i.eq.OB_indexNone ) i = 1
5001c65f45 Patr*0486
0487 yzdvel1(j,k,bi,bj) = ubar(i+ip1,j,k ,bi,bj)
0488 & - ubar(i+ip1,j,k+1,bi,bj)
0489
0490
0491 yzdvel2(j,k,bi,bj) =((yzgrdrho(j,k ,bi,bj)*delz(k)/2.)+
0492 & (yzgrdrho(j,k+1,bi,bj)*delz(k+1)/2.))
0493 & * gravity / f0 /rhonil
0494
0495
0496 fctile = fctile + 100*wcurrent(k,bi,bj) *
0497 & maskyzageos(j,k,bi,bj) *
0498 & (yzdvel2(j,k,bi,bj) - yzdvel1(j,k,bi,bj))*
0499 & (yzdvel2(j,k,bi,bj) - yzdvel1(j,k,bi,bj))
0500
0501 enddo
0502 enddo
0503
9f5240b52a Jean*0504 #endif /* ALLOW_OBCSE_CONTROL */
5001c65f45 Patr*0505
0506 fcthread = fcthread + fctile
0507 objf_ageos(bi,bj) = objf_ageos(bi,bj) + fctile
0508
0509 #ifdef ECCO_VERBOSE
0510
0511 write(msgbuf,'(a)') ' '
0512 call print_message( msgbuf, standardmessageunit,
0513 & SQUEEZE_RIGHT , mythid)
0514 write(msgbuf,'(a,i8.8,1x,i3.3,1x,i3.3)')
0515 & ' cost_Theta: irec,bi,bj = ',irec,bi,bj
0516 call print_message( msgbuf, standardmessageunit,
0517 & SQUEEZE_RIGHT , mythid)
0518 write(msgbuf,'(a,d22.15)')
0519 & ' cost function (temperature) = ',
0520 & fctile
0521 call print_message( msgbuf, standardmessageunit,
0522 & SQUEEZE_RIGHT , mythid)
0523 write(msgbuf,'(a)') ' '
0524 call print_message( msgbuf, standardmessageunit,
0525 & SQUEEZE_RIGHT , mythid)
9f5240b52a Jean*0526 #endif /* ECCO_VERBOSE */
5001c65f45 Patr*0527
0528 enddo
0529 enddo
0530
0531 #ifdef ECCO_VERBOSE
0532
6637358eea Jean*0533 _GLOBAL_SUM_RL( fcthread , myThid )
5001c65f45 Patr*0534 write(msgbuf,'(a)') ' '
0535 call print_message( msgbuf, standardmessageunit,
0536 & SQUEEZE_RIGHT , mythid)
0537 write(msgbuf,'(a,i8.8)')
0538 & ' cost_Theta: irec = ',irec
0539 call print_message( msgbuf, standardmessageunit,
0540 & SQUEEZE_RIGHT , mythid)
0541 write(msgbuf,'(a,a,d22.15)')
0542 & ' global cost function value',
0543 & ' (temperature) = ',fcthread
0544 call print_message( msgbuf, standardmessageunit,
0545 & SQUEEZE_RIGHT , mythid)
0546 write(msgbuf,'(a)') ' '
0547 call print_message( msgbuf, standardmessageunit,
0548 & SQUEEZE_RIGHT , mythid)
9f5240b52a Jean*0549 #endif /* ECCO_VERBOSE */
5001c65f45 Patr*0550
0551 enddo
0552
0553
9f5240b52a Jean*0554 #endif /* OBCS_AGEOS_COST_CONTRIBUTION */
5001c65f45 Patr*0555
c509d7e04a Gael*0556 #endif /* ALLOW_CTRL, ALLOW_OBCS and ALLOW_ECCO */
0557
5001c65f45 Patr*0558 return
0559 end