C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_cost_final.F,v 1.21 2015/05/29 20:16:13 heimbach Exp $ C $Name: $ #include "SEAICE_OPTIONS.h" #ifdef ALLOW_COST #include "COST_OPTIONS.h" #endif #ifdef ALLOW_CTRL #include "CTRL_OPTIONS.h" #endif CBOP C !ROUTINE: SEAICE_COST_FINAL C !INTERFACE: SUBROUTINE SEAICE_COST_FINAL( myThid ) C !DESCRIPTION: C *==========================================================* C | SUBROUTINE SEAICE_COST_FINAL C *==========================================================* C !USES: IMPLICIT NONE C == global variables == #include "EEPARAMS.h" #include "SIZE.h" #include "PARAMS.h" #include "SEAICE_SIZE.h" #include "SEAICE_PARAMS.h" #include "SEAICE_COST.h" #ifdef ALLOW_COST # include "cost.h" #endif #ifdef ALLOW_CTRL # include "ctrl.h" # include "optim.h" #endif C !INPUT/OUTPUT PARAMETERS: INTEGER myThid #ifdef ALLOW_COST #if (defined(ALLOW_SEAICE_COST_SMR_AREA) defined(ALLOW_COST_ICE) defined(ALLOW_SEAICE_COST_EXPORT)) C ! FUNCTIONS: LOGICAL MASTER_CPU_THREAD EXTERNAL C !LOCAL VARIABLES: INTEGER bi, bj INTEGER ifc _RL f_ice _RL f_smrarea _RL f_smrsst _RL f_smrsss _RL no_ice _RL no_smrarea _RL no_smrsst _RL no_smrsss CHARACTER*23 cfname c CHARACTER*(MAX_LEN_MBUF) msgBuf CEOP ifc = 30 f_ice = 0. _d 0 f_smrarea = 0. _d 0 f_smrsst = 0. _d 0 f_smrsss = 0. _d 0 no_ice = 0. _d 0 no_smrarea = 0. _d 0 no_smrsst = 0. _d 0 no_smrsss = 0. _d 0 #ifdef ALLOW_SEAICE_COST_EXPORT CALL SEAICE_COST_EXPORT( myThid ) #endif C-- Sum up all contributions. DO bj = myByLo(myThid), myByHi(myThid) DO bi = myBxLo(myThid), myBxHi(myThid) tile_fc(bi,bj) = tile_fc(bi,bj) & + mult_ice_export * objf_ice_export(bi,bj) & + mult_ice * objf_ice(bi,bj) & + mult_smrarea * objf_smrarea(bi,bj) & + mult_smrsst * objf_smrsst(bi,bj) & + mult_smrsss * objf_smrsss(bi,bj) ENDDO ENDDO C-- Note: global summation (tile_fc --> fc) is done only in cost_final C-- Do global summation for each part of the cost function CALL GLOBAL_SUM_TILE_RL( objf_ice, f_ice, myThid ) CALL GLOBAL_SUM_TILE_RL( objf_smrarea, f_smrarea, myThid ) CALL GLOBAL_SUM_TILE_RL( objf_smrsst, f_smrsst, myThid ) CALL GLOBAL_SUM_TILE_RL( objf_smrsss, f_smrsss, myThid ) CALL GLOBAL_SUM_TILE_RL( num_ice, no_ice, myThid ) CALL GLOBAL_SUM_TILE_RL( num_smrarea, no_smrarea, myThid ) CALL GLOBAL_SUM_TILE_RL( num_smrsst, no_smrsst, myThid ) CALL GLOBAL_SUM_TILE_RL( num_smrsss, no_smrsss, myThid ) WRITE(standardMessageUnit,'(A,D22.15)') & ' --> f_ice =',f_ice WRITE(standardMessageUnit,'(A,D22.15)') & ' --> f_smrarea =',f_smrarea WRITE(standardMessageUnit,'(A,D22.15)') & ' --> f_smrarea =',f_smrsst WRITE(standardMessageUnit,'(A,D22.15)') & ' --> f_smrarea =',f_smrsss C-- Each process has calculated the global part for itself. IF ( MASTER_CPU_THREAD(myThid) ) THEN WRITE(cfname,'(A,i4.4)') 'costfunction_seaice',optimcycle OPEN(unit=ifc,file=cfname) WRITE(ifc,*) 'fc =', fc WRITE(ifc,*) 'f_ice =', f_ice, no_ice WRITE(ifc,*) 'f_smrarea =', f_smrarea, no_smrarea WRITE(ifc,*) 'f_smrsst =', f_smrsst, no_smrsst WRITE(ifc,*) 'f_smrsss =', f_smrsss, no_smrsss CLOSE(ifc) ENDIF #endif /* ALLOW_SEAICE_COST_SMR_AREA */ #endif /* ALLOW_COST */ RETURN END