103
  104
  110
  111
  112
  113      integer, intent(in) :: ng, tile
  114      integer, intent(in) :: LBi, UBi, LBj, UBj
  115      integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
  116      integer, intent(in) :: knew
  117# ifdef SOLVE3D
  118      integer, intent(in) :: nnew, nstp
  119# endif
  120
  121# ifdef ASSUMED_SHAPE
  122      real(r8), intent(in) :: Rscope(LBi:,LBj:)
  123      real(r8), intent(in) :: Uscope(LBi:,LBj:)
  124      real(r8), intent(in) :: Vscope(LBi:,LBj:)
  125#  ifdef SOLVE3D
  126      real(r8), intent(in) :: u_ads(LBi:,LBj:,:)
  127      real(r8), intent(in) :: v_ads(LBi:,LBj:,:)
  128      real(r8), intent(in) :: wvel_ads(LBi:,LBj:,:)
  129      real(r8), intent(in) :: t_ads(LBi:,LBj:,:,:)
  130#  endif
  131      real(r8), intent(in) :: ubar_ads(LBi:,LBj:)
  132      real(r8), intent(in) :: vbar_ads(LBi:,LBj:)
  133      real(r8), intent(in) :: zeta_ads(LBi:,LBj:)
  134#  ifdef SOLVE3D
  135      real(r8), intent(inout) :: ad_u(LBi:,LBj:,:,:)
  136      real(r8), intent(inout) :: ad_v(LBi:,LBj:,:,:)
  137      real(r8), intent(inout) :: ad_wvel(LBi:,LBj:,:)
  138      real(r8), intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
  139      real(r8), intent(inout) :: ad_Zt_avg1(LBi:,LBj:)
  140#  else
  141      real(r8), intent(inout) :: ad_zeta(LBi:,LBj:,:)
  142#  endif
  143      real(r8), intent(inout) :: ad_ubar(LBi:,LBj:,:)
  144      real(r8), intent(inout) :: ad_vbar(LBi:,LBj:,:)
  145# else
  146      real(r8), intent(in) :: Rscope(LBi:UBi,LBj:UBj)
  147      real(r8), intent(in) :: Uscope(LBi:UBi,LBj:UBj)
  148      real(r8), intent(in) :: Vscope(LBi:UBi,LBj:UBj)
  149#  ifdef SOLVE3D
  150      real(r8), intent(in) :: u_ads(LBi:UBi,LBj:UBj,N(ng))
  151      real(r8), intent(in) :: v_ads(LBi:UBi,LBj:UBj,N(ng))
  152      real(r8), intent(in) :: wvel_ads(LBi:UBi,LBj:UBj,N(ng))
  153      real(r8), intent(in) :: t_ads(LBi:UBi,LBj:UBj,N(ng),NT(ng))
  154#  endif
  155      real(r8), intent(in) :: ubar_ads(LBi:UBi,LBj:UBj)
  156      real(r8), intent(in) :: vbar_ads(LBi:UBi,LBj:UBj)
  157      real(r8), intent(in) :: zeta_ads(LBi:UBi,LBj:UBj)
  158#  ifdef SOLVE3D
  159      real(r8), intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
  160      real(r8), intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
  161      real(r8), intent(inout) :: ad_u(LBi:UBi,LBj:UBj,0:N(ng))
  162      real(r8), intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
  163      real(r8), intent(inout) :: ad_Zt_avg1(LBi:UBi,LBj:UBj)
  164#  else
  165      real(r8), intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
  166#  endif
  167      real(r8), intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
  168      real(r8), intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
  169# endif
  170
  171
  172
  173      integer :: Kfrc, Nfrc, i, itrc, j, k
  174 
  175      real(r8) :: adFac
  176 
  177# include "set_bounds.h"
  178
  179
  180
  181
  182
  183
  184
  186        kfrc=knew
  187        nfrc=nstp
  188      ELSE
  189        kfrc=1
  190        nfrc=nnew
  191      END IF
  192 
  193# ifdef AD_IMPULSE
  194
  195
  196
  197
  198
  199
  200
  201      adfac=0.0_r8
  202#  ifdef I4DVAR_ANA_SENSITIVITY
  203      IF ((mod(
iic(ng)-1,
nhis(ng)).eq.0).and.                           &
 
  205#  else
  206      IF ((mod(
iic(ng)-1,
ntlm(ng)).eq.0).and.                           &
 
  208#  endif
  209          adfac=1.0_r8
  212 10         FORMAT (2x,'ADSEN_FORCE      - forcing Adjoint model at',   &
  213     &                 ' TimeStep: ', i0)
  214          END IF
  215      END IF
  216# else
  217      adfac=1.0_r8
  218# endif
  219
  220
  221
  223# ifdef SOLVE3D
  224        DO j=jstrr,jendr
  225          DO i=istrr,iendr
  226            ad_zt_avg1(i,j)=ad_zt_avg1(i,j)+                            &
  227     &                      adfac*zeta_ads(i,j)*rscope(i,j)
  228          END DO
  229        END DO
  230# else
  231        DO j=jstrr,jendr
  232          DO i=istrr,iendr
  233            ad_zeta(i,j,kfrc)=ad_zeta(i,j,kfrc)+                        &
  234     &                        adfac*zeta_ads(i,j)*rscope(i,j)
  235          END DO
  236        END DO
  237# endif
  238      END IF
  239
  240
  241
  243        DO j=jstrr,jendr
  244          DO i=istr,iendr
  245            ad_ubar(i,j,kfrc)=ad_ubar(i,j,kfrc)+                        &
  246     &                        adfac*ubar_ads(i,j)*uscope(i,j)
  247          END DO
  248        END DO
  249      END IF
  250
  252        DO j=jstr,jendr
  253          DO i=istrr,iendr
  254            ad_vbar(i,j,kfrc)=ad_vbar(i,j,kfrc)+                        &
  255     &                        adfac*vbar_ads(i,j)*vscope(i,j)
  256          END DO
  257        END DO
  258      END IF
  259# ifdef SOLVE3D
  260
  261
  262
  265          DO j=jstrr,jendr
  266            DO i=istr,iendr
  267              ad_u(i,j,k,nfrc)=ad_u(i,j,k,nfrc)+                        &
  268     &                         adfac*u_ads(i,j,k)*uscope(i,j)
  269            END DO
  270          END DO
  271        END DO
  272      END IF
  273
  276          DO j=jstr,jendr
  277            DO i=istrr,iendr
  278              ad_v(i,j,k,nfrc)=ad_v(i,j,k,nfrc)+                        &
  279     &                         adfac*v_ads(i,j,k)*vscope(i,j)
  280            END DO
  281          END DO
  282        END DO
  283      END IF
  284
  285
  286
  287
  288
  289
  290
  292
  294          DO j=jstrr,jendr
  295            DO i=istrr,iendr
  296              ad_wvel(i,j,k)=ad_wvel(i,j,k)+                            &
  297     &                       adfac*wvel_ads(i,j,k)*rscope(i,j)
  298            END DO
  299          END DO
  300        END DO
  301      END IF
  302
  303
  304
  308            DO j=jstrr,jendr
  309              DO i=istrr,iendr
  310                ad_t(i,j,k,nfrc,itrc)=ad_t(i,j,k,nfrc,itrc)+            &
  311     &                                adfac*t_ads(i,j,k,itrc)*          &
  312     &                                rscope(i,j)
  313              END DO
  314            END DO
  315          END DO
  316        END IF
  317      END DO
  318# endif
  319 
  320      RETURN
integer, dimension(:), allocatable istvar
integer, dimension(:), allocatable nt
integer, dimension(:), allocatable kends
integer, dimension(:), allocatable iic
integer, dimension(:), allocatable ntlm
real(dp), dimension(:), allocatable tdays
real(r8), dimension(:), allocatable dends
integer, dimension(:), allocatable kstrs
integer, dimension(:), allocatable ntend
integer, dimension(:), allocatable nhis
type(t_scalars), dimension(:), allocatable scalars
real(r8), dimension(:), allocatable dstrs