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 – NEMO

Changeset 3032 for branches


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

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

Location:
branches/2011/dev_CMCC
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_CMCC/DOC/TexFiles/Biblio/Biblio.bib

    r2541 r3032  
    722722  year = {2000}, 
    723723  pages = {237--313} 
     724} 
     725 
     726 
     727@ARTICLE{Dobricic_al_OS07, 
     728  author = {S. Dobricic and N. Pinardi and M. Adani and M. Tonani and  
     729            C. Fratianni and A. Bonazzi and V. Fernandez}, 
     730  title = {Daily oceanographic analysis by the Mediterranean basin scale  
     731           assimilation system}, 
     732  journal = OS, 
     733  year = {2007}, 
     734  volume = {3}, 
     735  pages = {149-157} 
    724736} 
    725737 
     
    24852497  volume = {359}, 
    24862498  pages = {123--129} 
     2499} 
     2500 
     2501@ARTICLE{Talagrand_JAS72, 
     2502  author = {O. Talagrand}, 
     2503  title = {On the damping of high-frequency motions in four-dimensional  
     2504           assimilation of meteorological data}, 
     2505  journal = JAS, 
     2506  year = {1972}, 
     2507  volume = {29}, 
     2508  pages = {1571-1574} 
    24872509} 
    24882510 
  • branches/2011/dev_CMCC/DOC/TexFiles/Chapters/Chap_ASM.tex

    r2483 r3032  
    8686 
    8787%========================================================================== 
     88% Divergence damping description %%% 
     89\section{Divergence damping initialisation} 
     90\label{ASM_details} 
     91 
     92The velocity increments may be initialized by the iterative application of  
     93a divergence damping operator. In iteration step $n$ new estimates of  
     94velocity increments $u^{n}_I$ and $v^{n}_I$ are updated by: 
     95\begin{equation} \label{eq:asm_dmp} 
     96\left\{ \begin{aligned} 
     97 u^{n}_I = u^{n-1}_I + \frac{1}{e_{1u} } \delta _{i+1/2} \left( {A_D 
     98\;\chi^{n-1}_I } \right) \\ 
     99\\ 
     100 v^{n}_I = v^{n-1}_I + \frac{1}{e_{2v} } \delta _{j+1/2} \left( {A_D 
     101\;\chi^{n-1}_I } \right) \\ 
     102\end{aligned} \right, 
     103\end{equation} 
     104where 
     105\begin{equation} \label{eq:asm_div} 
     106\chi^{n-1}_I = \frac{1}{e_{1t}\,e_{2t}\,e_{3t} } 
     107                \left( {\delta _i \left[ {e_{2u}\,e_{3u}\,u^{n-1}_I} \right] 
     108                       +\delta _j \left[ {e_{1v}\,e_{3v}\,v^{n-1}_I} \right]} \right). 
     109\end{equation} 
     110By the application of \eqref{eq:asm_dmp} and \eqref{eq:asm_dmp} the divergence is filtered 
     111in each iteration, and the vorticity is left unchanged. In the presence of coastal boundaries 
     112with zero velocity increments perpendicular to the coast the divergence is strongly damped. 
     113This type of the initialisation reduces the vertical velocity magnitude  and alleviates the 
     114problem of the excessive unphysical vertical mixing in the first steps of the model  
     115integration \citep{Talagrand_JAS72, Dobricic_al_OS07}. Diffusion coefficients are defined as  
     116$A_D = \alpha e_{1t} e_{2t}$, where $\alpha = 0.2$. The divergence damping is activated by 
     117assigning to \textit{ndivdmp} in the \textit{nam\_asminc} namelist a value greater than zero.  
     118By choosing this value to be of the order of 100 the increments in the vertical velocity will  
     119be significantly reduced. 
     120 
     121 
     122%========================================================================== 
    88123 
    89124\section{Implementation details} 
  • branches/2011/dev_CMCC/DOC/TexFiles/Namelist/namasm

    r2540 r3032  
    1717    ln_salfix = .false.    !  Logical switch for ensuring that the sa > salfixmin 
    1818    salfixmin = -9999      !  Minimum salinity after applying the increments 
     19    ndivdmp   = 0          !  Number of iterations of divergence damping operator 
    1920/ 
  • branches/2011/dev_CMCC/NEMOGCM/CONFIG/GYRE/EXP00/namelist

    r2715 r3032  
    862862    ln_salfix = .false.    !  Logical switch for ensuring that the sa > salfixmin 
    863863    salfixmin = -9999      !  Minimum salinity after applying the increments 
    864 / 
     864    ndivdmp   = 0          !  Number of iterations of divergence damping operator 
     865/ 
  • branches/2011/dev_CMCC/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/namelist

    r2715 r3032  
    862862    ln_salfix = .false.    !  Logical switch for ensuring that the sa > salfixmin 
    863863    salfixmin = -9999      !  Minimum salinity after applying the increments 
    864 / 
     864    ndivdmp   = 0          !  Number of iterations of divergence damping operator 
     865/ 
  • branches/2011/dev_CMCC/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist

    r2715 r3032  
    877877    ln_salfix = .false.    !  Logical switch for ensuring that the sa > salfixmin 
    878878    salfixmin = -9999      !  Minimum salinity after applying the increments 
    879 / 
     879    ndivdmp   = 0          !  Number of iterations of divergence damping operator 
     880/ 
  • branches/2011/dev_CMCC/NEMOGCM/CONFIG/POMME/EXP00/namelist

    r2650 r3032  
    867867    ln_salfix = .false.    !  Logical switch for ensuring that the sa > salfixmin 
    868868    salfixmin = -9999      !  Minimum salinity after applying the increments 
    869 / 
     869    ndivdmp   = 0          !  Number of iterations of divergence damping operator 
     870/ 
  • 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.