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

Changeset 1565


Ignore:
Timestamp:
2009-07-31T16:01:08+02:00 (15 years ago)
Author:
rblod
Message:

Use appropiate e3 for divergence computation and for sea-ice, see ticket #507

Location:
trunk/NEMO
Files:
4 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/LIM_SRC_2/limthd_2.F90

    r1559 r1565  
    1818   USE phycst          ! physical constants 
    1919   USE dom_oce         ! ocean space and time domain variables 
     20   USE domvvl          ! Variable volume 
    2021   USE lbclnk 
    2122   USE in_out_manager  ! I/O manager 
     
    217218             
    218219            !  energy needed to bring ocean surface layer until its freezing 
    219             qcmif  (ji,jj) =  rau0 * rcp * fse3t(ji,jj,1) * ( tfu(ji,jj) - sst_m(ji,jj) ) * ( 1 - zinda ) 
     220            qcmif  (ji,jj) =  rau0 * rcp * fse3t_m(ji,jj,1)   & 
     221                &          * ( tfu(ji,jj) - sst_m(ji,jj) ) * ( 1 - zinda ) 
    220222             
    221223            !  calculate oceanic heat flux. 
  • trunk/NEMO/LIM_SRC_3/limthd.F90

    r1465 r1565  
    1414   USE phycst          ! physical constants 
    1515   USE dom_oce         ! ocean space and time domain variables 
     16   USE domvvl          ! Variable volume 
    1617   USE lbclnk 
    1718   USE in_out_manager  ! I/O manager 
     
    241242            ! Energy needed to bring ocean surface layer until its freezing 
    242243            ! qcmif, limflx 
    243             qcmif  (ji,jj) =  rau0 * rcp * fse3t(ji,jj,1) * ( t_bo(ji,jj) - (sst_m(ji,jj) + rt0) ) * ( 1. - zinda ) 
     244            qcmif  (ji,jj) =  rau0 * rcp * fse3t_m(ji,jj,1)   & 
     245               &           * ( t_bo(ji,jj) - (sst_m(ji,jj) + rt0) ) * ( 1. - zinda ) 
    244246 
    245247            !  calculate oceanic heat flux (limthd_dh) 
  • trunk/NEMO/OPA_SRC/DOM/domzgr_substitute.h90

    r1438 r1565  
    4646#   define  fse3vw(i,j,k)  e3vw_1(i,j,k) 
    4747 
    48 #   define  fsdept_b(i,j,k)  (fsdept_0(i,j,k)*(1+sshb(i,j)*mut(i,j,k))) 
    49 #   define  fsdepw_b(i,j,k)  (fsdepw_0(i,j,k)*(1+sshb(i,j)*mut(i,j,k))) 
    50 #   define  fsde3w_b(i,j,k)  (fsde3w_0(i,j,k)*(1+sshb(i,j)*mut(i,j,k))-sshb(i,j)) 
    51 #   define  fse3t_b(i,j,k)   (fse3t_0(i,j,k)*(1+sshb(i,j)*mut(i,j,k))) 
    52 #   define  fse3u_b(i,j,k)   (fse3u_0(i,j,k)*(1+sshu_b(i,j)*muu(i,j,k))) 
    53 #   define  fse3v_b(i,j,k)   (fse3v_0(i,j,k)*(1+sshv_b(i,j)*muv(i,j,k))) 
    54 #   define  fse3f_b(i,j,k)   (fse3f_0(i,j,k)*(1+sshf_b(i,j)*muf(i,j,k))) 
    55 #   define  fse3w_b(i,j,k)   (fse3w_0(i,j,k)*(1+sshb(i,j)*mut(i,j,k))) 
    56 #   define  fse3uw_b(i,j,k)  (fse3uw_0(i,j,k)*(1+sshu_b(i,j)*muu(i,j,k))) 
    57 #   define  fse3vw_b(i,j,k)  (fse3vw_0(i,j,k)*(1+sshv_b(i,j)*muv(i,j,k))) 
     48#   define  fsdept_b(i,j,k)  (fsdept_0(i,j,k)*(1.+sshb(i,j)*mut(i,j,k))) 
     49#   define  fsdepw_b(i,j,k)  (fsdepw_0(i,j,k)*(1.+sshb(i,j)*mut(i,j,k))) 
     50#   define  fsde3w_b(i,j,k)  (fsde3w_0(i,j,k)*(1.+sshb(i,j)*mut(i,j,k))-sshb(i,j)) 
     51#   define  fse3t_b(i,j,k)   (fse3t_0(i,j,k)*(1.+sshb(i,j)*mut(i,j,k))) 
     52#   define  fse3u_b(i,j,k)   (fse3u_0(i,j,k)*(1.+sshu_b(i,j)*muu(i,j,k))) 
     53#   define  fse3v_b(i,j,k)   (fse3v_0(i,j,k)*(1.+sshv_b(i,j)*muv(i,j,k))) 
     54#   define  fse3f_b(i,j,k)   (fse3f_0(i,j,k)*(1.+sshf_b(i,j)*muf(i,j,k))) 
     55#   define  fse3w_b(i,j,k)   (fse3w_0(i,j,k)*(1.+sshb(i,j)*mut(i,j,k))) 
     56#   define  fse3uw_b(i,j,k)  (fse3uw_0(i,j,k)*(1.+sshu_b(i,j)*muu(i,j,k))) 
     57#   define  fse3vw_b(i,j,k)  (fse3vw_0(i,j,k)*(1.+sshv_b(i,j)*muv(i,j,k))) 
    5858 
    59 #   define  fsdept_n(i,j,k)  (fsdept_0(i,j,k)*(1+sshn(i,j)*mut(i,j,k))) 
    60 #   define  fsdepw_n(i,j,k)  (fsdepw_0(i,j,k)*(1+sshn(i,j)*mut(i,j,k))) 
    61 #   define  fsde3w_n(i,j,k)  (fsde3w_0(i,j,k)*(1+sshn(i,j)*mut(i,j,k))-sshn(i,j)) 
    62 #   define  fse3t_n(i,j,k)   (fse3t_0(i,j,k)*(1+sshn(i,j)*mut(i,j,k))) 
    63 #   define  fse3u_n(i,j,k)   (fse3u_0(i,j,k)*(1+sshu_n(i,j)*muu(i,j,k))) 
    64 #   define  fse3v_n(i,j,k)   (fse3v_0(i,j,k)*(1+sshv_n(i,j)*muv(i,j,k))) 
    65 #   define  fse3f_n(i,j,k)   (fse3f_0(i,j,k)*(1+sshf_n(i,j)*muf(i,j,k))) 
    66 #   define  fse3w_n(i,j,k)   (fse3w_0(i,j,k)*(1+sshn(i,j)*mut(i,j,k))) 
    67 #   define  fse3uw_n(i,j,k)  (fse3uw_0(i,j,k)*(1+sshu_n(i,j)*muu(i,j,k))) 
    68 #   define  fse3vw_n(i,j,k)  (fse3vw_0(i,j,k)*(1+sshv_n(i,j)*muv(i,j,k))) 
     59#   define  fsdept_n(i,j,k)  (fsdept_0(i,j,k)*(1.+sshn(i,j)*mut(i,j,k))) 
     60#   define  fsdepw_n(i,j,k)  (fsdepw_0(i,j,k)*(1.+sshn(i,j)*mut(i,j,k))) 
     61#   define  fsde3w_n(i,j,k)  (fsde3w_0(i,j,k)*(1.+sshn(i,j)*mut(i,j,k))-sshn(i,j)) 
     62#   define  fse3t_n(i,j,k)   (fse3t_0(i,j,k)*(1.+sshn(i,j)*mut(i,j,k))) 
     63#   define  fse3u_n(i,j,k)   (fse3u_0(i,j,k)*(1.+sshu_n(i,j)*muu(i,j,k))) 
     64#   define  fse3v_n(i,j,k)   (fse3v_0(i,j,k)*(1.+sshv_n(i,j)*muv(i,j,k))) 
     65#   define  fse3f_n(i,j,k)   (fse3f_0(i,j,k)*(1.+sshf_n(i,j)*muf(i,j,k))) 
     66#   define  fse3w_n(i,j,k)   (fse3w_0(i,j,k)*(1.+sshn(i,j)*mut(i,j,k))) 
     67#   define  fse3uw_n(i,j,k)  (fse3uw_0(i,j,k)*(1.+sshu_n(i,j)*muu(i,j,k))) 
     68#   define  fse3vw_n(i,j,k)  (fse3vw_0(i,j,k)*(1.+sshv_n(i,j)*muv(i,j,k))) 
    6969 
    70 #   define  fsdept_a(i,j,k)  (fsdept_0(i,j,k)*(1+ssha(i,j)*mut(i,j,k))) 
    71 #   define  fsdepw_a(i,j,k)  (fsdepw_0(i,j,k)*(1+ssha(i,j)*mut(i,j,k))) 
    72 #   define  fsde3w_a(i,j,k)  (fsde3w_0(i,j,k)*(1+ssha(i,j)*mut(i,j,k))-ssha(i,j)) 
    73 #   define  fse3t_a(i,j,k)   (fse3t_0(i,j,k)*(1+ssha(i,j)*mut(i,j,k))) 
    74 #   define  fse3u_a(i,j,k)   (fse3u_0(i,j,k)*(1+sshu_a(i,j)*muu(i,j,k))) 
    75 #   define  fse3v_a(i,j,k)   (fse3v_0(i,j,k)*(1+sshv_a(i,j)*muv(i,j,k))) 
    76 #   define  fse3f_a(i,j,k)   (fse3f_0(i,j,k)*(1+sshf_a(i,j)*muf(i,j,k))) 
    77 #   define  fse3w_a(i,j,k)   (fse3w_0(i,j,k)*(1+ssha(i,j)*mut(i,j,k))) 
    78 #   define  fse3uw_a(i,j,k)  (fse3uw_0(i,j,k)*(1+sshu_a(i,j)*muu(i,j,k))) 
    79 #   define  fse3vw_a(i,j,k)  (fse3vw_0(i,j,k)*(1+sshv_a(i,j)*muv(i,j,k))) 
     70#   define  fse3t_m(i,j,k)   (fse3t_0(i,j,k)*(1.+ssh_m(i,j)*mut(i,j,k))) 
     71 
     72#   define  fsdept_a(i,j,k)  (fsdept_0(i,j,k)*(1.+ssha(i,j)*mut(i,j,k))) 
     73#   define  fsdepw_a(i,j,k)  (fsdepw_0(i,j,k)*(1.+ssha(i,j)*mut(i,j,k))) 
     74#   define  fsde3w_a(i,j,k)  (fsde3w_0(i,j,k)*(1.+ssha(i,j)*mut(i,j,k))-ssha(i,j)) 
     75#   define  fse3t_a(i,j,k)   (fse3t_0(i,j,k)*(1.+ssha(i,j)*mut(i,j,k))) 
     76#   define  fse3u_a(i,j,k)   (fse3u_0(i,j,k)*(1.+sshu_a(i,j)*muu(i,j,k))) 
     77#   define  fse3v_a(i,j,k)   (fse3v_0(i,j,k)*(1.+sshv_a(i,j)*muv(i,j,k))) 
     78#   define  fse3f_a(i,j,k)   (fse3f_0(i,j,k)*(1.+sshf_a(i,j)*muf(i,j,k))) 
     79#   define  fse3w_a(i,j,k)   (fse3w_0(i,j,k)*(1.+ssha(i,j)*mut(i,j,k))) 
     80#   define  fse3uw_a(i,j,k)  (fse3uw_0(i,j,k)*(1.+sshu_a(i,j)*muu(i,j,k))) 
     81#   define  fse3vw_a(i,j,k)  (fse3vw_0(i,j,k)*(1.+sshv_a(i,j)*muv(i,j,k))) 
    8082 
    8183#else 
     
    114116#   define  fse3vw_n(i,j,k)  fse3vw_0(i,j,k) 
    115117 
     118#   define  fse3t_m(i,j,k)   fse3t_0(i,j,k) 
     119 
    116120#   define  fsdept_a(i,j,k)  fsdept_0(i,j,k) 
    117121#   define  fsdepw_a(i,j,k)  fsdepw_0(i,j,k) 
  • trunk/NEMO/OPA_SRC/DYN/sshwzv.F90

    r1564 r1565  
    1 MODULE wzvmod 
    2 !! MODULE sshwzv    
     1MODULE sshwzv    
    32   !!============================================================================== 
    43   !!                       ***  MODULE  sshwzv  *** 
     
    1716   USE sbc_oce         ! surface boundary condition: ocean 
    1817   USE domvvl          ! Variable volume 
     18   USE divcur          ! hor. divergence and curl      (div & cur routines) 
     19   USE cla_div         ! cross land: hor. divergence      (div_cla routine) 
    1920   USE iom             ! I/O library 
    2021   USE restart         ! only for lrst_oce 
     
    109110      ENDIF 
    110111 
    111       ! set time step size (Euler/Leapfrog) 
    112       z2dt = 2. * rdt  
    113       IF( neuler == 0 .AND. kt == nit000 ) z2dt =rdt 
    114  
    115       zraur = 1. / rauw 
    116  
    117       !                                           !------------------------------! 
    118       !                                           !   After Sea Surface Height   ! 
    119       !                                           !------------------------------! 
    120       zhdiv(:,:) = 0.e0 
    121       DO jk = 1, jpkm1                                 ! Horizontal divergence of barotropic transports 
    122         zhdiv(:,:) = zhdiv(:,:) + fse3t(:,:,jk) * hdivn(:,:,jk) 
    123       END DO 
    124  
    125       !                                                ! Sea surface elevation time stepping 
    126       ssha(:,:) = (  sshb(:,:) - z2dt * ( zraur * emp(:,:) + zhdiv(:,:) )  ) * tmask(:,:,1) 
    127  
    128 #if defined key_obc 
    129 # if defined key_agrif 
    130       IF ( Agrif_Root() ) THEN  
    131 # endif 
    132          ssha(:,:) = ssha(:,:) * obctmsk(:,:) 
    133          CALL lbc_lnk( ssha, 'T', 1. )  ! absolutly compulsory !! (jmm) 
    134 # if defined key_agrif 
    135       ENDIF 
    136 # endif 
    137 #endif 
    138  
    139       !                                                ! Sea Surface Height at u-,v- and f-points (vvl case only) 
    140       IF( lk_vvl ) THEN                                ! (required only in key_vvl case) 
    141          DO jj = 1, jpjm1 
    142             DO ji = 1, fs_jpim1   ! Vector Opt. 
    143                sshu_a(ji,jj) = 0.5  * umask(ji,jj,1) / ( e1u(ji  ,jj) * e2u(ji  ,jj) )                   & 
    144                   &                                  * ( e1t(ji  ,jj) * e2t(ji  ,jj) * ssha(ji  ,jj)     & 
    145                   &                                    + e1t(ji+1,jj) * e2t(ji+1,jj) * ssha(ji+1,jj) ) 
    146                sshv_a(ji,jj) = 0.5  * vmask(ji,jj,1) / ( e1v(ji,jj  ) * e2v(ji,jj  ) )                   & 
    147                   &                                  * ( e1t(ji,jj  ) * e2t(ji,jj  ) * ssha(ji,jj  )     & 
    148                   &                                    + e1t(ji,jj+1) * e2t(ji,jj+1) * ssha(ji,jj+1) ) 
    149                sshf_a(ji,jj) = 0.25 * umask(ji,jj,1) * umask (ji,jj+1,1)   &   ! Caution : fmask not used 
    150                   &                                  * ( ssha(ji  ,jj) + ssha(ji  ,jj+1)                 & 
    151                   &                                    + ssha(ji+1,jj) + ssha(ji+1,jj+1) ) 
    152             END DO 
    153          END DO 
    154          CALL lbc_lnk( sshu_a, 'U', 1. )               ! Boundaries conditions 
    155          CALL lbc_lnk( sshv_a, 'V', 1. ) 
    156          CALL lbc_lnk( sshf_a, 'F', 1. ) 
    157       ENDIF 
    158  
    159       !                                           !------------------------------! 
    160       !                                           !     Now Vertical Velocity    ! 
    161       !                                           !------------------------------! 
    162       !                                                ! integrate from the bottom the hor. divergence 
    163       DO jk = jpkm1, 1, -1 
    164          wn(:,:,jk) = wn(:,:,jk+1) -    fse3t_n(:,:,jk) * hdivn(:,:,jk)   & 
    165               &                    - (  fse3t_a(:,:,jk)                   & 
    166               &                       - fse3t_b(:,:,jk) ) * tmask(:,:,jk) / z2dt 
    167       END DO 
    168       ! 
    169       CALL iom_put( "woce", wn   )                     ! vert. current 
    170       CALL iom_put( "ssh" , sshn )                     ! sea surface height 
    171  
    172112      !                                           !------------------------------! 
    173113      !                                           !  Update Now Vertical coord.  ! 
     
    194134         hur(:,:) = umask(:,:,1) / ( hu(:,:) + 1.e0 - umask(:,:,1) ) 
    195135         hvr(:,:) = vmask(:,:,1) / ( hv(:,:) + 1.e0 - vmask(:,:,1) ) 
    196  
    197       ENDIF 
     136         ! 
     137      ENDIF 
     138 
     139                         CALL div_cur( kt )            ! Horizontal divergence & Relative vorticity 
     140      IF( n_cla == 1 )   CALL div_cla( kt )            ! Cross Land Advection (Update Hor. divergence) 
     141 
     142      ! set time step size (Euler/Leapfrog) 
     143      z2dt = 2. * rdt  
     144      IF( neuler == 0 .AND. kt == nit000 ) z2dt =rdt 
     145 
     146      zraur = 1. / rauw 
     147 
     148      !                                           !------------------------------! 
     149      !                                           !   After Sea Surface Height   ! 
     150      !                                           !------------------------------! 
     151      zhdiv(:,:) = 0.e0 
     152      DO jk = 1, jpkm1                                 ! Horizontal divergence of barotropic transports 
     153        zhdiv(:,:) = zhdiv(:,:) + fse3t(:,:,jk) * hdivn(:,:,jk) 
     154      END DO 
     155 
     156      !                                                ! Sea surface elevation time stepping 
     157      ssha(:,:) = (  sshb(:,:) - z2dt * ( zraur * emp(:,:) + zhdiv(:,:) )  ) * tmask(:,:,1) 
     158 
     159#if defined key_obc 
     160# if defined key_agrif 
     161      IF ( Agrif_Root() ) THEN  
     162# endif 
     163         ssha(:,:) = ssha(:,:) * obctmsk(:,:) 
     164         CALL lbc_lnk( ssha, 'T', 1. )  ! absolutly compulsory !! (jmm) 
     165# if defined key_agrif 
     166      ENDIF 
     167# endif 
     168#endif 
     169 
     170      !                                                ! Sea Surface Height at u-,v- and f-points (vvl case only) 
     171      IF( lk_vvl ) THEN                                ! (required only in key_vvl case) 
     172         DO jj = 1, jpjm1 
     173            DO ji = 1, fs_jpim1   ! Vector Opt. 
     174               sshu_a(ji,jj) = 0.5  * umask(ji,jj,1) / ( e1u(ji  ,jj) * e2u(ji  ,jj) )                   & 
     175                  &                                  * ( e1t(ji  ,jj) * e2t(ji  ,jj) * ssha(ji  ,jj)     & 
     176                  &                                    + e1t(ji+1,jj) * e2t(ji+1,jj) * ssha(ji+1,jj) ) 
     177               sshv_a(ji,jj) = 0.5  * vmask(ji,jj,1) / ( e1v(ji,jj  ) * e2v(ji,jj  ) )                   & 
     178                  &                                  * ( e1t(ji,jj  ) * e2t(ji,jj  ) * ssha(ji,jj  )     & 
     179                  &                                    + e1t(ji,jj+1) * e2t(ji,jj+1) * ssha(ji,jj+1) ) 
     180               sshf_a(ji,jj) = 0.25 * umask(ji,jj,1) * umask (ji,jj+1,1)   &   ! Caution : fmask not used 
     181                  &                                  * ( ssha(ji  ,jj) + ssha(ji  ,jj+1)                 & 
     182                  &                                    + ssha(ji+1,jj) + ssha(ji+1,jj+1) ) 
     183            END DO 
     184         END DO 
     185         CALL lbc_lnk( sshu_a, 'U', 1. )               ! Boundaries conditions 
     186         CALL lbc_lnk( sshv_a, 'V', 1. ) 
     187         CALL lbc_lnk( sshf_a, 'F', 1. ) 
     188      ENDIF 
     189 
     190      !                                           !------------------------------! 
     191      !                                           !     Now Vertical Velocity    ! 
     192      !                                           !------------------------------! 
     193      !                                                ! integrate from the bottom the hor. divergence 
     194      DO jk = jpkm1, 1, -1 
     195         wn(:,:,jk) = wn(:,:,jk+1) -    fse3t_n(:,:,jk) * hdivn(:,:,jk)   & 
     196              &                    - (  fse3t_a(:,:,jk)                   & 
     197              &                       - fse3t_b(:,:,jk) ) * tmask(:,:,jk) / z2dt 
     198      END DO 
     199      ! 
     200      CALL iom_put( "woce", wn   )                     ! vert. current 
     201      CALL iom_put( "ssh" , sshn )                     ! sea surface height 
    198202      ! 
    199203   END SUBROUTINE ssh_wzv 
     
    307311 
    308312   !!====================================================================== 
    309 END MODULE wzvmod 
     313END MODULE sshwzv 
  • trunk/NEMO/OPA_SRC/step.F90

    r1561 r1565  
    7878   USE bdydta          ! unstructured open boundary data  (bdy_dta routine) 
    7979 
    80    USE divcur          ! hor. divergence and curl      (div & cur routines) 
    81    USE cla_div         ! cross land: hor. divergence      (div_cla routine) 
    82    USE wzvmod          ! vertical velocity                (wzv     routine) 
     80   USE sshwzv          ! vertical velocity and ssh        (ssh_wzv routine) 
    8381 
    8482   USE ldfslp          ! iso-neutral slopes               (ldf_slp routine) 
     
    188186      !  Ocean dynamics : ssh, wn, hdiv, rot                                 ! 
    189187      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    190                          CALL div_cur( kstp )         ! Horizontal divergence & Relative vorticity 
    191       IF( n_cla == 1 )   CALL div_cla( kstp )         ! Cross Land Advection (Update Hor. divergence) 
    192188                         CALL ssh_wzv( kstp )         ! after ssh & vertical velocity 
    193189 
Note: See TracChangeset for help on using the changeset viewer.