New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 3032 for branches/2011/dev_CMCC/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90 – NEMO

Ignore:
Timestamp:
2011-10-31T15:48:12+01:00 (13 years ago)
Author:
vichi
Message:

ticket #881. Step 2: Added changes from dev_r2855_CMCC3_divd branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_CMCC/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90

    r2715 r3032  
    2525   USE oce              ! Dynamics and active tracers defined in memory 
    2626   USE divcur           ! Horizontal divergence and relative vorticity 
     27   USE ldfdyn_oce       ! ocean dynamics: lateral physics 
    2728   USE eosbn2           ! Equation of state - in situ and potential density 
    2829   USE zpshde           ! Partial step : Horizontal Derivative 
     
    5556   LOGICAL, PUBLIC :: ln_sshinc = .FALSE. !: No sea surface height assimilation increment 
    5657   LOGICAL, PUBLIC :: ln_salfix = .FALSE. !: Apply minimum salinity check 
     58   INTEGER, PUBLIC ::   ndivdmp = 0       !: Apply divergence damping filter ndivdmp times 
    5759 
    5860   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE ::   t_bkg   , s_bkg      !: Background temperature and salinity 
     
    7678   REAL(wp), DIMENSION(:,:), ALLOCATABLE ::   ssh_bkg, ssh_bkginc   ! Background sea surface height and its increment 
    7779 
     80   !! * Substitutions 
     81#  include "domzgr_substitute.h90" 
     82#  include "ldfdyn_substitute.h90" 
     83#  include "vectopt_loop_substitute.h90" 
     84 
    7885   !!---------------------------------------------------------------------- 
    7986   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     
    93100      !! ** Action  :  
    94101      !!---------------------------------------------------------------------- 
     102      !! 
     103      USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released, wrk_2d_1 
     104      USE wrk_nemo, ONLY: hdiv => wrk_2d_1  ! Horizontal divergence 
     105      !! 
     106      INTEGER :: ji,jj,jk 
    95107      INTEGER :: jt 
    96108      INTEGER :: imid 
     
    116128         &                 ln_asmdin, ln_asmiau,                           & 
    117129         &                 nitbkg, nitdin, nitiaustr, nitiaufin, niaufn,   & 
    118          &                 nittrjfrq, ln_salfix, salfixmin 
     130         &                 nittrjfrq, ln_salfix, salfixmin,                & 
     131         &                 ndivdmp 
    119132      !!---------------------------------------------------------------------- 
    120133 
     
    420433 
    421434      !----------------------------------------------------------------------- 
     435      ! Apply divergence damping filter 
     436      !----------------------------------------------------------------------- 
     437 
     438 
     439      IF ( ln_dyninc .AND. ndivdmp.gt.0 ) THEN 
     440 
     441       IF( wrk_in_use( 2, 1) ) THEN 
     442         CALL ctl_stop('asm_inc_init : requested workspace for divergence unavailable.') 
     443       ENDIF 
     444 
     445 
     446       DO  jt = 1, ndivdmp 
     447 
     448           DO jk = 1, jpkm1 
     449 
     450                  hdiv(:,:) = 0._wp 
     451 
     452            DO jj = 2, jpjm1 
     453               DO ji = fs_2, fs_jpim1   ! vector opt. 
     454                  hdiv(ji,jj) =   & 
     455                     (  e2u(ji  ,jj)*fse3u(ji  ,jj,jk) * u_bkginc(ji  ,jj,jk)       & 
     456                      - e2u(ji-1,jj)*fse3u(ji-1,jj,jk) * u_bkginc(ji-1,jj,jk)       & 
     457                      + e1v(ji,jj  )*fse3v(ji,jj  ,jk) * v_bkginc(ji,jj  ,jk)       & 
     458                      - e1v(ji,jj-1)*fse3v(ji,jj-1,jk) * v_bkginc(ji,jj-1,jk)  )    & 
     459                      / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
     460               END DO 
     461            END DO 
     462 
     463            CALL lbc_lnk( hdiv, 'T', 1. )   ! lateral boundary cond. (no sign change) 
     464 
     465            DO jj = 2, jpjm1 
     466               DO ji = fs_2, fs_jpim1   ! vector opt. 
     467                  u_bkginc(ji,jj,jk) = u_bkginc(ji,jj,jk) + 0.2 * ( e1t(ji+1,jj)*e2t(ji+1,jj) * hdiv(ji+1,jj)   & 
     468                                                                  - e1t(ji  ,jj)*e2t(ji  ,jj) * hdiv(ji  ,jj) ) & 
     469                                                                / e1u(ji,jj) * umask(ji,jj,jk)  
     470                  v_bkginc(ji,jj,jk) = v_bkginc(ji,jj,jk) + 0.2 * ( e1t(ji,jj+1)*e2t(ji,jj+1) * hdiv(ji,jj+1)   & 
     471                                                                  - e1t(ji,jj  )*e2t(ji,jj  ) * hdiv(ji,jj  ) ) & 
     472                                                                / e2v(ji,jj) * vmask(ji,jj,jk)  
     473               END DO 
     474            END DO 
     475 
     476           END DO 
     477 
     478       END DO 
     479 
     480       IF( wrk_not_released( 2, 1) ) THEN 
     481         CALL ctl_stop('asm_inc_init : failed to release divergence') 
     482       ENDIF 
     483 
     484      ENDIF 
     485 
     486 
     487 
     488      !----------------------------------------------------------------------- 
    422489      ! Allocate and initialize the background state arrays 
    423490      !----------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.