C $Header: /u/gcmpack/MITgcm/pkg/admtlm/admtlm_upxx.F,v 1.2 2005/04/29 10:36:45 heimbach Exp $

#include "CTRL_CPPOPTIONS.h"

CBOP
C     !ROUTINE: admtlm_upxx
C     !INTERFACE:
      subroutine ADMTLM_UPXX( mythid )

C     !DESCRIPTION: \bv
c     *=================================================================
c     | SUBROUTINE admtlm_upxx
c     | ALLOW_ADMTLM needs to shift xx_... from optimcycle to
c     | optimcycle + 1 without change (iteration w.r.t. same state)
c     | Least interfering way to do this is to copy this file
c     *=================================================================
C     \ev

C     !USES:
      implicit none

c     == global variables ==
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "DYNVARS.h"
#include "GRID.h"
#include "ctrl.h"
#include "ctrl_dummy.h"
#include "optim.h"
#ifdef ALLOW_PTRACERS
# include "PTRACERS_SIZE.h"
# include "PTRACERS.h"
#endif
#ifdef ALLOW_ECCO
# include "ecco_cost.h"
#endif
#ifdef ALLOW_ADMTLM
# include "adcost.h"
# include "g_cost.h"
# include "adcommon.h"
# include "g_common.h"
#endif

C     !INPUT/OUTPUT PARAMETERS:
c     == routine arguments ==
      integer mythid

#ifdef ALLOW_ADMTLM
C     !LOCAL VARIABLES:
c     == local variables ==

      integer bi,bj
      integer i,j,k
      integer itlo,ithi
      integer jtlo,jthi
      integer jmin,jmax
      integer imin,imax
      integer il

      logical equal
      logical doglobalread
      logical ladinit

      character*( 80)   fnamegen

      _RL     fac
      _RL tmptest

c     == external ==
      integer  ilnblnk
      external 

c     == end of interface ==
CEOP

      jtlo = mybylo(mythid)
      jthi = mybyhi(mythid)
      itlo = mybxlo(mythid)
      ithi = mybxhi(mythid)
      jmin = 1
      jmax = sny
      imin = 1
      imax = snx

      doglobalread = .false.
      ladinit      = .false.

      equal = .true.

      if ( equal ) then
        fac = 1. _d 0
      else
        fac = 0. _d 0
      endif

cph A quick hack to make the full state I/O work quickly
#ifdef ALLOW_ADMTLM
      DO bj=myByLo(myThid),myByHi(myThid)
       DO bi=myBxLo(myThid),myBxHi(myThid)
        DO j=1,sNy
         DO i=1,sNx
          DO k=1,Nr
            g_theta(i,j,k,bi,bj) = g_objf_state_final(i,j,bi,bj,k)
            g_salt(i,j,k,bi,bj) = g_objf_state_final(i,j,bi,bj,k+Nr)
            g_uvel(i,j,k,bi,bj) = g_objf_state_final(i,j,bi,bj,k+2*Nr)
            g_vvel(i,j,k,bi,bj) = g_objf_state_final(i,j,bi,bj,k+3*Nr)
          END


DO g_etan(i,j,bi,bj) = g_objf_state_final(i,j,bi,bj,4*Nr+1) END


DO END


DO END


DO END


DO il=ilnblnk( xx_theta_file ) write(fnamegen(1:80),'(3a,i10.10)') & 'g_',xx_theta_file(1:il),'.',optimcycle call ACTIVE_WRITE_XYZ_LOC ( fnamegen, g_theta, 1, & optimcycle, & mythid, xx_theta_dummy ) il=ilnblnk( xx_salt_file ) write(fnamegen(1:80),'(3a,i10.10)') & 'g_',xx_salt_file(1:il),'.',optimcycle call ACTIVE_WRITE_XYZ_LOC ( fnamegen, g_salt, 1, & optimcycle, & mythid, xx_salt_dummy ) il=ilnblnk( xx_uvel_file ) write(fnamegen(1:80),'(3a,i10.10)') & 'g_',xx_uvel_file(1:il),'.',optimcycle call ACTIVE_WRITE_XYZ_LOC ( fnamegen, g_uvel, 1, & optimcycle, & mythid, xx_uvel_dummy ) il=ilnblnk( xx_vvel_file ) write(fnamegen(1:80),'(3a,i10.10)') & 'g_',xx_vvel_file(1:il),'.',optimcycle call ACTIVE_WRITE_XYZ_LOC ( fnamegen, g_vvel, 1, & optimcycle, & mythid, xx_vvel_dummy ) il=ilnblnk( xx_etan_file ) write(fnamegen(1:80),'(3a,i10.10)') & 'g_',xx_etan_file(1:il),'.',optimcycle call ACTIVE_WRITE_XY_LOC ( fnamegen, g_etan, 1, & optimcycle, & mythid, xx_etan_dummy ) #endif #ifdef ALLOW_SST0_CONTROL c-- sst0. il=ilnblnk( xx_sst_file ) write(fnamegen(1:80),'(2a,i10.10)') & xx_sst_file(1:il),'.',optimcycle-1 call ACTIVE_READ_XY_LOC ( fnamegen, tmpfld2d, 1, & doglobalread, ladinit, optimcycle-1, & mythid, xx_sst_dummy ) il=ilnblnk( xx_sst_file ) write(fnamegen(1:80),'(2a,i10.10)') & xx_sst_file(1:il),'.',optimcycle call ACTIVE_WRITE_XY_LOC ( fnamegen, tmpfld2d, 1, & optimcycle, & mythid, xx_sst_dummy ) #endif #ifdef ALLOW_SSS0_CONTROL c-- sss0. il=ilnblnk( xx_sss_file ) write(fnamegen(1:80),'(2a,i10.10)') & xx_sss_file(1:il),'.',optimcycle-1 call ACTIVE_READ_XY_LOC ( fnamegen, tmpfld2d, 1, & doglobalread, ladinit, optimcycle-1, & mythid, xx_sss_dummy ) il=ilnblnk( xx_sss_file ) write(fnamegen(1:80),'(2a,i10.10)') & xx_sss_file(1:il),'.',optimcycle call ACTIVE_WRITE_XY_LOC ( fnamegen, tmpfld2d, 1, & optimcycle, & mythid, xx_sss_dummy ) #endif #ifdef ALLOW_THETA0_CONTROL il=ilnblnk( xx_theta_file ) write(fnamegen(1:80),'(2a,i10.10)') & xx_theta_file(1:il),'.',optimcycle-1 call ACTIVE_READ_XYZ_LOC ( fnamegen, tmpfld2d, 1, & doglobalread, ladinit, optimcycle-1, & mythid, xx_theta_dummy ) il=ilnblnk( xx_theta_file ) write(fnamegen(1:80),'(2a,i10.10)') & xx_theta_file(1:il),'.',optimcycle call ACTIVE_WRITE_XYZ_LOC ( fnamegen, tmpfld2d, 1, & optimcycle, & mythid, xx_theta_dummy ) #endif #ifdef ALLOW_SALT0_CONTROL il=ilnblnk( xx_salt_file ) write(fnamegen(1:80),'(2a,i10.10)') & xx_salt_file(1:il),'.',optimcycle-1 call ACTIVE_READ_XYZ_LOC ( fnamegen, tmpfld2d, 1, & doglobalread, ladinit, optimcycle-1, & mythid, xx_salt_dummy ) il=ilnblnk( xx_salt_file ) write(fnamegen(1:80),'(2a,i10.10)') & xx_salt_file(1:il),'.',optimcycle call ACTIVE_WRITE_XYZ_LOC ( fnamegen, tmpfld2d, 1, & optimcycle, & mythid, xx_salt_dummy ) #endif #ifdef ALLOW_UVEL0_CONTROL il=ilnblnk( xx_uvel_file ) write(fnamegen(1:80),'(2a,i10.10)') & xx_uvel_file(1:il),'.',optimcycle-1 call ACTIVE_READ_XYZ_LOC ( fnamegen, tmpfld2d, 1, & doglobalread, ladinit, optimcycle-1, & mythid, xx_uvel_dummy ) il=ilnblnk( xx_uvel_file ) write(fnamegen(1:80),'(2a,i10.10)') & xx_uvel_file(1:il),'.',optimcycle call ACTIVE_WRITE_XYZ_LOC ( fnamegen, tmpfld2d, 1, & optimcycle, & mythid, xx_uvel_dummy ) #endif #ifdef ALLOW_VVEL0_CONTROL il=ilnblnk( xx_vvel_file ) write(fnamegen(1:80),'(2a,i10.10)') & xx_vvel_file(1:il),'.',optimcycle-1 call ACTIVE_READ_XYZ_LOC ( fnamegen, tmpfld2d, 1, & doglobalread, ladinit, optimcycle-1, & mythid, xx_vvel_dummy ) il=ilnblnk( xx_vvel_file ) write(fnamegen(1:80),'(2a,i10.10)') & xx_vvel_file(1:il),'.',optimcycle call ACTIVE_WRITE_XYZ_LOC ( fnamegen, tmpfld2d, 1, & optimcycle, & mythid, xx_vvel_dummy ) #endif #ifdef ALLOW_ETAN0_CONTROL c-- etan0. il=ilnblnk( xx_etan_file ) write(fnamegen(1:80),'(2a,i10.10)') & xx_etan_file(1:il),'.',optimcycle-1 call ACTIVE_READ_XY_LOC ( fnamegen, tmpfld2d, 1, & doglobalread, ladinit, optimcycle-1, & mythid, xx_etan_dummy ) il=ilnblnk( xx_etan_file ) write(fnamegen(1:80),'(2a,i10.10)') & xx_etan_file(1:il),'.',optimcycle call ACTIVE_WRITE_XY_LOC ( fnamegen, tmpfld2d, 1, & optimcycle, & mythid, xx_etan_dummy ) #endif #endif /* ALLOW_ADMTLM */ return end