C $Header: /u/gcmpack/MITgcm/verification/tutorial_global_oce_optim/code_ad/cost_hflux.F,v 1.7 2014/09/11 19:52:09 jmc Exp $ C $Name: $ #include "COST_OPTIONS.h" #ifdef ALLOW_CTRL # include "CTRL_OPTIONS.h" #endif SUBROUTINE COST_HFLUX( myThid ) C *==========================================================* C | SUBROUTINE COST_HFLUX C | o the subroutine computes the cost function relative to C | surface hflux optimization C *==========================================================* IMPLICIT NONE C == Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" #include "DYNVARS.h" #include "cost.h" #include "ctrl_weights.h" #ifdef ALLOW_HFLUXM_CONTROL #include "FFIELDS.h" #endif C ======== Routine arguments ====================== C myThid - Thread number for this instance of the routine. integer myThid #if (defined (ALLOW_COST_HFLUXM) defined (ALLOW_HFLUXM_CONTROL)) C ========= Local variables ========================= integer i, j integer bi, bj _RL locfc,tmpC tmpC = 0. _d 0 DO bj=myByLo(myThid),myByHi(myThid) DO bi=myBxLo(myThid),myBxHi(myThid) do j=1,sNy do i=1,sNx tmpC = tmpC + maskC(i,j,1,bi,bj) ENDDO ENDDO ENDDO ENDDO _GLOBAL_SUM_RL( tmpC , myThid ) IF ( tmpC.GT.0. ) tmpC = 1. _d 0 / tmpC DO bj=myByLo(myThid),myByHi(myThid) DO bi=myBxLo(myThid),myBxHi(myThid) locfc = 0. _d 0 DO j=1,sNy DO i=1,sNx locfc = locfc + tmpC*maskC(i,j,1,bi,bj)* & whfluxm(i,j,bi,bj)* & ( & Qnetm(i,j,bi,bj) & )**2 ENDDO ENDDO objf_hflux_tut(bi,bj) = locfc c print*,'objf_hflux_tut =',locfc ENDDO ENDDO #endif /* ALLOW_COST_HFLUXM & ALLOW_HFLUXM_CONTROL */ RETURN END