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 3865 for branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90 – NEMO

Ignore:
Timestamp:
2013-04-09T18:34:38+02:00 (11 years ago)
Author:
acc
Message:

Branch 2013/dev_r3858_NOC_ZTC, #863. Nearly complete port of 2011/dev_r2739_LOCEAN8_ZTC development branch into v3.5aplha base. Compiles and runs but currently unstable after 8 timesteps with ORCA2_LIM reference configuration.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r3680 r3865  
    126126      REAL(wp), POINTER, DIMENSION(:,:) :: zua, zva, zun, zvn, zun_e, zvn_e, zub_e, zvb_e  
    127127      REAL(wp), POINTER, DIMENSION(:,:) :: zcu, zcv, zwx, zwy, zbfru, zbfrv, zu_sum, zv_sum 
     128      REAL(wp), POINTER, DIMENSION(:,:) :: zhu_b, zhv_b 
    128129      !!---------------------------------------------------------------------- 
    129130      ! 
     
    133134      CALL wrk_alloc( jpi, jpj, zua, zva, zun, zvn, zun_e, zvn_e, zub_e, zvb_e   ) 
    134135      CALL wrk_alloc( jpi, jpj, zcu, zcv, zwx, zwy, zbfru, zbfrv, zu_sum, zv_sum ) 
     136      CALL wrk_alloc( jpi, jpj, zhu_b, zhv_b                                     ) 
    135137      ! 
    136138      IF( kt == nit000 ) THEN             !* initialisation 
     
    199201#endif 
    200202               !                                                                              ! now trend 
    201                zua(ji,jj) = zua(ji,jj) + fse3u  (ji,jj,jk) * ua(ji,jj,jk) * umask(ji,jj,jk) 
    202                zva(ji,jj) = zva(ji,jj) + fse3v  (ji,jj,jk) * va(ji,jj,jk) * vmask(ji,jj,jk) 
     203               zua(ji,jj) = zua(ji,jj) + fse3u_n(ji,jj,jk) * ua(ji,jj,jk) * umask(ji,jj,jk) 
     204               zva(ji,jj) = zva(ji,jj) + fse3v_n(ji,jj,jk) * va(ji,jj,jk) * vmask(ji,jj,jk) 
    203205               !                                                                              ! now velocity  
    204                zun(ji,jj) = zun(ji,jj) + fse3u  (ji,jj,jk) * un(ji,jj,jk) 
    205                zvn(ji,jj) = zvn(ji,jj) + fse3v  (ji,jj,jk) * vn(ji,jj,jk)                
     206               zun(ji,jj) = zun(ji,jj) + fse3u_n(ji,jj,jk) * un(ji,jj,jk) 
     207               zvn(ji,jj) = zvn(ji,jj) + fse3v_n(ji,jj,jk) * vn(ji,jj,jk)                
    206208               ! 
    207209#if defined key_vvl 
     
    215217         END DO 
    216218      END DO 
     219 
     220      ! before inverse water column height at u- and v- points 
     221      IF( lk_vvl ) THEN 
     222         zhu_b(:,:) = 0. 
     223         zhv_b(:,:) = 0. 
     224         DO jk = 1, jpk 
     225            zhu_b(:,:) = zhu_b(:,:) + fse3u_b(:,:,jk) * umask(:,:,jk) 
     226            zhv_b(:,:) = zhv_b(:,:) + fse3v_b(:,:,jk) * vmask(:,:,jk) 
     227         END DO 
     228         zhu_b(:,:) = umask(:,:,1) / ( zhu_b(:,:) + 1. - umask(:,:,1) ) 
     229         zhv_b(:,:) = vmask(:,:,1) / ( zhv_b(:,:) + 1. - vmask(:,:,1) ) 
     230      ELSE 
     231         zhu_b(:,:) = hur(:,:) 
     232         zhv_b(:,:) = hvr(:,:) 
     233      ENDIF 
    217234 
    218235      !                                   !* baroclinic momentum trend (remove the vertical mean trend) 
     
    355372         vb_b(:,:) = vb_b(:,:) * hvr(:,:) 
    356373      ENDIF 
     374      ub_b(:,:) = ub_b(:,:) * zhu_b(:,:) 
     375      vb_b(:,:) = vb_b(:,:) * zhv_b(:,:) 
    357376 
    358377      ! ----------------------------------------------------------------------- 
     
    683702      CALL wrk_dealloc( jpi, jpj, zua, zva, zun, zvn, zun_e, zvn_e, zub_e, zvb_e   ) 
    684703      CALL wrk_dealloc( jpi, jpj, zcu, zcv, zwx, zwy, zbfru, zbfrv, zu_sum, zv_sum ) 
     704      CALL wrk_dealloc( jpi, jpj, zhu_b, zhv_b                                     ) 
    685705      ! 
    686706      IF( nn_timing == 1 )  CALL timing_stop('dyn_spg_ts') 
     
    698718      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag 
    699719      ! 
     720      REAL(wp), POINTER, DIMENSION(:,:) :: zzhu_b, zzhv_b 
    700721      INTEGER ::  ji, jk        ! dummy loop indices 
    701722      !!---------------------------------------------------------------------- 
     
    706727            CALL iom_get( numror, jpdom_autoglo, 'vn_b'  , vn_b  (:,:) )   ! from barotropic loop 
    707728         ELSE 
     729            CALL wrk_alloc( jpi, jpj, zzhu_b, zzhv_b ) 
    708730            un_b (:,:) = 0._wp 
    709731            vn_b (:,:) = 0._wp 
     
    712734               DO jk = 1, jpkm1 
    713735                  DO ji = 1, jpij 
    714                      un_b(ji,1) = un_b(ji,1) + fse3u(ji,1,jk) * un(ji,1,jk) 
    715                      vn_b(ji,1) = vn_b(ji,1) + fse3v(ji,1,jk) * vn(ji,1,jk) 
     736                     un_b(ji,1) = un_b(ji,1) + fse3u_n(ji,1,jk) * un(ji,1,jk) 
     737                     vn_b(ji,1) = vn_b(ji,1) + fse3v_n(ji,1,jk) * vn(ji,1,jk) 
    716738                  END DO 
    717739               END DO 
    718740            ELSE                             ! No  vector opt. 
    719741               DO jk = 1, jpkm1 
    720                   un_b(:,:) = un_b(:,:) + fse3u(:,:,jk) * un(:,:,jk) 
    721                   vn_b(:,:) = vn_b(:,:) + fse3v(:,:,jk) * vn(:,:,jk) 
     742                  un_b(:,:) = un_b(:,:) + fse3u_n(:,:,jk) * un(:,:,jk) 
     743                  vn_b(:,:) = vn_b(:,:) + fse3v_n(:,:,jk) * vn(:,:,jk) 
    722744               END DO 
    723745            ENDIF 
     
    747769 
    748770            IF( lk_vvl ) THEN 
    749                ub_b (:,:) = ub_b(:,:) * umask(:,:,1) / ( hu_0(:,:) + sshu_b(:,:) + 1._wp - umask(:,:,1) ) 
    750                vb_b (:,:) = vb_b(:,:) * vmask(:,:,1) / ( hv_0(:,:) + sshv_b(:,:) + 1._wp - vmask(:,:,1) ) 
    751             ELSE 
     771               CALL wrk_alloc( jpi, jpj, zzhu_b, zzhv_b ) 
     772               ub_b (:,:) = 0. 
     773               vb_b (:,:) = 0. 
     774               zzhu_b(:,:) = 0. 
     775               zzhv_b(:,:) = 0. 
     776               ! vertical sum 
     777               IF( lk_vopt_loop ) THEN          ! vector opt., forced unroll 
     778                  DO jk = 1, jpkm1 
     779                     DO ji = 1, jpij 
     780                        ub_b  (ji,1) = ub_b (ji,1) + fse3u_b(ji,1,jk) * ub   (ji,1,jk) 
     781                        vb_b  (ji,1) = vb_b (ji,1) + fse3v_b(ji,1,jk) * vb   (ji,1,jk) 
     782                        zzhu_b(ji,1) = zhu_b(ji,1) + fse3u_b(ji,1,jk) * umask(ji,1,jk) 
     783                        zzhv_b(ji,1) = zhv_b(ji,1) + fse3v_b(ji,1,jk) * vmask(ji,1,jk) 
     784                     END DO 
     785                  END DO 
     786               ELSE                             ! No  vector opt. 
     787                  DO jk = 1, jpkm1 
     788                     ub_b  (:,:) = ub_b  (:,:) + fse3u_b(:,:,jk) * ub   (:,:,jk) 
     789                     vb_b  (:,:) = vb_b  (:,:) + fse3v_b(:,:,jk) * vb   (:,:,jk) 
     790                     zzhu_b(:,:) = zzhu_b(:,:) + fse3u_b(:,:,jk) * umask(:,:,jk) 
     791                     zzhv_b(:,:) = zzhv_b(:,:) + fse3v_b(:,:,jk) * vmask(:,:,jk) 
     792                  END DO 
     793               ENDIF 
     794               ub_b(:,:) = ub_b(:,:) / ( zzhu_b(:,:) + 1. - umask(:,:,1) ) 
     795               vb_b(:,:) = vb_b(:,:) / ( zzhv_b(:,:) + 1. - vmask(:,:,1) ) 
     796               CALL wrk_dealloc( jpi, jpj, zzhu_b, zzhv_b ) 
     797            ELSE              
     798               ub_b (:,:) = 0.e0 
     799               vb_b (:,:) = 0.e0 
     800               ! vertical sum 
     801               IF( lk_vopt_loop ) THEN          ! vector opt., forced unroll 
     802                  DO jk = 1, jpkm1 
     803                     DO ji = 1, jpij 
     804                        ub_b(ji,1) = ub_b(ji,1) + fse3u_b(ji,1,jk) * ub(ji,1,jk) 
     805                        vb_b(ji,1) = vb_b(ji,1) + fse3v_b(ji,1,jk) * vb(ji,1,jk) 
     806                     END DO 
     807                  END DO 
     808               ELSE                             ! No  vector opt. 
     809                  DO jk = 1, jpkm1 
     810                     ub_b(:,:) = ub_b(:,:) + fse3u_b(:,:,jk) * ub(:,:,jk) 
     811                     vb_b(:,:) = vb_b(:,:) + fse3v_b(:,:,jk) * vb(:,:,jk) 
     812                  END DO 
     813               ENDIF 
    752814               ub_b(:,:) = ub_b(:,:) * hur(:,:) 
    753815               vb_b(:,:) = vb_b(:,:) * hvr(:,:) 
Note: See TracChangeset for help on using the changeset viewer.