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 2865 for branches/2011/UKMO_MERCATOR_obc_bdy_merge/NEMOGCM/NEMO/OPA_SRC/OBC/obcdta.F90 – NEMO

Ignore:
Timestamp:
2011-09-27T14:33:01+02:00 (13 years ago)
Author:
davestorkey
Message:
  1. Updates for dynspg_exp option.
  2. Implement time_offset functionality in obc_dta.
  3. Add option to specify boundaries in the namelist.
  4. Re-activate obc_vol option.
  5. Update to namelist control of tidal harmonics.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/UKMO_MERCATOR_obc_bdy_merge/NEMOGCM/NEMO/OPA_SRC/OBC/obcdta.F90

    r2831 r2865  
    5555CONTAINS 
    5656 
    57       SUBROUTINE obc_dta( kt, jit ) 
     57      SUBROUTINE obc_dta( kt, jit, time_offset ) 
    5858      !!---------------------------------------------------------------------- 
    5959      !!                   ***  SUBROUTINE obc_dta  *** 
     
    6969      INTEGER, INTENT( in )           ::   kt    ! ocean time-step index  
    7070      INTEGER, INTENT( in ), OPTIONAL ::   jit   ! subcycle time-step index (for timesplitting option) 
     71      INTEGER, INTENT( in ), OPTIONAL ::   time_offset  ! time offset in units of timesteps. NB. if jit 
     72                                                        ! is present then units = subcycle timesteps. 
     73                                                        ! time_offset = 0 => get data at "now" time level 
     74                                                        ! time_offset = -1 => get data at "before" time level 
     75                                                        ! time_offset = +1 => get data at "after" time level 
     76                                                        ! etc. 
    7177      !! 
    7278      INTEGER     ::  ib_obc, jfld, jstart, jend, ib, ii, ij, ik, igrd  ! local indices 
     
    202208            IF( PRESENT(jit) ) THEN 
    203209               ! Update barotropic boundary conditions only 
    204                ! jit is optional argument for fld_read 
    205                IF( nn_dyn2d(ib_obc) .gt. 0 .and. nn_dyn2d_dta(ib_obc) .eq. 1 ) THEN 
    206                   IF( nn_tides(ib_obc) .eq. 1 ) THEN 
     210               ! jit is optional argument for fld_read and tide_update 
     211               IF( nn_dyn2d(ib_obc) .gt. 0 ) THEN 
     212                  IF( nn_dyn2d_dta(ib_obc) .eq. 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays 
    207213                     dta_obc(ib_obc)%ssh(:) = 0.0 
    208214                     dta_obc(ib_obc)%u2d(:) = 0.0 
    209215                     dta_obc(ib_obc)%v2d(:) = 0.0 
    210                   ELSE 
     216                  ENDIF 
     217                  IF( nn_dyn2d_dta(ib_obc) .eq. 1 .or. nn_dyn2d_dta(ib_obc) .eq. 3 ) THEN ! update external data 
    211218                     jend = jstart + 2 
    212                      CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), map=nbmap_ptr(jstart:jend), jit=jit ) 
     219                     CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), map=nbmap_ptr(jstart:jend), jit=jit, time_offset=time_offset ) 
    213220                  ENDIF 
    214                ENDIF 
    215                IF( nn_tides(ib_obc) .gt. 0 ) THEN 
    216                   CALL tide_update( kt=kt, jit=jit, idx=idx_obc(ib_obc), dta=dta_obc(ib_obc), td=tides(ib_obc) ) 
     221                  IF( nn_dyn2d_dta(ib_obc) .ge. 2 ) THEN ! update tidal harmonic forcing 
     222                     CALL tide_update( kt=kt, idx=idx_obc(ib_obc), dta=dta_obc(ib_obc), td=tides(ib_obc), jit=jit, time_offset=time_offset ) 
     223                  ENDIF 
    217224               ENDIF 
    218225            ELSE 
    219                IF( nb_obc_fld(ib_obc) .gt. 0 ) THEN  
    220                   jend = jstart + nb_obc_fld(ib_obc) - 1 
    221                   CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), map=nbmap_ptr(jstart:jend), timeshift=1 ) 
    222                ENDIF 
    223                IF( nn_tides(ib_obc) .eq. 1 ) THEN 
     226               IF( nn_dyn2d(ib_obc) .gt. 0 .and. nn_dyn2d_dta(ib_obc) .eq. 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays 
    224227                  dta_obc(ib_obc)%ssh(:) = 0.0 
    225228                  dta_obc(ib_obc)%u2d(:) = 0.0 
    226229                  dta_obc(ib_obc)%v2d(:) = 0.0 
    227230               ENDIF 
    228                IF( nn_tides(ib_obc) .gt. 0 ) THEN 
    229                   !!! THINK ABOUT kt, jit VALUES !!! 
    230                   CALL tide_update( kt=kt, jit=0, idx=idx_obc(ib_obc), dta=dta_obc(ib_obc), td=tides(ib_obc) ) 
     231               IF( nb_obc_fld(ib_obc) .gt. 0 ) THEN ! update external data 
     232                  jend = jstart + nb_obc_fld(ib_obc) - 1 
     233                  CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), map=nbmap_ptr(jstart:jend), time_offset=time_offset ) 
     234               ENDIF 
     235               IF( nn_dyn2d(ib_obc) .gt. 0 .and. nn_dyn2d_dta(ib_obc) .ge. 2 ) THEN ! update tidal harmonic forcing 
     236                  CALL tide_update( kt=kt, idx=idx_obc(ib_obc), dta=dta_obc(ib_obc), td=tides(ib_obc), time_offset=time_offset ) 
    231237               ENDIF 
    232238            ENDIF 
     
    238244 
    239245            IF( ln_full_vel_array(ib_obc) .and.                                             &  
    240            &    ( nn_dyn2d_dta(ib_obc) .eq. 1 .or. nn_dyn3d_dta(ib_obc) .eq. 1 ) ) THEN  
     246           &    ( nn_dyn2d_dta(ib_obc) .eq. 1 .or. nn_dyn2d_dta(ib_obc) .eq. 3 .or. nn_dyn3d_dta(ib_obc) .eq. 1 ) ) THEN  
    241247 
    242248               igrd = 2                      ! zonal velocity 
     
    326332#endif 
    327333                              ) 
     334         IF(nn_dta(ib_obc) .gt. 1) nn_dta(ib_obc) = 1 
    328335      END DO 
    329336 
     
    333340      nb_obc_fld(:) = 0 
    334341      DO ib_obc = 1, nb_obc          
    335          IF( nn_dyn2d(ib_obc) .gt. 0 .and. nn_dyn2d_dta(ib_obc) .eq. 1 ) THEN 
     342         IF( nn_dyn2d(ib_obc) .gt. 0 .and. ( nn_dyn2d_dta(ib_obc) .eq. 1 .or. nn_dyn2d_dta(ib_obc) .eq. 3 ) ) THEN 
    336343            nb_obc_fld(ib_obc) = nb_obc_fld(ib_obc) + 3 
    337344         ENDIF 
     
    408415            ! Only read in necessary fields for this set. 
    409416            ! Important that barotropic variables come first. 
    410             IF( nn_dyn2d(ib_obc) .gt. 0 .and. nn_dyn2d_dta(ib_obc) .eq. 1 ) THEN  
    411  
    412                IF( nn_dyn2d(ib_obc) .ne. jp_frs .and. nn_tides(ib_obc) .ne. 1) THEN 
     417            IF( nn_dyn2d(ib_obc) .gt. 0 .and. ( nn_dyn2d_dta(ib_obc) .eq. 1 .or. nn_dyn2d_dta(ib_obc) .eq. 3 ) ) THEN  
     418 
     419               IF( nn_dyn2d(ib_obc) .ne. jp_frs ) THEN 
    413420                  jfld = jfld + 1 
    414421                  blf_i(jfld) = bn_ssh 
     
    419426               ENDIF 
    420427 
    421                IF( .not. ln_full_vel_array(ib_obc) .and. nn_tides(ib_obc) .ne. 1 ) THEN 
     428               IF( .not. ln_full_vel_array(ib_obc) ) THEN 
    422429 
    423430                  jfld = jfld + 1 
     
    449456            ! baroclinic velocities 
    450457            IF( ( nn_dyn3d(ib_obc) .gt. 0 .and. nn_dyn3d_dta(ib_obc) .eq. 1 ) .or. & 
    451                   ( ln_full_vel_array(ib_obc) .and. nn_dyn2d(ib_obc) .gt. 0 .and. nn_dyn2d_dta(ib_obc) .eq. 1 ) ) THEN 
     458           &      ( ln_full_vel_array(ib_obc) .and. nn_dyn2d(ib_obc) .gt. 0 .and.  & 
     459           &        ( nn_dyn2d_dta(ib_obc) .eq. 1 .or. nn_dyn2d_dta(ib_obc) .eq. 3 ) ) ) THEN 
    452460 
    453461               jfld = jfld + 1 
     
    583591 
    584592         IF (nn_dyn2d(ib_obc) .gt. 0) THEN 
    585             IF( nn_dyn2d_dta(ib_obc) .eq. 0 .or. ln_full_vel_array(ib_obc) .or. nn_tides(ib_obc) .eq. 1 ) THEN 
     593            IF( nn_dyn2d_dta(ib_obc) .eq. 0 .or. nn_dyn2d_dta(ib_obc) .eq. 2 .or. ln_full_vel_array(ib_obc) ) THEN 
    586594               IF( nn_dyn2d(ib_obc) .eq. jp_frs ) THEN 
    587595                  ilen0(1:3) = nblen(1:3) 
     
    614622         ENDIF 
    615623         IF ( ( nn_dyn3d(ib_obc) .gt. 0 .and. nn_dyn3d_dta(ib_obc) .eq. 1 ).or. & 
    616            &  ( ln_full_vel_array(ib_obc) .and. nn_dyn2d(ib_obc) .gt. 0 ) ) THEN 
     624           &  ( ln_full_vel_array(ib_obc) .and. nn_dyn2d(ib_obc) .gt. 0 .and.   & 
     625           &    ( nn_dyn2d_dta(ib_obc) .eq. 1 .or. nn_dyn2d_dta(ib_obc) .eq. 3 ) ) ) THEN 
    617626            jfld = jfld + 1 
    618627            dta_obc(ib_obc)%u3d => bf(jfld)%fnow(:,1,:) 
     
    646655                  ilen0(1:3) = nblenrim(1:3) 
    647656               ENDIF 
    648                ALLOCATE( dta_obc(ib_obc)%ssh(ilen0(1)) ) 
    649                ALLOCATE( dta_obc(ib_obc)%u2d(ilen0(1)) ) 
    650                ALLOCATE( dta_obc(ib_obc)%v2d(ilen0(1)) ) 
     657               ALLOCATE( dta_obc(ib_obc)%frld(ilen0(1)) ) 
     658               ALLOCATE( dta_obc(ib_obc)%hicif(ilen0(1)) ) 
     659               ALLOCATE( dta_obc(ib_obc)%hsnif(ilen0(1)) ) 
    651660            ELSE 
    652661               jfld = jfld + 1 
Note: See TracChangeset for help on using the changeset viewer.