Changeset 9551


Ignore:
Timestamp:
2018-05-04T16:52:08+02:00 (2 years ago)
Author:
jchanut
Message:

Remove tracer horizontal diffusion in test case + correct interfaces interpolation after understanding it is related to ORCA2 edited scale factors

Location:
branches/2018/dev_r8864_nemo_v3_6_ZTILDE/NEMOGCM
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/2018/dev_r8864_nemo_v3_6_ZTILDE/NEMOGCM/CONFIG/COMODO_IW/EXP00/namelist_cfg

    r9530 r9551  
    337337!---------------------------------------------------------------------------------- 
    338338   !                       !  Operator type: 
    339    ln_traldf_lap    =  .true.   !  laplacian operator 
     339   ln_traldf_lap    =  .false.  !  laplacian operator 
    340340   ln_traldf_bilap  =  .false.  !  bilaplacian operator 
    341341   !                       !  Direction of action: 
    342342   ln_traldf_level  =  .false.  !  iso-level 
    343    ln_traldf_hor    =  .true.  !  horizontal (geopotential)   (needs "key_ldfslp" when ln_sco=T) 
     343   ln_traldf_hor    =  .true.   !  horizontal (geopotential)   (needs "key_ldfslp" when ln_sco=T) 
    344344   ln_traldf_iso    =  .false.  !  iso-neutral                 (needs "key_ldfslp") 
    345345   ln_traldf_grif   =  .false.  !  use griffies triads 
  • branches/2018/dev_r8864_nemo_v3_6_ZTILDE/NEMOGCM/CONFIG/cfg.txt

    r9545 r9551  
    1111GYRE OPA_SRC 
    1212ORCA2_LIM OPA_SRC LIM_SRC_2 NST_SRC 
    13 ORCA2LIM3_16 OPA_SRC LIM_SRC_3 NST_SRC 
    14 RIDGE OPA_SRC 
    1513COMODO_IW OPA_SRC 
    16 ORCA2LIM3_LONG OPA_SRC LIM_SRC_3 NST_SRC 
  • branches/2018/dev_r8864_nemo_v3_6_ZTILDE/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90

    r9545 r9551  
    462462               DO jj = 2, jpjm1 
    463463                  DO ji = fs_2, fs_jpim1   ! vector opt. 
    464                      tilde_e3t_a(ji,jj,jk) =   & 
    465                     -(  e2u(ji,jj)*fse3u(ji,jj,jk) * ztu(ji,jj,jk) - e2u(ji-1,jj  )*fse3u(ji-1,jj  ,jk) * ztu(ji-1,jj  ,jk)       & 
    466                       + e1v(ji,jj)*fse3v(ji,jj,jk) * ztv(ji,jj,jk) - e1v(ji  ,jj-1)*fse3v(ji  ,jj-1,jk) * ztv(ji  ,jj-1,jk)  )    & 
    467                      / ( e1t(ji,jj) * e2t(ji,jj) ) 
     464                     tilde_e3t_a(ji,jj,jk) =   tilde_e3t_a(ji,jj,jk) & 
     465                     & -(  e2u(ji,jj)*fse3u(ji,jj,jk) * ztu(ji,jj,jk) - e2u(ji-1,jj  )*fse3u(ji-1,jj  ,jk) * ztu(ji-1,jj  ,jk)       & 
     466                      + e1v(ji,jj)*fse3v(ji,jj,jk) * ztv(ji,jj,jk) - e1v(ji  ,jj-1)*fse3v(ji  ,jj-1,jk) * ztv(ji  ,jj-1,jk)  )    & 
     467                     & / ( e1t(ji,jj) * e2t(ji,jj) ) 
    468468                  END DO 
    469469               END DO 
     
    677677      ENDIF 
    678678 
    679       IF((ln_vvl_ztilde .OR. ln_vvl_layer).AND.(.NOT.ll_do_bclinic) ) THEN 
     679      IF(((ln_vvl_ztilde.AND.(.NOT.ln_vvl_ztilde_as_zstar)) .OR. ln_vvl_layer).AND.(.NOT.ll_do_bclinic) ) THEN 
    680680         zhdiv(:,:) = 0. 
    681681         DO jk = 1, jpkm1 
     
    691691 
    692692         DO jk = 1, jpkm1 
    693             tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) - z2dt * fse3t_n(:,:,jk) * &  
     693            tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) - tildemask(:,:) * z2dt * fse3t_n(:,:,jk) * &  
    694694                                  & (hdivn(:,:,jk) - hdivb(:,:,jk) - zhdiv(:,:)) 
    695695         END DO 
    696696         DO jk = 1, jpkm1 
    697             fse3t_a(:,:,jk) = fse3t_a(:,:,jk) - z2dt * fse3t_n(:,:,jk) * &  
     697            fse3t_a(:,:,jk) = fse3t_a(:,:,jk) - tildemask(:,:) * z2dt * fse3t_n(:,:,jk) * &  
    698698                                  & (hdivn(:,:,jk) - hdivb(:,:,jk) - zhdiv(:,:)) 
    699699         END DO 
     
    11571157      INTEGER ::   jkbot                                               ! bottom level 
    11581158      LOGICAL ::   l_is_orca                                           ! local logical 
    1159       REAL(wp) :: zmin, zdo, zup, ztap 
     1159      REAL(wp) :: zmin, zdo, zup, ztap, zsmall 
    11601160      REAL(wp), POINTER, DIMENSION(:,:)   :: zs                        ! Surface interface depth anomaly 
    11611161      REAL(wp), POINTER, DIMENSION(:,:,:) :: zw                        ! Interface depth anomaly 
     
    11671167 
    11681168  
    1169       nmet=1  
    11701169!      nmet=0 ! Original method (Surely wrong) 
    1171 !      nmet=1 ! Interface interpolation 
    1172 !      nmet=2 ! Internal interfaces interpolation only, spread barotropic increment 
    1173       ztap = 0.1_wp ! Minimum fraction of T-point thickness at cell interfaces 
     1170!      nmet= 1 ! Interface interpolation 
     1171      nmet=2 ! Internal interfaces interpolation only, spread barotropic increment 
     1172! Note that we kept surface weighted interpolation for barotropic increment to be compliant 
     1173! with what is done in surface pressure module. 
     1174 
     1175      ztap = 0._wp ! Minimum fraction of T-point thickness at cell interfaces 
     1176      zsmall = 1e-3_wp 
    11741177 
    11751178      IF ( (nmet==1).OR.(nmet==2) ) THEN 
     
    11831186            zw(:,:,:) =  0._wp     
    11841187            ! 
    1185             DO jj = 1, jpj 
    1186                DO ji = 1, jpi 
    1187                   jkbot = mbkt(ji,jj) 
    1188                   DO jk=jkbot,1,-1 
    1189                      zw(ji,jj,jk) = zw(ji,jj,jk+1) - pe3_in(ji,jj,jk) + e3t_0(ji,jj,jk) 
    1190                   END DO 
    1191                END DO 
     1188            DO jk=2,jpk 
     1189               zw(:,:,jk) = zw(:,:,jk-1) + pe3_in(:,:,jk-1)*tmask(:,:,jk-1) 
    11921190            END DO  
    1193             ! 
     1191            ! Interface depth anomalies: 
     1192            DO jk=1,jpkm1 
     1193               zw(:,:,jk) = zw(:,:,jk) - zw(:,:,jpk) + ht_0(:,:) 
     1194            END DO 
     1195            zw(:,:,jpk) = ht_0(:,:) 
    11941196            ! 
    11951197            IF (nmet==2) THEN        ! Consider "internal" interfaces only 
    11961198               zs(:,:) = - zw(:,:,1) ! Save surface anomaly (ssh) 
    11971199               ! 
    1198                zw(:,:,:) = 0._wp 
    11991200               DO jj = 1, jpj 
    12001201                  DO ji = 1, jpi 
    1201                      jkbot = mbkt(ji,jj) 
    1202                      DO jk=jkbot,1,-1 
    1203                         zw(ji,jj,jk) = zw(ji,jj,jk+1) - ( pe3_in(ji,jj,jk)                     & 
     1202                     DO jk=1,jpk 
     1203                        zw(ji,jj,jk) = (zw(ji,jj,jk) + zs(ji,jj))                                          & 
    12041204                                     & * ht_0(ji,jj) / (ht_0(ji,jj) + zs(ji,jj) + 1._wp - tmask(ji,jj,1))  & 
    1205                                      & - e3t_0(ji,jj,jk)) * tmask(ji,jj,jk) 
     1205                                     & * tmask(ji,jj,jk) 
    12061206                     END DO 
    12071207                  END DO 
     
    12361236                  ! Correction at last level: 
    12371237                  jkbot = mbku(ji,jj) 
    1238                   pe3_out(ji,jj,jkbot) = -0.5_wp * umask(ji,jj,jkbot) * r1_e12u(ji,jj) & 
    1239                         &                    * (   e12t(ji  ,jj) * zw(ji  ,jj,jkbot)   & 
    1240                         &                        + e12t(ji+1,jj) * zw(ji+1,jj,jkbot)   ) 
    1241                   ! 
    1242                   ! If there is a step, taper bottom interface: 
    1243                   IF (hu_0(ji,jj) < 0.5_wp * ( ht_0(ji,jj) + ht_0(ji+1,jj) ) ) THEN 
    1244                      IF ( ht_0(ji+1,jj) < ht_0(ji,jj) ) THEN 
    1245 !                        zmin = ztap * pe3_in(ji+1,jj,jkbot) 
    1246                         zmin = ztap * (-zw(ji+1,jj,jkbot)+e3t_0(ji+1,jj,jkbot)) 
    1247                      ELSE 
    1248 !                        zmin = ztap * pe3_in(ji  ,jj,jkbot) 
    1249                         zmin = ztap * (-zw(ji,jj,jkbot)+e3t_0(ji,jj,jkbot)) 
     1238                  zdo   = hu_0(ji,jj) 
     1239                  DO jk=jkbot,1,-1 
     1240                     zup = 0.5_wp * ( zw(ji  ,jj,jk) + zw(ji+1,jj,jk) )  
     1241                     ! 
     1242                     ! If there is a step, taper bottom interface: 
     1243                     IF ((hu_0(ji,jj) < 0.5_wp * ( ht_0(ji,jj) + ht_0(ji+1,jj) ) ).AND.(zup>zdo)) THEN 
     1244                        IF ( ht_0(ji+1,jj) < ht_0(ji,jj) ) THEN 
     1245!                           zmin = ztap * pe3_in(ji+1,jj,jk) 
     1246                           zmin = ztap * (zw(ji+1,jj,jk+1)-zw(ji+1,jj,jk)) 
     1247                        ELSE 
     1248!                           zmin = ztap * pe3_in(ji  ,jj,jk) 
     1249                           zmin = ztap * (zw(ji  ,jj,jk+1)-zw(ji  ,jj,jk)) 
     1250                        ENDIF 
     1251                        zup = MIN(zup, zdo-zmin) 
    12501252                     ENDIF 
    1251                      zmin = -e3u_0(ji,jj,jkbot) + zmin 
    1252                      pe3_out(ji,jj,jkbot) = MAX(pe3_out(ji,jj,jkbot), zmin) 
    1253                   ENDIF 
    1254                   ! 
    1255                   zdo =  -pe3_out(ji,jj,jkbot) 
    1256                   DO jk=jkbot-1,1,-1 
    1257                      zup = 0.5_wp * umask(ji,jj,jk) * r1_e12u(ji  ,jj) & 
    1258                               &                     *(   e12t(ji  ,jj) * zw(ji  ,jj,jk)  & 
    1259                               &                         +e12t(ji+1,jj) * zw(ji+1,jj,jk)  ) 
    1260                      pe3_out(ji,jj,jk) = zdo - zup   
    1261                      zdo =  zdo - pe3_out(ji,jj,jk) 
     1253                     zup = MIN(zup, zdo-zsmall) 
     1254                     pe3_out(ji,jj,jk) = zdo - zup - e3u_0(ji,jj,jk) 
     1255                     zdo = zup 
    12621256                  END DO 
    12631257               END DO 
     
    13091303                  ! Correction at last level: 
    13101304                  jkbot = mbkv(ji,jj) 
    1311                   pe3_out(ji,jj,jkbot) = -0.5_wp * vmask(ji,jj,jkbot) * r1_e12v(ji,jj) & 
    1312                         &                    * (   e12t(ji,jj  ) * zw(ji,jj  ,jkbot)   & 
    1313                         &                        + e12t(ji,jj+1) * zw(ji,jj+1,jkbot)   ) 
    1314                   ! 
    1315                   ! If there is a step, taper bottom interface: 
    1316                   IF (hv_0(ji,jj) < 0.5_wp * ( ht_0(ji,jj) + ht_0(ji,jj+1) ) ) THEN 
    1317                      IF ( ht_0(ji,jj+1) < ht_0(ji,jj) ) THEN 
    1318 !                        zmin = ztap * pe3_in(ji,jj+1,jkbot) 
    1319                         zmin = ztap * (-zw(ji,jj+1,jkbot)+e3t_0(ji,jj+1,jkbot)) 
    1320                      ELSE 
    1321 !                        zmin = ztap * pe3_in(ji,jj  ,jkbot) 
    1322                         zmin = ztap * (-zw(ji,jj,jkbot)+e3t_0(ji,jj,jkbot)) 
     1305                  zdo   = hv_0(ji,jj) 
     1306                  DO jk=jkbot,1,-1 
     1307                     zup = 0.5_wp * ( zw(ji,jj  ,jk) + zw(ji,jj+1,jk) ) 
     1308                     ! 
     1309                     ! If there is a step, taper bottom interface: 
     1310                     IF ((hv_0(ji,jj) < 0.5_wp * ( ht_0(ji,jj) + ht_0(ji,jj+1) ) ).AND.(zup>zdo)) THEN 
     1311                        IF ( ht_0(ji,jj+1) < ht_0(ji,jj) ) THEN 
     1312!                           zmin = ztap * pe3_in(ji,jj+1,jk) 
     1313                           zmin = ztap * (zw(ji,jj+1,jk+1)-zw(ji,jj+1,jk)) 
     1314                        ELSE 
     1315!                           zmin = ztap * pe3_in(ji  ,jj,jk) 
     1316                           zmin = ztap * (zw(ji,jj  ,jk+1)-zw(ji,jj  ,jk)) 
     1317                        ENDIF 
     1318                        zup = MIN(zup, zdo-zmin)                         
    13231319                     ENDIF 
    1324                      zmin = -e3v_0(ji,jj,jkbot) + zmin 
    1325                      pe3_out(ji,jj,jkbot) = MAX(pe3_out(ji,jj,jkbot), zmin) 
    1326                   ENDIF 
    1327                   ! 
    1328                   zdo =  -pe3_out(ji,jj,jkbot) 
    1329                   DO jk=jkbot-1,1,-1 
    1330                      zup = 0.5_wp * vmask(ji,jj,jk) * r1_e12v(ji,jj  ) & 
    1331                               &                     *  ( e12t(ji,jj  ) * zw(ji,jj  ,jk) & 
    1332                               &                         +e12t(ji,jj+1) * zw(ji,jj+1,jk) ) 
    1333                      ! 
    1334                      pe3_out(ji,jj,jk) = zdo - zup  
    1335                      zdo =  zdo - pe3_out(ji,jj,jk) 
     1320                     zup = MIN(zup, zdo-zsmall) 
     1321                     pe3_out(ji,jj,jk) = zdo - zup - e3v_0(ji,jj,jk) 
     1322                     zdo = zup 
    13361323                  END DO 
    13371324               END DO 
     
    13861373                  ! bottom correction: 
    13871374                  jkbot = MIN(mbku(ji,jj), mbku(ji,jj+1))  
    1388                   pe3_out(ji,jj,jkbot) = -0.25_wp * umask(ji,jj,jkbot) * umask(ji,jj+1,jkbot) * r1_e12f(ji,jj) & 
    1389                         &                         * (  e12t(ji  ,jj  ) * zw(ji  ,jj  ,jkbot)   & 
    1390                         &                            + e12t(ji+1,jj  ) * zw(ji+1,jj  ,jkbot)   & 
    1391                         &                            + e12t(ji  ,jj+1) * zw(ji  ,jj+1,jkbot)   & 
    1392                         &                            + e12t(ji+1,jj+1) * zw(ji+1,jj+1,jkbot)   ) 
    1393                   ! 
    1394                   ! If there is a step, taper bottom interface: 
    1395                   IF (hf_0(ji,jj) < 0.5_wp * ( hu_0(ji,jj  ) + hu_0(ji,jj+1) ) ) THEN 
    1396                      IF ( hu_0(ji,jj+1) < hu_0(ji,jj) ) THEN 
    1397                         IF ( ht_0(ji+1,jj+1) < ht_0(ji  ,jj+1) ) THEN 
    1398 !                           zmin = ztap * pe3_in(ji+1,jj+1,jkbot) 
    1399                            zmin = ztap * (-zw(ji+1,jj+1,jkbot)+e3t_0(ji+1,jj+1,jkbot)) 
     1375                  zdo = hf_0(ji,jj) 
     1376                  DO jk=jkbot,1,-1 
     1377                     zup =  0.25_wp * (  zw(ji  ,jj  ,jk)  &  
     1378                           &           + zw(ji+1,jj  ,jk)  &  
     1379                           &           + zw(ji  ,jj+1,jk)  &  
     1380                           &           + zw(ji+1,jj+1,jk)  ) 
     1381                     ! 
     1382                     ! If there is a step, taper bottom interface: 
     1383                     IF ((hf_0(ji,jj) < 0.5_wp * ( hu_0(ji,jj  ) + hu_0(ji,jj+1) ) ).AND.(zup>zdo)) THEN 
     1384                        IF ( hu_0(ji,jj+1) < hu_0(ji,jj) ) THEN 
     1385                           IF ( ht_0(ji+1,jj+1) < ht_0(ji  ,jj+1) ) THEN 
     1386!                              zmin = ztap * pe3_in(ji+1,jj+1,jk) 
     1387                              zmin = ztap * (zw(ji+1,jj+1,jk+1)-zw(ji+1,jj+1,jk)) 
     1388                           ELSE 
     1389!                              zmin = ztap * pe3_in(ji  ,jj+1,jk) 
     1390                              zmin = ztap * (zw(ji  ,jj+1,jk+1)-zw(ji  ,jj+1,jk)) 
     1391                           ENDIF 
    14001392                        ELSE 
    1401 !                           zmin = ztap * pe3_in(ji  ,jj+1,jkbot) 
    1402                            zmin = ztap * (-zw(ji,jj+1,jkbot)+e3t_0(ji,jj+1,jkbot)) 
     1393                           IF ( ht_0(ji+1,jj  ) < ht_0(ji  ,jj  ) ) THEN 
     1394!                              zmin = ztap * pe3_in(ji+1,jj  ,jk) 
     1395                              zmin = ztap * (zw(ji+1,jj  ,jk+1)-zw(ji+1,jj  ,jk)) 
     1396                           ELSE 
     1397!                              zmin = ztap * pe3_in(ji  ,jj  ,jk) 
     1398                              zmin = ztap * (zw(ji  ,jj  ,jk+1)-zw(ji  ,jj  ,jk)) 
     1399                           ENDIF 
    14031400                        ENDIF 
    1404                      ELSE 
    1405                         IF ( ht_0(ji+1,jj  ) < ht_0(ji  ,jj  ) ) THEN 
    1406 !                           zmin = ztap * pe3_in(ji+1,jj  ,jkbot) 
    1407                            zmin = ztap * (-zw(ji+1,jj,jkbot)+e3t_0(ji+1,jj,jkbot)) 
    1408                         ELSE 
    1409 !                           zmin = ztap * pe3_in(ji  ,jj  ,jkbot) 
    1410                            zmin = ztap * (-zw(ji,jj,jkbot)+e3t_0(ji,jj,jkbot)) 
    1411                         ENDIF 
     1401                        zup = MIN(zup, zdo-zmin) 
    14121402                     ENDIF 
    1413                      zmin = -e3f_0(ji,jj,jkbot) + zmin 
    1414                      pe3_out(ji,jj,jkbot) = MAX(pe3_out(ji,jj,jkbot), zmin) 
    1415                   ENDIF 
    1416                   ! 
    1417                   zdo =  -pe3_out(ji,jj,jkbot) 
    1418                   DO jk=jkbot-1,1,-1 
    1419                      zup =  0.25_wp * umask(ji,jj,jk) * umask(ji,jj+1,jk) * r1_e12f(ji,jj) & 
    1420                            &        * (  e12t(ji  ,jj  ) * zw(ji  ,jj  ,jk)  &  
    1421                            &           + e12t(ji+1,jj  ) * zw(ji+1,jj  ,jk)  &  
    1422                            &           + e12t(ji  ,jj+1) * zw(ji  ,jj+1,jk)  &  
    1423                            &           + e12t(ji+1,jj+1) * zw(ji+1,jj+1,jk)  ) 
    1424                      pe3_out(ji,jj,jk) = zdo - zup  
     1403                     zup = MIN(zup, zdo-zsmall) 
    14251404                     ! 
    1426                      zdo =  zdo - pe3_out(ji,jj,jk)                                     
     1405                     pe3_out(ji,jj,jk) = zdo - zup - e3f_0(ji,jj,jk) 
     1406                     zdo = zup 
    14271407                  END DO 
    1428                   ! 
    1429                END DO 
    1430             END DO  
     1408               END DO 
     1409            END DO 
    14311410         ENDIF 
    14321411         ! 
     
    14911470 
    14921471   END SUBROUTINE dom_vvl_interpol 
     1472 
    14931473 
    14941474 
     
    26692649                  ztmpd = dsm(ji,jj) 
    26702650                  zh2   = ztmph * exp(-(gdepw_0(ji,jj,jk)-gdepw_0(ji,jj,i_int_bot(ji,jj)+1))/ztmpd) 
     2651                  zh2 = MAX(zh2,0.001_wp) ! Extend tolerance a bit for stability reasons (to be explored) 
    26712652                  zdiff = cush_max(gdepw_0(ji,jj,jk)-zwdw(ji,jj,jk), zh2 ) 
    26722653                  zwdw(ji,jj,jk) = MAX(zwdw(ji,jj,jk), gdepw_0(ji,jj,jk) - zdiff) 
Note: See TracChangeset for help on using the changeset viewer.