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

Changeset 1954


Ignore:
Timestamp:
2010-06-24T17:52:01+02:00 (14 years ago)
Author:
acc
Message:

ticket #684 step 4: Add in changes between the head of the dev_r1821_mixed_ldfdyn branch and the trunk@1821

Location:
branches/DEV_r1784_mid_year_merge_2010
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • branches/DEV_r1784_mid_year_merge_2010/CONFIG/ORCA2_LIM/EXP00/namelist

    r1951 r1954  
    523523   ln_dynldf_iso    =  .false.  !  iso-neutral                          (require "key_ldfslp") 
    524524                           !  Coefficient 
    525    rn_ahm_0    = 40000.         !  horizontal eddy viscosity   [m2/s] 
    526    rn_ahmb_0   =     0.         !  background eddy viscosity for ldf_iso [m2/s] 
     525   rn_ahm_0         = 40000.    !  horizontal laplacian eddy viscosity   [m2/s] 
     526   rn_ahmb_0        =     0.    !  background eddy viscosity for ldf_iso [m2/s] 
     527   rn_ahm_0_blp     =     0.    !  horizontal bilaplacian eddy viscosity [m4/s]  
    527528/ 
    528529!!====================================================================== 
  • branches/DEV_r1784_mid_year_merge_2010/DOC/TexFiles/Chapters/Chap_LDF.tex

    r1224 r1954  
    147147 
    148148(5) the eddy coefficient associated with a biharmonic operator must be set to a \emph{negative} value. 
     149 
     150(6) it is possible to use both the laplacian and biharmonic operators concurrently. 
     151 
     152(7) for testing purposes it is possible to run without lateral diffusion on momentum. 
    149153 
    150154 
  • branches/DEV_r1784_mid_year_merge_2010/DOC/TexFiles/Namelist/nam_dynldf

    r1225 r1954  
    1010   ln_dynldf_iso    =  .false.  !     iso-neutral                      (require "key_ldfslp") 
    1111                                !  Coefficient 
    12    ahm0    = 40000.             !     horizontal eddy viscosity   [m2/s] 
    13    ahmb0   =     0.             !     background eddy viscosity for ldf_iso [m2/s] 
     12   rn_ahm_0         = 40000.    !     horizontal laplacian eddy viscosity   [m2/s] 
     13   rn_ahmb_0        =     0.    !     background eddy viscosity for ldf_iso [m2/s] 
     14   rn_ahm_0_blp     =     0.    !     horizontal bilaplacian eddy viscosity [m4/s]  
    1415/ 
  • branches/DEV_r1784_mid_year_merge_2010/NEMO/OPA_SRC/DYN/dynldf.F90

    r1152 r1954  
    6969      CASE ( 2 )    ;   CALL dyn_ldf_bilap  ( kt )      ! iso-level bilaplacian 
    7070      CASE ( 3 )    ;   CALL dyn_ldf_bilapg ( kt )      ! s-coord. horizontal bilaplacian 
     71      CASE ( 4 )                                        ! iso-level laplacian + bilaplacian 
     72         CALL dyn_ldf_lap    ( kt ) 
     73         CALL dyn_ldf_bilap  ( kt ) 
     74      CASE ( 5 )                                        ! rotated laplacian + bilaplacian (s-coord) 
     75         CALL dyn_ldf_iso    ( kt ) 
     76         CALL dyn_ldf_bilapg ( kt ) 
    7177      ! 
    7278      CASE ( -1 )                                       ! esopa: test all possibility with control print 
     
    8389                        CALL prt_ctl( tab3d_1=ua, clinfo1=' ldf3 - Ua: ', mask1=umask,   & 
    8490            &                         tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     91      ! 
     92      CASE ( -2 )                                       ! neither laplacian nor bilaplacian schemes used 
     93         IF( kt == nit000 ) THEN 
     94            IF(lwp) WRITE(numout,*) 
     95            IF(lwp) WRITE(numout,*) 'dyn_ldf : no lateral diffusion on momentum setup' 
     96            IF(lwp) WRITE(numout,*) '~~~~~~~ ' 
     97         ENDIF 
    8598      END SELECT 
    8699 
     
    124137      IF( ln_dynldf_lap   )   ioptio = ioptio + 1 
    125138      IF( ln_dynldf_bilap )   ioptio = ioptio + 1 
    126       IF( ioptio /= 1 ) CALL ctl_stop( '          use ONE of the 2 lap/bilap operator type on dynamics' ) 
     139      IF( ioptio <  1 ) CALL ctl_warn( '          neither laplacian nor bilaplacian operator set for dynamics' ) 
    127140      ioptio = 0 
    128141      IF( ln_dynldf_level )   ioptio = ioptio + 1 
     
    144157            IF ( ln_dynldf_iso   )   nldf = 1      ! isoneutral (   rotation) 
    145158         ENDIF 
    146          IF ( ln_sco ) THEN             ! z-coordinate 
     159         IF ( ln_sco ) THEN             ! s-coordinate 
    147160            IF ( ln_dynldf_level )   nldf = 0      ! iso-level  (no rotation) 
    148161            IF ( ln_dynldf_hor   )   nldf = 1      ! horizontal (   rotation) 
     
    162175            IF ( ln_dynldf_iso   )   ierr = 2      ! isoneutral (   rotation) 
    163176         ENDIF 
    164          IF ( ln_sco ) THEN             ! z-coordinate 
     177         IF ( ln_sco ) THEN             ! s-coordinate 
    165178            IF ( ln_dynldf_level )   nldf = 2      ! iso-level  (no rotation) 
    166179            IF ( ln_dynldf_hor   )   nldf = 3      ! horizontal (   rotation) 
     
    169182      ENDIF 
    170183       
     184      IF( ln_dynldf_lap .AND. ln_dynldf_bilap ) THEN  ! mixed laplacian and bilaplacian operators 
     185         IF ( ln_zco ) THEN                ! z-coordinate 
     186            IF ( ln_dynldf_level )   nldf = 4      ! iso-level  (no rotation) 
     187            IF ( ln_dynldf_hor   )   nldf = 4      ! horizontal (no rotation) 
     188            IF ( ln_dynldf_iso   )   ierr = 2      ! isoneutral (   rotation) 
     189         ENDIF 
     190         IF ( ln_zps ) THEN             ! z-coordinate 
     191            IF ( ln_dynldf_level )   ierr = 1      ! iso-level not allowed  
     192            IF ( ln_dynldf_hor   )   nldf = 4      ! horizontal (no rotation) 
     193            IF ( ln_dynldf_iso   )   ierr = 2      ! isoneutral (   rotation) 
     194         ENDIF 
     195         IF ( ln_sco ) THEN             ! s-coordinate 
     196            IF ( ln_dynldf_level )   nldf = 4      ! iso-level  (no rotation) 
     197            IF ( ln_dynldf_hor   )   nldf = 5      ! horizontal (   rotation) 
     198            IF ( ln_dynldf_iso   )   ierr = 2      ! isoneutral (   rotation) 
     199         ENDIF 
     200      ENDIF 
     201 
    171202      IF( lk_esopa )                 nldf = -1     ! esopa test 
    172203 
     
    179210      IF(lwp) THEN 
    180211         WRITE(numout,*) 
     212         IF( nldf == -2 )   WRITE(numout,*) '              neither laplacian nor bilaplacian schemes used' 
    181213         IF( nldf == -1 )   WRITE(numout,*) '              ESOPA test All scheme used' 
    182214         IF( nldf ==  0 )   WRITE(numout,*) '              laplacian operator' 
    183          IF( nldf ==  1 )   WRITE(numout,*) '              Rotated laplacian operator' 
     215         IF( nldf ==  1 )   WRITE(numout,*) '              rotated laplacian operator' 
    184216         IF( nldf ==  2 )   WRITE(numout,*) '              bilaplacian operator' 
    185          IF( nldf ==  3 )   WRITE(numout,*) '              Rotated bilaplacian' 
     217         IF( nldf ==  3 )   WRITE(numout,*) '              rotated bilaplacian' 
     218         IF( nldf ==  4 )   WRITE(numout,*) '              laplacian and bilaplacian operators' 
     219         IF( nldf ==  5 )   WRITE(numout,*) '              rotated laplacian and bilaplacian operators' 
    186220      ENDIF 
    187221      ! 
  • branches/DEV_r1784_mid_year_merge_2010/NEMO/OPA_SRC/DYN/dynldf_lap.F90

    r1152 r1954  
    7878      IF( kt == nit000 ) THEN 
    7979         IF(lwp) WRITE(numout,*) 
    80          IF(lwp) WRITE(numout,*) 'dyn_ldf : iso-level harmonic (laplacien) operator' 
     80         IF(lwp) WRITE(numout,*) 'dyn_ldf : iso-level harmonic (laplacian) operator' 
    8181         IF(lwp) WRITE(numout,*) '~~~~~~~ ' 
    8282      ENDIF 
  • branches/DEV_r1784_mid_year_merge_2010/NEMO/OPA_SRC/LDF/ldfdyn.F90

    r1601 r1954  
    6767      NAMELIST/namdyn_ldf/ ln_dynldf_lap  , ln_dynldf_bilap,                  & 
    6868         &                 ln_dynldf_level, ln_dynldf_hor  , ln_dynldf_iso,   & 
    69          &                 rn_ahm_0       , rn_ahmb_0 
     69         &                 rn_ahm_0       , rn_ahmb_0      , rn_ahm_0_blp 
    7070      !!---------------------------------------------------------------------- 
    7171 
     
    7878         WRITE(numout,*) '~~~~~~~' 
    7979         WRITE(numout,*) '   Namelist nam_dynldf : set lateral mixing parameters' 
    80          WRITE(numout,*) '      laplacian operator          ln_dynldf_lap   = ', ln_dynldf_lap 
    81          WRITE(numout,*) '      bilaplacian operator        ln_dynldf_bilap = ', ln_dynldf_bilap 
    82          WRITE(numout,*) '      iso-level                   ln_dynldf_level = ', ln_dynldf_level 
    83          WRITE(numout,*) '      horizontal (geopotential)   ln_dynldf_hor   = ', ln_dynldf_hor 
    84          WRITE(numout,*) '      iso-neutral                 ln_dynldf_iso   = ', ln_dynldf_iso 
    85          WRITE(numout,*) '      horizontal eddy viscosity   rn_ahm_0        = ', rn_ahm_0 
    86          WRITE(numout,*) '      background viscosity        rn_ahmb_0       = ', rn_ahmb_0 
    87       ENDIF 
    88  
    89       ahm0  = rn_ahm_0                  ! OLD namelist variables defined from DOCTOR namelist variables 
    90       ahmb0 = rn_ahmb_0 
     80         WRITE(numout,*) '      laplacian operator                      ln_dynldf_lap   = ', ln_dynldf_lap 
     81         WRITE(numout,*) '      bilaplacian operator                    ln_dynldf_bilap = ', ln_dynldf_bilap 
     82         WRITE(numout,*) '      iso-level                               ln_dynldf_level = ', ln_dynldf_level 
     83         WRITE(numout,*) '      horizontal (geopotential)               ln_dynldf_hor   = ', ln_dynldf_hor 
     84         WRITE(numout,*) '      iso-neutral                             ln_dynldf_iso   = ', ln_dynldf_iso 
     85         WRITE(numout,*) '      horizontal laplacian eddy viscosity     rn_ahm_0        = ', rn_ahm_0 
     86         WRITE(numout,*) '      background viscosity                    rn_ahmb_0       = ', rn_ahmb_0 
     87         WRITE(numout,*) '      horizontal bilaplacian eddy viscosity   rn_ahm_0        = ', rn_ahm_0 
     88 
     89      ENDIF 
     90 
     91      ahm0     = rn_ahm_0                  ! OLD namelist variables defined from DOCTOR namelist variables 
     92      ahmb0    = rn_ahmb_0 
     93      ahm0_blp = rn_ahm_0_blp 
    9194 
    9295      ! ... check of lateral diffusive operator on tracers 
     
    117120      IF( ln_dynldf_bilap ) THEN 
    118121         IF(lwp) WRITE(numout,*) '   biharmonic momentum diffusion' 
    119          IF( ahm0 > 0 .AND. .NOT. lk_esopa )   CALL ctl_stop( 'The horizontal viscosity coef. ahm0 must be negative' ) 
     122         IF( ahm0_blp == 0.0 ) ahm0_blp = ahm0       ! Old namelist method: bilap specified with ahm0 
     123         IF( .NOT. ln_dynldf_lap ) ahm0 = ahm0_blp   ! Allow spatially varying coefs, which use ahm0 as input 
     124         IF( ahm0_blp > 0 .AND. .NOT. lk_esopa )   CALL ctl_stop( 'The horizontal viscosity coef. ahm0 must be negative' ) 
    120125      ELSE 
    121126         IF(lwp) WRITE(numout,*) '   harmonic momentum diff. (default)' 
  • branches/DEV_r1784_mid_year_merge_2010/NEMO/OPA_SRC/LDF/ldfdyn_c1d.h90

    r1152 r1954  
    1717      !! ** Method  :   1D eddy viscosity coefficients ( depth ) 
    1818      !!      ahm3, ahm4 never used 
    19       !!      biharmonic or harmonic operator : ahm1=ahm2 defined at T-level 
     19      !!      harmonic   operator : ahm1 defined at T-level 
     20      !!      biharmonic operator : ahm2 defined at T-level 
    2021      !!      isopycnal or geopotential harmonic operator 
    2122      !!                                      : ahm1 defined at T-level 
     
    2728 
    2829      !! * Local variables 
    29       REAL(wp) ::   zdam, zwam, zm00, zm01, zmhf, zmhs 
     30      REAL(wp) ::    zdam,  zwam,  zm00,  zm01,  zmhf,  zmhs 
     31      REAL(wp) ::   zdam2, zwam2, zm200, zm201, zmh2f, zmh2s 
    3032      REAL(wp) ::   zahmf, zahms 
    3133      !!---------------------------------------------------------------------- 
     
    3638      IF(lwp) WRITE(numout,*) 
    3739 
    38       ! Set ahm1=ahm2   (always at t-level) 
     40      ! Set ahm1 for laplacian     (always at t-level) 
    3941      ! ============= 
    4042      ! (USER: modify ahm1 following your desiderata) 
     
    5355      zmhs = zahms-zmhf * zm00 
    5456 
    55       ! set ahm1=ahm2 at T-level 
     57      ! Set ahm2 for bilaplacian   (always at t-level) 
     58      ! ============= 
     59      ! (USER: modify ahm2 following your desiderata) 
     60 
     61      ! initialization of the profile 
     62      ! ahms, ahmf: surface and bottom values 
     63      zahm2s = ahm0_blp 
     64      zahm2f = ahm0_blp/4. 
     65      ! zdam, zwam: depth of the inflection pt and width of inflection 
     66      zdam2  = -300. 
     67      zwam2  =  300. 
     68      ! computation coefficients 
     69      zm200 = TANH( (0-zdam2)/zwam2 ) 
     70      zm201 = TANH( (-fsdept(1,1,jpk)-zdam2)/zwam2 ) 
     71      zmh2f = (zahm2s-zahm2f)/(zm200-zm201) 
     72      zmh2s = zahm2s-zmh2f * zm00 
     73 
     74 
     75      ! set ahm1 and ahm2 at T-level 
    5676      DO jk = 1, jpk 
    57          ahm1(jk) = zmhs + zmhf * TANH( (-fsdept(1,1,jk)-zdam) / zwam ) 
    58          ahm2(jk) = ahm1(jk) 
     77         ahm1(jk) = zmhs  + zmhf  * TANH( (-fsdept(1,1,jk)-zdam ) / zwam ) 
     78         ahm2(jk) = zmh2s + zmh2f * TANH( (-fsdept(1,1,jk)-zdam2) / zwam2 ) 
    5979      END DO 
    6080 
     
    6282      IF(lwp .AND. ld_print ) THEN 
    6383         WRITE(numout,*) 
    64          WRITE(numout,*) '         ahm profile : ' 
     84         WRITE(numout,*) '         ahm profile (laplacian): ' 
    6585         WRITE(numout,*) 
    6686         WRITE(numout,9100) 
    6787         DO jk = 1, jpk 
    6888            WRITE(numout,9110) jk, ahm1(jk), fsdept(1,1,jk) 
     89         END DO 
     90         WRITE(numout,*) 
     91         WRITE(numout,*) '         ahm profile (bilaplacian): ' 
     92         WRITE(numout,*) 
     93         WRITE(numout,9100) 
     94         DO jk = 1, jpk 
     95            WRITE(numout,9110) jk, ahm2(jk), fsdept(1,1,jk) 
    6996         END DO 
    7097      ENDIF 
  • branches/DEV_r1784_mid_year_merge_2010/NEMO/OPA_SRC/LDF/ldfdyn_c2d.h90

    r1694 r1954  
    2727      !!           iso-model level : ahm3, ahm4 not used 
    2828      !! 
    29       !!       biharmonic operator : ahm1 is defined at u-point 
    30       !!                             ahm2 is defined at v-point 
    31       !!                           : ahm3, ahm4 not used 
     29      !!       biharmonic operator : ahm3 is defined at u-point 
     30      !!                             ahm4 is defined at v-point 
     31      !!                           : ahm1, ahm2 not used 
    3232      !! 
    3333      !!---------------------------------------------------------------------- 
     
    102102         IF(lwp) WRITE(numout,*) '              maximum grid-spacing = ', zd_max, ' maximum value for ahm = ', ahm0 
    103103 
    104          za00 = ahm0 / ( zd_max * zd_max * zd_max ) 
     104         za00 = ahm0_blp / ( zd_max * zd_max * zd_max ) 
    105105         DO jj = 1, jpj 
    106106            DO ji = 1, jpi 
  • branches/DEV_r1784_mid_year_merge_2010/NEMO/OPA_SRC/LDF/ldfdyn_c3d.h90

    r1694 r1954  
    122122         IF(lwp) WRITE(numout,*) '              maximum grid-spacing = ', zd_max, ' maximum value for ahm = ', ahm0 
    123123 
    124          za00 = ahm0 / ( zd_max * zd_max * zd_max ) 
     124         za00 = ahm0_blp / ( zd_max * zd_max * zd_max ) 
    125125         DO jj = 1, jpj 
    126126            DO ji = 1, jpi 
  • branches/DEV_r1784_mid_year_merge_2010/NEMO/OPA_SRC/LDF/ldfdyn_oce.F90

    r1601 r1954  
    1717   LOGICAL , PUBLIC ::   ln_dynldf_hor   = .TRUE.      !: horizontal (geopotential) direction 
    1818   LOGICAL , PUBLIC ::   ln_dynldf_iso   = .FALSE.     !: iso-neutral direction 
    19    REAL(wp), PUBLIC ::   rn_ahm_0        = 40000._wp   !: lateral eddy viscosity (m2/s) 
    20    REAL(wp), PUBLIC ::   rn_ahmb_0       =     0._wp   !: lateral background eddy viscosity (m2/s) 
     19   REAL(wp), PUBLIC ::   rn_ahm_0        = 40000._wp   !: lateral laplacian eddy viscosity (m2/s) 
     20   REAL(wp), PUBLIC ::   rn_ahmb_0       =     0._wp   !: lateral laplacian background eddy viscosity (m2/s) 
     21   REAL(wp), PUBLIC ::   rn_ahm_0_blp    =     0._wp   !: lateral bilaplacian eddy viscosity (m4/s) 
    2122 
    22    REAL(wp), PUBLIC ::   ahm0, ahmb0                 ! OLD namelist names 
     23   REAL(wp), PUBLIC ::   ahm0, ahmb0, ahm0_blp       ! OLD namelist names 
    2324 
    2425#if defined key_dynldf_c3d 
  • branches/DEV_r1784_mid_year_merge_2010/NEMO/OPA_SRC/LDF/ldfdyn_substitute.h90

    r1152 r1954  
    1010   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
    1111   !!---------------------------------------------------------------------- 
     12   !! 
     13   !! fsahmt, fsahmf - used for laplaian operator only 
     14   !! fsahmu, fsahmv - used for bilaplacian operator only 
     15   !! 
    1216#if defined key_dynldf_c3d 
    1317!   ' key_dynldf_c3d' :                  3D coefficient 
     
    2630#  define   fsahmt(i,j,k)    ahm1(k) 
    2731#  define   fsahmf(i,j,k)    ahm1(k) 
    28 #  define   fsahmu(i,j,k)    ahm1(k) 
    29 #  define   fsahmv(i,j,k)    ahm1(k) 
     32#  define   fsahmu(i,j,k)    ahm2(k) 
     33#  define   fsahmv(i,j,k)    ahm2(k) 
    3034#else 
    3135!   default option :               Constant coefficient 
    3236#  define   fsahmt(i,j,k)   ahm0 
    3337#  define   fsahmf(i,j,k)   ahm0 
    34 #  define   fsahmu(i,j,k)   ahm0 
    35 #  define   fsahmv(i,j,k)   ahm0 
     38#  define   fsahmu(i,j,k)   ahm0_blp 
     39#  define   fsahmv(i,j,k)   ahm0_blp 
    3640#endif 
Note: See TracChangeset for help on using the changeset viewer.