C $Header: /u/gcmpack/MITgcm/pkg/shelfice/shelfice_cost_final.F,v 1.9 2014/09/09 22:59:55 jmc Exp $
C $Name: $
#include "SHELFICE_OPTIONS.h"
#ifdef ALLOW_COST
# include "COST_OPTIONS.h"
#endif
#ifdef ALLOW_CTRL
# include "CTRL_OPTIONS.h"
#endif
CBOP
C !ROUTINE: SHELFICE_COST_FINAL
C !INTERFACE:
SUBROUTINE SHELFICE_COST_FINAL( myThid )
C !DESCRIPTION:
C *==========================================================*
C | subroutine shelfice_cost_final |
C | o final cost evalualtion |
C *==========================================================*
C !USES:
IMPLICIT NONE
C == Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "DYNVARS.h"
#include "GRID.h"
#include "SHELFICE.h"
#include "SHELFICE_COST.h"
#ifdef ALLOW_COST
# include "cost.h"
# include "optim.h"
#endif
#if (defined ALLOW_SHIFWFLX_CONTROL
defined ALLOW_SHIFWFLX_COST_CONTRIBUTION)
# include "ctrl.h"
#endif
C !INPUT/OUTPUT PARAMETERS:
C myThid :: Thread number for this instance of the routine.
INTEGER myThid
#ifdef ALLOW_COST
C ! FUNCTIONS:
LOGICAL MASTER_CPU_THREAD
EXTERNAL
C !LOCAL VARIABLES:
INTEGER bi, bj
INTEGER ifc
CHARACTER*(25) cfname
_RL f_shelfice
_RL f_shifwflx
cML _RL no_shelfice
_RL no_shifwflx
#ifndef ALLOW_ECCO
INTEGER i, j
#endif
CEOP
f_shelfice = 0. _d 0
f_shifwflx = 0. _d 0
cML no_shelfice= 0. _d 0
no_shifwflx= 0. _d 0
#ifdef ALLOW_ECCO
#if (defined ALLOW_SHIFWFLX_CONTROL
defined ALLOW_SHIFWFLX_COST_CONTRIBUTION)
CALL SHELFICE_COST_SHIFWFLX( myThid )
#endif /* ALLOW_SHIFWFLX_CONTROL and ALLOW_SHIFWFLX_COST_CONTRIBUTION */
#else
C-- Calculate cost function on tile of this instance
DO bj = myByLo(myThid), myByHi(myThid)
DO bi = myBxLo(myThid), myBxHi(myThid)
ccc do klev = 1, Nr
DO j=1,sNy
DO i=1,sNx
objf_shelfice(bi,bj) = objf_shelfice(bi,bj)
& + cMeanSHIforS(i,j,bi,bj)/lastinterval/rhoConstFresh
& *_rA(i,j,bi,bj)
ENDDO
ENDDO
ccc end do
ENDDO
ENDDO
#endif /* ALLOW_ECCO */
C-- Sum up all contributions.
DO bj = myByLo(myThid), myByHi(myThid)
DO bi = myBxLo(myThid), myBxHi(myThid)
write(standardmessageunit,'(A,D22.15)')
& ' --> objf_shelfice(bi,bj) = ', objf_shelfice(bi,bj)
write(standardmessageunit,'(A,D22.15)')
& ' --> objf_shifwflx(bi,bj) = ', objf_shifwflx(bi,bj)
tile_fc(bi,bj) = tile_fc(bi,bj)
& + mult_shelfice * objf_shelfice(bi,bj)
& + mult_shifwflx * objf_shifwflx(bi,bj)
ENDDO
ENDDO
CALL GLOBAL_SUM_TILE_RL( objf_shelfice, f_shelfice, myThid )
CALL GLOBAL_SUM_TILE_RL( objf_shifwflx, f_shifwflx, myThid )
cML CALL GLOBAL_SUM_TILE_RL( num_shelfice, no_shelfice, myThid )
CALL GLOBAL_SUM_TILE_RL( num_shifwflx, no_shifwflx, myThid )
# ifndef ALLOW_OPENAD
C-- Each process has calculated the global part for itself.
IF ( MASTER_CPU_THREAD(myThid) ) THEN
ifc = 30
WRITE(cfname,'(A,i4.4)') 'costfunction_shelfice',optimcycle
OPEN(unit=ifc,file=cfname)
WRITE(ifc,*) 'fc =', fc
cML WRITE(ifc,*) 'f_shelfice =', f_shelfice, no_shelfice
WRITE(ifc,*) 'f_shelfice =', f_shelfice
WRITE(ifc,*) 'f_shifwflx =', f_shifwflx, no_shifwflx
CLOSE(ifc)
ENDIF
# endif /* ALLOW_OPENAD */
#endif /* ALLOW_COST */
RETURN
END