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 4312 for branches – NEMO

Changeset 4312 for branches


Ignore:
Timestamp:
2013-11-22T12:21:18+01:00 (10 years ago)
Author:
cetlod
Message:

time-splitting corrections

Location:
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90

    r4292 r4312  
    106106      REAL(wp) ::   zue3a, zue3n, zue3b, zuf, zec   ! local scalars 
    107107      REAL(wp) ::   zve3a, zve3n, zve3b, zvf        !   -      - 
    108       REAL(wp), POINTER, DIMENSION(:,:)   ::  zua, zva 
     108      REAL(wp), POINTER, DIMENSION(:,:)   ::  zua, zva, zhura, zhvra 
    109109      REAL(wp), POINTER, DIMENSION(:,:,:) ::  ze3u_f, ze3v_f  
    110110      !!---------------------------------------------------------------------- 
     
    113113      ! 
    114114      CALL wrk_alloc( jpi,jpj,jpk, ze3u_f, ze3v_f ) 
    115       IF ( lk_dynspg_ts ) CALL wrk_alloc( jpi,jpj, zua, zva ) 
     115      IF ( lk_dynspg_ts ) CALL wrk_alloc( jpi,jpj, zua, zva, zhura, zhvra ) 
    116116      ! 
    117117      IF( kt == nit000 ) THEN 
     
    162162      zva(:,:) = 0._wp 
    163163      IF (lk_vvl) THEN 
     164         zhura(:,:) = 0._wp 
     165         zhvra(:,:) = 0._wp 
    164166         DO jk = 1, jpkm1 
    165167            zua(:,:) = zua(:,:) + fse3u_a(:,:,jk) * ua(:,:,jk) * umask(:,:,jk) 
    166             zva(:,:) = zva(:,:) + fse3v_a(:,:,jk) * va(:,:,jk) * vmask(:,:,jk)     
    167          END DO 
    168          DO jk = 1, jpkm1 
    169             ua(:,:,jk) = ( ua(:,:,jk) - zua(:,:) * hur_e(:,:) + ua_b(:,:) ) * umask(:,:,jk) 
    170             va(:,:,jk) = ( va(:,:,jk) - zva(:,:) * hvr_e(:,:) + va_b(:,:) ) * vmask(:,:,jk) 
     168            zva(:,:) = zva(:,:) + fse3v_a(:,:,jk) * va(:,:,jk) * vmask(:,:,jk) 
     169            zhura(:,:) = zhura(:,:) + fse3u_a(:,:,jk) * umask(:,:,jk) 
     170            zhvra(:,:) = zhvra(:,:) + fse3v_a(:,:,jk) * vmask(:,:,jk)   
     171         END DO 
     172         zhura(:,:) = umask(:,:,1) / ( zhura(:,:) + 1._wp - umask(:,:,1) )  
     173         zhvra(:,:) = vmask(:,:,1) / ( zhvra(:,:) + 1._wp - vmask(:,:,1) )   
     174         DO jk = 1, jpkm1 
     175            ua(:,:,jk) = ( ua(:,:,jk) - zua(:,:) * zhura(:,:) + ua_b(:,:) ) * umask(:,:,jk) 
     176            va(:,:,jk) = ( va(:,:,jk) - zva(:,:) * zhvra(:,:) + va_b(:,:) ) * vmask(:,:,jk) 
    171177         END DO 
    172178      ELSE 
     
    184190         ! Remove advective velocity from "now velocities"  
    185191         ! prior to asselin filtering      
    186          ! In the forward case, this is done below after asselin filtering     
     192         ! In the forward case, this is done below after asselin filtering    
     193         ! so that asselin contribution is removed at the same time  
    187194         DO jk = 1, jpkm1 
    188195            un(:,:,jk) = ( un(:,:,jk) - un_adv(:,:) + un_b(:,:) )*umask(:,:,jk) 
     
    308315               DO jk = 1, jpkm1 
    309316                  DO jj = 1, jpj 
    310                      DO ji = 1, jpi                   !                              --------------------------- 
     317                     DO ji = 1, jpi                   
    311318                        zue3a = ua(ji,jj,jk) * fse3u_a(ji,jj,jk) 
    312319                        zve3a = va(ji,jj,jk) * fse3v_a(ji,jj,jk) 
     
    333340         ! 
    334341         IF (lk_dynspg_ts.AND.ln_bt_fw) THEN 
    335          ! Remove asselin filtering of barotropic velocities if forward time splitting 
    336          ! note that we replace barotropic velocities by advective velocities        
     342            ! Revert "before" velocities to time split estimate 
     343            ! Doing it here also means that asselin filter contribution is removed   
    337344            zua(:,:) = 0._wp 
    338345            zva(:,:) = 0._wp 
     
    360367      !  
    361368      CALL wrk_dealloc( jpi,jpj,jpk, ze3u_f, ze3v_f ) 
    362       IF ( lk_dynspg_ts ) CALL wrk_dealloc( jpi,jpj, zua, zva ) 
     369      IF ( lk_dynspg_ts ) CALL wrk_dealloc( jpi,jpj, zua, zva, zhura, zhvra ) 
    363370      ! 
    364371      IF( nn_timing == 1 )  CALL timing_stop('dyn_nxt') 
  • branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/step.F90

    r4292 r4312  
    132132                                  CALL dyn_spg( kstp, indic )  ! surface pressure gradient 
    133133 
    134                                   hdivb(:,:,:) = hdivn(:,:,:)  ! Store now divergence and rot temporarly, revert to these below  
    135                                   rotb(:,:,:)  = rotn(:,:,:)      
    136                                   ua_sv(:,:,:) = ua(:,:,:)     ! Save trends (barotropic trend has been fully updated) 
     134                                  ua_sv(:,:,:) = ua(:,:,:)     ! Save trends (barotropic trend has been fully updated at this stage) 
    137135                                  va_sv(:,:,:) = va(:,:,:) 
    138136 
     
    140138      ENDIF 
    141139      IF( lk_vvl     )   CALL dom_vvl_sf_nxt( kstp )  ! after vertical scale factors 
    142                          CALL wzv           ( kstp )  ! now cross-level velocity (original) 
     140                         CALL wzv           ( kstp )  ! now cross-level velocity  
    143141 
    144142      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
Note: See TracChangeset for help on using the changeset viewer.