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

Changeset 4288


Ignore:
Timestamp:
2013-11-20T16:02:06+01:00 (10 years ago)
Author:
cbricaud
Message:

correction for timesplitting

Location:
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC
Files:
3 edited

Legend:

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

    r4280 r4288  
    5656 
    5757   ! Potential namelist parameters below to be read in dyn_spg_ts_init 
    58    LOGICAL,  PUBLIC,  PARAMETER :: ln_bt_fw=.true.        !: Forward integration of barotropic sub-stepping 
     58   LOGICAL,  PUBLIC,  PARAMETER :: ln_bt_fw=.TRUE.        !: Forward integration of barotropic sub-stepping 
    5959   LOGICAL,  PRIVATE, PARAMETER :: ln_bt_av=.TRUE.        !: Time averaging of barotropic variables 
    6060   LOGICAL,  PRIVATE, PARAMETER :: ln_bt_nn_auto=.FALSE.  !: Set number of iterations automatically 
     
    228228      IF ( kt == nit000 .OR. lk_vvl ) THEN 
    229229         IF ( ln_dynvor_een ) THEN 
    230             zht(:,:) = 0. 
    231             DO jk = 1, jpk 
    232                zht(:,:) = zht(:,:) + fse3t_n(:,:,jk) * tmask(:,:,jk) 
    233             END DO 
     230            ! JC: Simplification needed below: define ht_0 even when volume is fixed 
     231            IF (lk_vvl) THEN 
     232               zht(:,:) = (ht_0(:,:) + sshn(:,:)) * tmask(:,:,1)  
     233            ELSE 
     234               zht(:,:) = 0. 
     235               DO jk = 1, jpkm1 
     236                  zht(:,:) = zht(:,:) + fse3t_n(:,:,jk) * tmask(:,:,jk) 
     237               END DO 
     238            ENDIF 
     239 
    234240            DO jj = 1, jpjm1 
    235241               DO ji = 1, jpim1 
     
    10491055      INTEGER         , INTENT(in) ::   kt         ! ocean time-step 
    10501056      ! 
    1051       INTEGER  :: ji ,jj 
     1057      INTEGER  :: ji ,jj, jk 
    10521058      REAL(wp) :: zxr2, zyr2, zcmax 
    1053       REAL(wp), POINTER, DIMENSION(:,:) :: zcu 
     1059      REAL(wp), POINTER, DIMENSION(:,:) :: zcu, zht 
    10541060      !! 
    10551061!      NAMELIST/namsplit/ ln_bt_fw, ln_bt_av, ln_bt_nn_auto, & 
     
    10601066      !         ! Max courant number for ext. grav. waves 
    10611067      ! 
    1062       CALL wrk_alloc( jpi, jpj, zcu ) 
    1063       ! 
     1068      CALL wrk_alloc( jpi, jpj, zcu, zht ) 
     1069      ! 
     1070      ! JC: Simplification needed below: define ht_0 even when volume is fixed 
     1071      IF (lk_vvl) THEN  
     1072         zht(:,:) = ht_0(:,:) * tmask(:,:,1) 
     1073      ELSE 
     1074         zht(:,:) = 0. 
     1075         DO jk = 1, jpkm1 
     1076            zht(:,:) = zht(:,:) + fse3t_n(:,:,jk) * tmask(:,:,jk) 
     1077         END DO 
     1078      ENDIF 
     1079 
    10641080      DO jj = 1, jpj 
    1065          DO ji =1, jpi  
     1081         DO ji =1, jpi 
    10661082            zxr2 = 1./(e1t(ji,jj)*e1t(ji,jj)) 
    10671083            zyr2 = 1./(e2t(ji,jj)*e2t(ji,jj)) 
    1068             zcu(ji,jj) = sqrt(grav*ht_0(ji,jj)*(zxr2 + zyr2) ) 
     1084            zcu(ji,jj) = sqrt(grav*zht(ji,jj)*(zxr2 + zyr2) ) 
    10691085         END DO 
    10701086      END DO 
     
    11201136      ENDIF 
    11211137      ! 
    1122       CALL wrk_dealloc( jpi, jpj, zcu ) 
     1138      CALL wrk_dealloc( jpi, jpj, zcu, zht ) 
    11231139      ! 
    11241140   END SUBROUTINE dyn_spg_ts_init 
  • branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90

    r4263 r4288  
    3636   USE iom 
    3737   USE sbcrnf, ONLY: h_rnf, nk_rnf, sbc_rnf_div   ! River runoff  
    38    USE dynspg_oce,  ONLY: un_b, vn_b, un_adv, vn_adv 
    3938   USE dynspg_ts,   ONLY: ln_bt_fw 
    4039   USE dynspg_oce, ONLY: lk_dynspg_ts 
     
    288287      ENDIF 
    289288 
    290       IF( ( neuler == 0 .AND. kt == nit000 ) .OR. ln_bt_fw ) THEN    !** Euler time-stepping at first time-step : no filter 
     289# if defined key_dynspg_ts 
     290      IF( ( neuler == 0 .AND. kt == nit000 ) .OR. ln_bt_fw ) THEN    !** Euler time-stepping: no filter 
     291# else 
     292      IF ( neuler == 0 .AND. kt == nit000 ) THEN   !** Euler time-stepping at first time-step : no filter 
     293#endif 
    291294         sshb(:,:) = sshn(:,:)                           ! before <-- now 
    292295         sshn(:,:) = ssha(:,:)                           ! now    <-- after  (before already = now) 
  • branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/step.F90

    r4278 r4288  
    9999      !  Ocean dynamics : hdiv, rot, ssh, e3, wn 
    100100      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     101                         CALL zdf_bfr( kstp )         ! bottom friction (if quadratic) 
    101102                         CALL ssh_nxt       ( kstp )  ! after ssh (includes call to div_cur) 
    102103      IF( lk_dynspg_ts ) THEN 
     
    108109          IF( ln_zps      )       CALL zps_hde( kstp, jpts, tsn, gtsu, gtsv,  &  ! zps: now hor. derivative 
    109110                &                                          rhd, gru , grv  )     ! of t, s, rd at the last ocean level 
    110                                   CALL zdf_bfr( kstp )         ! bottom friction (if quadratic) 
    111111 
    112112                                  ua(:,:,:) = 0.e0             ! set dynamics trends to zero 
     
    125125                                  CALL dyn_hpg( kstp )         ! horizontal gradient of Hydrostatic pressure 
    126126                                  CALL dyn_spg( kstp, indic )  ! surface pressure gradient 
     127 
     128                                  hdivb(:,:,:) = hdivn(:,:,:)  ! Store now divergence and rot temporarly, revert to these below  
     129                                  rotb(:,:,:)  = rotn(:,:,:)      
     130                                  ua_sv(:,:,:) = ua(:,:,:)     ! Save trends (barotropic trend has been fully updated) 
     131                                  va_sv(:,:,:) = va(:,:,:) 
     132 
    127133                                  CALL div_cur( kstp )         ! Horizontal divergence & Relative vorticity (2nd call in time-split case) 
    128  
    129                                   ua_sv(:,:,:) = ua(:,:,:)     ! save next velocities (not trends !) 
    130                                   va_sv(:,:,:) = va(:,:,:) 
    131134      ENDIF 
    132135      IF( lk_vvl     )   CALL dom_vvl_sf_nxt( kstp )  ! after vertical scale factors 
     
    140143      ! 
    141144      !  VERTICAL PHYSICS 
    142       IF( .NOT. lk_dynspg_ts ) CALL zdf_bfr( kstp )         ! bottom friction 
    143  
    144145      !                                               ! Vertical eddy viscosity and diffusivity coefficients 
    145146      IF( lk_zdfric  )   CALL zdf_ric( kstp )            ! Richardson number dependent Kz 
     
    252253      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    253254      IF( lk_dynspg_ts   )  THEN 
    254 ! revert to previously computed tendencies: 
     255! revert to previously computed momentum tendencies 
    255256! (not using ua, va as temporary arrays during tracers' update could avoid that) 
    256257                               ua(:,:,:) = ua_sv(:,:,:) 
    257258                               va(:,:,:) = va_sv(:,:,:) 
     259! Revert now divergence and rotational to previously computed ones  
     260!(needed because of the time swap in div_cur, at the beginning of each time step) 
     261                               hdivn(:,:,:) = hdivb(:,:,:) 
     262                               rotn(:,:,:)  = rotb(:,:,:)  
     263 
    258264                               CALL dyn_bfr( kstp )         ! bottom friction 
    259265                               CALL dyn_zdf( kstp )         ! vertical diffusion 
Note: See TracChangeset for help on using the changeset viewer.