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 1381 for branches/dev_004_VVL/NEMO/OPA_SRC/DYN – NEMO

Ignore:
Timestamp:
2009-04-06T15:12:22+02:00 (15 years ago)
Author:
rblod
Message:

Time stepping for VVL case and correct a bug in sshnxt, see #398

Location:
branches/dev_004_VVL/NEMO/OPA_SRC/DYN
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/dev_004_VVL/NEMO/OPA_SRC/DYN/dynnxt.F90

    r1361 r1381  
    105105#else 
    106106      IF( lk_vvl ) THEN                                  ! Varying levels 
    107          !RB_vvl scale factors are wrong at this point 
    108107         DO jk = 1, jpkm1 
    109             ua(ji,jj,jk) = (        ub(:,:,jk) * fse3u(:,:,jk)     & 
    110                &           + z2dt * ua(:,:,jk) * fse3u(:,:,jk) )   & 
    111                &         / fse3u(:,:,jk) * umask(:,:,jk) 
    112             va(ji,jj,jk) = (        vb(:,:,jk) * fse3v(:,:,jk)     & 
    113                &           + z2dt * va(:,:,jk) * fse3v(:,:,jk) )   & 
    114                &         / fse3v(:,:,jk) * vmask(:,:,jk) 
     108            ua(ji,jj,jk) = (        ub(:,:,jk) * fse3u_b(:,:,jk)     & 
     109               &           + z2dt * ua(:,:,jk) * fse3u_n(:,:,jk) )   & 
     110               &         / fse3u_a(:,:,jk) * umask(:,:,jk) 
     111            va(ji,jj,jk) = (        vb(:,:,jk) * fse3v_b(:,:,jk)     & 
     112               &           + z2dt * va(:,:,jk) * fse3v_n(:,:,jk) )   & 
     113               &         / fse3v_a(:,:,jk) * vmask(:,:,jk) 
    115114         END DO 
    116115      ELSE 
     
    200199      ELSE 
    201200         IF( lk_vvl ) THEN                                ! Varying levels 
    202             ! Not done 
     201            DO jk = 1, jpkm1                              ! filter applied on thickness weighted velocities 
     202               DO jj = 1, jpj 
     203                  DO ji = 1, jpi 
     204                     ze3u_a = fse3u_a(ji,jj,jk) 
     205                     ze3v_a = fse3v_a(ji,jj,jk) 
     206                     ze3u_n = fse3u_n(ji,jj,jk) 
     207                     ze3v_n = fse3v_n(ji,jj,jk) 
     208                     ze3u_b = fse3u_b(ji,jj,jk) 
     209                     ze3v_b = fse3v_b(ji,jj,jk) 
     210                     ! 
     211                     zue3a = ua(ji,jj,jk) * ze3u_a 
     212                     zve3a = va(ji,jj,jk) * ze3v_a 
     213                     zue3n = un(ji,jj,jk) * ze3u_n 
     214                     zve3n = vn(ji,jj,jk) * ze3v_n 
     215                     zue3b = ub(ji,jj,jk) * ze3u_b 
     216                     zve3b = vb(ji,jj,jk) * ze3v_b 
     217                     ! 
     218                     ub(ji,jj,jk) = ( atfp  * ( zue3b  + zue3a  ) + atfp1 * zue3n  )   & 
     219                        &         / ( atfp  * ( ze3u_b + ze3u_a ) + atfp1 * ze3u_n ) * umask(ji,jj,jk) 
     220                     vb(ji,jj,jk) = ( atfp  * ( zve3b  + zve3a  ) + atfp1 * zve3n  )   & 
     221                        &         / ( atfp  * ( ze3v_b + ze3v_a ) + atfp1 * ze3v_n ) * vmask(ji,jj,jk) 
     222                     un(ji,jj,jk) = ua(ji,jj,jk) * umask(ji,jj,jk) 
     223                     vn(ji,jj,jk) = va(ji,jj,jk) * vmask(ji,jj,jk) 
     224                  END DO 
     225               END DO 
     226            END DO 
    203227         ELSE                                             ! Fixed levels 
    204228!RB_vvl : should be done as in tranxt ? 
  • branches/dev_004_VVL/NEMO/OPA_SRC/DYN/dynspg_flt.F90

    r1380 r1381  
    158158      IF( lk_vvl ) THEN          ! variable volume  
    159159 
    160          DO jj = 1, jpjm1 
    161             DO ji = 1,jpim1 
    162  
    163                ! Sea Surface Height at u-point before 
    164                zsshub(ji,jj) = 0.5 * umask(ji,jj,1) / ( e1u(ji,jj) * e2u(ji,jj) )  &  
    165                   &          * ( e1t(ji  ,jj) * e2t(ji  ,jj) * sshb(ji  ,jj)       & 
    166                   &            + e1t(ji+1,jj) * e2t(ji+1,jj) * sshb(ji+1,jj) ) 
    167  
    168                ! Sea Surface Height at v-point before 
    169                zsshvb(ji,jj) = 0.5 * vmask(ji,jj,1) / ( e1v(ji,jj) * e2v(ji,jj) )  & 
    170                   &          * ( e1t(ji,jj  ) * e2t(ji,jj  ) * sshb(ji,jj  )       & 
    171                   &            + e1t(ji,jj+1) * e2t(ji,jj+1) * sshb(ji,jj+1) ) 
    172  
    173                ! Sea Surface Height at u-point after 
    174                zsshua(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  
    178                ! Sea Surface Height at v-point after 
    179                zsshva(ji,jj) = 0.5 * vmask(ji,jj,1) / ( e1v(ji,jj) * e2v(ji,jj) )  & 
    180                   &          * ( e1t(ji,jj  ) * e2t(ji,jj  ) * ssha(ji,jj  )       & 
    181                   &            + e1t(ji,jj+1) * e2t(ji,jj+1) * ssha(ji,jj+1) ) 
    182  
    183             END DO 
    184          END DO 
    185  
    186          ! Boundaries conditions 
    187          CALL lbc_lnk( zsshub, 'U', 1. )    ;    CALL lbc_lnk( zsshvb, 'V', 1. ) 
    188          CALL lbc_lnk( zsshua, 'U', 1. )    ;    CALL lbc_lnk( zsshva, 'V', 1. ) 
    189  
    190          ! Thickness weighting 
    191          ! ------------------- 
    192          DO jk = 1, jpkm1 
    193             DO jj = 1, jpj 
    194                DO ji = 1, jpi 
    195                   ua(ji,jj,jk) = ua(ji,jj,jk) * fse3u(ji,jj,jk) 
    196                   va(ji,jj,jk) = va(ji,jj,jk) * fse3v(ji,jj,jk) 
    197  
    198                   zub(ji,jj,jk) = ub(ji,jj,jk) * zfse3ub(ji,jj,jk) 
    199                   zvb(ji,jj,jk) = vb(ji,jj,jk) * zfse3vb(ji,jj,jk) 
    200                END DO 
    201             END DO 
    202          END DO 
    203  
    204160         ! Evaluate the masked next velocity (effect of the additional force not included) 
     161         ! -------------------   (thickness weighted velocity, surface pressure gradient already included in dyn_hpg) 
    205162         DO jk = 1, jpkm1 
    206163            DO jj = 2, jpjm1 
    207164               DO ji = fs_2, fs_jpim1   ! vector opt. 
    208                   ua(ji,jj,jk) = ( zub(ji,jj,jk) + z2dt * ua(ji,jj,jk) ) /zfse3ua(ji,jj,jk) * umask(ji,jj,jk) 
    209                   va(ji,jj,jk) = ( zvb(ji,jj,jk) + z2dt * va(ji,jj,jk) ) /zfse3va(ji,jj,jk) * vmask(ji,jj,jk) 
     165                  ua(ji,jj,jk) = (        ub(ji,jj,jk) * fse3u_b(ji,jj,jk)      & 
     166                     &           + z2dt * ua(ji,jj,jk) * fse3u_n(ji,jj,jk)  )   & 
     167                     &         / fse3u_a(ji,jj,jk) * umask(ji,jj,jk) 
     168                  va(ji,jj,jk) = (        vb(ji,jj,jk) * fse3v_b(ji,jj,jk)      & 
     169                     &           + z2dt * va(ji,jj,jk) * fse3v_n(ji,jj,jk)  )   & 
     170                     &         / fse3v_a(ji,jj,jk) * vmask(ji,jj,jk) 
    210171               END DO 
    211172            END DO 
  • branches/dev_004_VVL/NEMO/OPA_SRC/DYN/wzvmod.F90

    r1368 r1381  
    114114      !                                                ! Sea Surface Height at u-,v- and f-points (vvl case only) 
    115115      IF( lk_vvl ) THEN                                ! (required only in key_vvl case) 
    116 !RB_vvl 
    117 ! Compute ssh at u,v, f points and update vertical coordinate 
    118 ! Currently done in dom_vvl 
     116         DO jj = 1, jpjm1 
     117            DO ji = 1, fs_jpim1   ! Vector Opt. 
     118               sshu_a(ji,jj) = 0.5  * umask(ji,jj,1)  / ( e1u(ji  ,jj) * e2u(ji  ,jj) )                   & 
     119                  &                                   * ( e1t(ji  ,jj) * e2t(ji  ,jj) * ssha(ji  ,jj)     & 
     120                  &                                     + e1t(ji+1,jj) * e2t(ji+1,jj) * ssha(ji+1,jj) ) 
     121               sshv_a(ji,jj) = 0.5  * vmask(ji,jj,1)  / ( e1v(ji,jj  ) * e2v(ji,jj  ) )                   & 
     122                  &                                   * ( e1t(ji,jj  ) * e2t(ji,jj  ) * ssha(ji,jj  )     & 
     123                  &                                     + e1t(ji,jj+1) * e2t(ji,jj+1) * ssha(ji,jj+1) ) 
     124   !!gm bug used of fmask, even if thereafter multiplied by muf  which is correctly masked) 
     125               sshf_a(ji,jj) = 0.25 * fmask(ji,jj,1) * ( ssha(ji  ,jj) + ssha(ji  ,jj+1)                 & 
     126                  &                                    + ssha(ji+1,jj) + ssha(ji+1,jj+1) ) 
     127            END DO 
     128         END DO 
     129         CALL lbc_lnk( sshu_a, 'U', 1. )               ! Boundaries conditions 
     130         CALL lbc_lnk( sshv_a, 'V', 1. ) 
     131         CALL lbc_lnk( sshf_a, 'F', 1. ) 
    119132      ENDIF 
    120133 
     
    134147      IF( lk_vvl ) THEN                           ! only in vvl case) 
    135148      !                                                ! now local depth and scale factors (stored in fse3. arrays) 
    136 !RB_vvl to be done 
    137  
    138  
     149         DO jk = 1, jpkm1 
     150            fsdept(:,:,jk) = fsdept_n(:,:,jk)               ! depths 
     151            fsdepw(:,:,jk) = fsdepw_n(:,:,jk) 
     152            fsde3w(:,:,jk) = fsde3w_n(:,:,jk) 
     153            ! 
     154            fse3t (:,:,jk) = fse3t_n (:,:,jk)               ! vertical scale factors 
     155            fse3u (:,:,jk) = fse3u_n (:,:,jk) 
     156            fse3v (:,:,jk) = fse3v_n (:,:,jk) 
     157            fse3f (:,:,jk) = fse3f_n (:,:,jk) 
     158            fse3w (:,:,jk) = fse3w_n (:,:,jk) 
     159            fse3uw(:,:,jk) = fse3uw_n(:,:,jk) 
     160            fse3vw(:,:,jk) = fse3vw_n(:,:,jk) 
     161         END DO 
     162         !                                             ! ocean depth (at u- and v-points) 
     163         hu(:,:) = hu_0(:,:) + sshu_n(:,:) 
     164         hv(:,:) = hv_0(:,:) + sshv_n(:,:) 
     165         !                                             ! masked inverse of the ocean depth (at u- and v-points) 
    139166      ENDIF 
    140167      ! 
     
    171198      ! ------------------------------- 
    172199 
    173 !RB_vvl ssh at u, f,v point to be added 
    174200 
    175201     IF( neuler == 0 .AND. kt == nit000 ) THEN   ! Euler time stepping 
     
    178204               ! before <-- now 
    179205               sshb  (ji,jj) = sshn(ji,jj)  
     206               sshu_b(ji,jj) = sshu_n(ji,jj)  
     207               sshv_b(ji,jj) = sshv_n(ji,jj) 
     208               sshf_b(ji,jj) = sshf_n(ji,jj) 
    180209               ! now <-- after 
    181210               sshn  (ji,jj) = ssha  (ji,jj) 
     211               sshu_n(ji,jj) = sshu_a(ji,jj) 
     212               sshv_n(ji,jj) = sshv_a(ji,jj) 
     213               sshf_n(ji,jj) = sshf_a(ji,jj) 
    182214            END DO 
    183215         END DO 
     
    187219               ! before <-- now filtered 
    188220               sshb  (ji,jj) = sshn(ji,jj)   + atfp * ( sshb  (ji,jj) - 2 * sshn  (ji,jj) + ssha  (ji,jj) )    !& 
     221               sshu_b(ji,jj) = sshu_n(ji,jj) + atfp * ( sshu_b(ji,jj) - 2 * sshu_n(ji,jj) + sshu_a(ji,jj) )    !& 
     222               sshv_b(ji,jj) = sshv_n(ji,jj) + atfp * ( sshv_b(ji,jj) - 2 * sshv_n(ji,jj) + sshv_a(ji,jj) )    !& 
     223               sshf_b(ji,jj) = sshf_n(ji,jj) + atfp * ( sshf_b(ji,jj) - 2 * sshf_n(ji,jj) + sshf_a(ji,jj) )    !& 
    189224               ! now <-- after 
    190225               sshn  (ji,jj) = ssha  (ji,jj) 
     226               sshu_n(ji,jj) = sshu_a(ji,jj) 
     227               sshv_n(ji,jj) = sshv_a(ji,jj) 
     228               sshf_n(ji,jj) = sshf_a(ji,jj) 
    191229            END DO 
    192230         END DO 
Note: See TracChangeset for help on using the changeset viewer.