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 6808 for branches/NERC/dev_r5549_BDY_ZEROGRAD/NEMOGCM/NEMO/OPA_SRC/BDY/bdytra.F90 – NEMO

Ignore:
Timestamp:
2016-07-19T10:38:35+02:00 (8 years ago)
Author:
jamesharle
Message:

merge with trunk@6232 for consistency with SSB code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r5549_BDY_ZEROGRAD/NEMOGCM/NEMO/OPA_SRC/BDY/bdytra.F90

    r6807 r6808  
    1616   !!   bdy_tra_frs        : Apply Flow Relaxation Scheme 
    1717   !!---------------------------------------------------------------------- 
    18    USE timing          ! Timing 
    19    USE oce             ! ocean dynamics and tracers variables 
    20    USE dom_oce         ! ocean space and time domain variables  
    21    USE bdy_oce         ! ocean open boundary conditions 
    22    USE bdylib          ! for orlanski library routines 
    23    USE bdydta, ONLY:   bf 
    24    USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    25    USE in_out_manager  ! I/O manager 
    26  
     18   USE oce            ! ocean dynamics and tracers variables 
     19   USE dom_oce        ! ocean space and time domain variables  
     20   USE bdy_oce        ! ocean open boundary conditions 
     21   USE bdylib         ! for orlanski library routines 
     22   USE bdydta   , ONLY:   bf   !  
     23   ! 
     24   USE in_out_manager ! I/O manager 
     25   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
     26   USE timing         ! Timing 
    2727 
    2828   IMPLICIT NONE 
    2929   PRIVATE 
    3030 
    31    PUBLIC bdy_tra      ! routine called in tranxt.F90  
    32    PUBLIC bdy_tra_dmp  ! routine called in step.F90  
     31   PUBLIC   bdy_tra      ! called in tranxt.F90  
     32   PUBLIC   bdy_tra_dmp  ! called in step.F90  
    3333 
    3434   !!---------------------------------------------------------------------- 
     
    4646      !! 
    4747      !!---------------------------------------------------------------------- 
    48       INTEGER, INTENT( in ) :: kt     ! Main time step counter 
    49       !! 
    50       INTEGER               :: ib_bdy ! Loop index 
     48      INTEGER, INTENT(in) ::   kt   ! Main time step counter 
     49      ! 
     50      INTEGER ::   ib_bdy   ! Loop index 
     51      !!---------------------------------------------------------------------- 
    5152 
    5253      DO ib_bdy=1, nb_bdy 
    53  
     54         ! 
    5455         SELECT CASE( cn_tra(ib_bdy) ) 
    55          CASE('none') 
    56             CYCLE 
    57          CASE('frs') 
    58             CALL bdy_tra_frs( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt ) 
    59          CASE('specified') 
    60             CALL bdy_tra_spe( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt ) 
    61          CASE('neumann') 
    62             CALL bdy_tra_nmn( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt ) 
    63          CASE('orlanski') 
    64             CALL bdy_tra_orlanski( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ll_npo=.false. ) 
    65          CASE('orlanski_npo') 
    66             CALL bdy_tra_orlanski( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ll_npo=.true. ) 
    67          CASE('runoff') 
    68             CALL bdy_tra_rnf( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt ) 
    69          CASE DEFAULT 
    70             CALL ctl_stop( 'bdy_tra : unrecognised option for open boundaries for T and S' ) 
     56         CASE('none'        )   ;   CYCLE 
     57         CASE('frs'         )   ;   CALL bdy_tra_frs     ( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt ) 
     58         CASE('specified'   )   ;   CALL bdy_tra_spe     ( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt ) 
     59         CASE('neumann'     )   ;   CALL bdy_tra_nmn     ( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt ) 
     60         CASE('orlanski'    )   ;   CALL bdy_tra_orlanski( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ll_npo=.false. ) 
     61         CASE('orlanski_npo')   ;   CALL bdy_tra_orlanski( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ll_npo=.true. ) 
     62         CASE('runoff'      )   ;   CALL bdy_tra_rnf     ( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt ) 
     63         CASE DEFAULT           ;   CALL ctl_stop( 'bdy_tra : unrecognised option for open boundaries for T and S' ) 
    7164         END SELECT 
    7265         ! Boundary points should be updated 
    7366         CALL lbc_bdy_lnk( tsa(:,:,:,jp_tem), 'T', 1., ib_bdy ) 
    7467         CALL lbc_bdy_lnk( tsa(:,:,:,jp_sal), 'T', 1., ib_bdy ) 
    75       ENDDO 
    76       ! 
    77  
     68      END DO 
     69      ! 
    7870   END SUBROUTINE bdy_tra 
    7971 
     72 
    8073   SUBROUTINE bdy_tra_frs( idx, dta, kt ) 
    8174      !!---------------------------------------------------------------------- 
     
    8679      !! Reference : Engedahl H., 1995, Tellus, 365-382. 
    8780      !!---------------------------------------------------------------------- 
    88       INTEGER,         INTENT(in) ::   kt 
    89       TYPE(OBC_INDEX), INTENT(in) ::   idx  ! OBC indices 
    90       TYPE(OBC_DATA),  INTENT(in) ::   dta  ! OBC external data 
    91       !!  
     81      INTEGER,         INTENT(in) ::   kt    ! 
     82      TYPE(OBC_INDEX), INTENT(in) ::   idx   ! OBC indices 
     83      TYPE(OBC_DATA),  INTENT(in) ::   dta   ! OBC external data 
     84      ! 
    9285      REAL(wp) ::   zwgt           ! boundary weight 
    9386      INTEGER  ::   ib, ik, igrd   ! dummy loop indices 
     
    9588      !!---------------------------------------------------------------------- 
    9689      ! 
    97       IF( nn_timing == 1 ) CALL timing_start('bdy_tra_frs') 
     90      IF( nn_timing == 1 )   CALL timing_start('bdy_tra_frs') 
    9891      ! 
    9992      igrd = 1                       ! Everything is at T-points here 
     
    108101      END DO  
    109102      ! 
    110       IF( kt .eq. nit000 ) CLOSE( unit = 102 ) 
    111       ! 
    112       IF( nn_timing == 1 ) CALL timing_stop('bdy_tra_frs') 
     103      IF( kt .eq. nit000 )   CLOSE( unit = 102 ) 
     104      ! 
     105      IF( nn_timing == 1 )   CALL timing_stop('bdy_tra_frs') 
    113106      ! 
    114107   END SUBROUTINE bdy_tra_frs 
    115    
     108 
     109 
    116110   SUBROUTINE bdy_tra_spe( idx, dta, kt ) 
    117111      !!---------------------------------------------------------------------- 
     
    121115      !!  
    122116      !!---------------------------------------------------------------------- 
    123       INTEGER,         INTENT(in) ::   kt 
    124       TYPE(OBC_INDEX), INTENT(in) ::   idx  ! OBC indices 
    125       TYPE(OBC_DATA),  INTENT(in) ::   dta  ! OBC external data 
    126       !!  
     117      INTEGER,         INTENT(in) ::   kt    ! 
     118      TYPE(OBC_INDEX), INTENT(in) ::   idx   ! OBC indices 
     119      TYPE(OBC_DATA),  INTENT(in) ::   dta   ! OBC external data 
     120      ! 
    127121      REAL(wp) ::   zwgt           ! boundary weight 
    128122      INTEGER  ::   ib, ik, igrd   ! dummy loop indices 
     
    142136      END DO 
    143137      ! 
    144       IF( kt .eq. nit000 ) CLOSE( unit = 102 ) 
    145       ! 
    146       IF( nn_timing == 1 ) CALL timing_stop('bdy_tra_spe') 
     138      IF( kt == nit000 )  CLOSE( unit = 102 ) 
     139      ! 
     140      IF( nn_timing == 1 )   CALL timing_stop('bdy_tra_spe') 
    147141      ! 
    148142   END SUBROUTINE bdy_tra_spe 
    149143 
     144 
    150145   SUBROUTINE bdy_tra_nmn( idx, dta, kt ) 
    151146      !!---------------------------------------------------------------------- 
     
    155150      !!  
    156151      !!---------------------------------------------------------------------- 
    157       INTEGER,         INTENT(in) ::   kt 
    158       TYPE(OBC_INDEX), INTENT(in) ::   idx  ! OBC indices 
    159       TYPE(OBC_DATA),  INTENT(in) ::   dta  ! OBC external data 
    160       !!  
     152      INTEGER,         INTENT(in) ::   kt    !  
     153      TYPE(OBC_INDEX), INTENT(in) ::   idx   ! OBC indices 
     154      TYPE(OBC_DATA) , INTENT(in) ::   dta   ! OBC external data 
     155      ! 
    161156      REAL(wp) ::   zwgt           ! boundary weight 
    162157      REAL(wp) ::   zcoef, zcoef1,zcoef2 
     
    165160      !!---------------------------------------------------------------------- 
    166161      ! 
    167       IF( nn_timing == 1 ) CALL timing_start('bdy_tra_nmn') 
     162      IF( nn_timing == 1 )   CALL timing_start('bdy_tra_nmn') 
    168163      ! 
    169164      igrd = 1                       ! Everything is at T-points here 
     
    197192      END DO 
    198193      ! 
    199       IF( kt .eq. nit000 ) CLOSE( unit = 102 ) 
    200       ! 
    201       IF( nn_timing == 1 ) CALL timing_stop('bdy_tra_nmn') 
     194      IF( kt == nit000 )  CLOSE( unit = 102 ) 
     195      ! 
     196      IF( nn_timing == 1 )   CALL timing_stop('bdy_tra_nmn') 
    202197      ! 
    203198   END SUBROUTINE bdy_tra_nmn 
     
    214209      !! References:  Marchesiello, McWilliams and Shchepetkin, Ocean Modelling vol. 3 (2001)     
    215210      !!---------------------------------------------------------------------- 
    216       TYPE(OBC_INDEX),              INTENT(in) ::   idx  ! OBC indices 
    217       TYPE(OBC_DATA),               INTENT(in) ::   dta  ! OBC external data 
    218       LOGICAL,                      INTENT(in) ::   ll_npo  ! switch for NPO version 
    219  
     211      TYPE(OBC_INDEX), INTENT(in) ::   idx     ! OBC indices 
     212      TYPE(OBC_DATA) , INTENT(in) ::   dta     ! OBC external data 
     213      LOGICAL        , INTENT(in) ::   ll_npo  ! switch for NPO version 
     214      ! 
    220215      INTEGER  ::   igrd                                    ! grid index 
    221216      !!---------------------------------------------------------------------- 
    222  
     217      ! 
    223218      IF( nn_timing == 1 ) CALL timing_start('bdy_tra_orlanski') 
    224219      ! 
     
    231226      CALL bdy_orlanski_3d( idx, igrd, tsb(:,:,:,jp_sal), tsa(:,:,:,jp_sal), dta%sal, ll_npo ) 
    232227      ! 
    233       IF( nn_timing == 1 ) CALL timing_stop('bdy_tra_orlanski') 
    234       ! 
    235  
     228      IF( nn_timing == 1 )   CALL timing_stop('bdy_tra_orlanski') 
     229      ! 
    236230   END SUBROUTINE bdy_tra_orlanski 
    237231 
     
    246240      !!  
    247241      !!---------------------------------------------------------------------- 
    248       INTEGER,         INTENT(in) ::   kt 
    249       TYPE(OBC_INDEX), INTENT(in) ::   idx  ! OBC indices 
    250       TYPE(OBC_DATA),  INTENT(in) ::   dta  ! OBC external data 
    251       !!  
     242      INTEGER        , INTENT(in) ::   kt    !  
     243      TYPE(OBC_INDEX), INTENT(in) ::   idx   ! OBC indices 
     244      TYPE(OBC_DATA) , INTENT(in) ::   dta   ! OBC external data 
     245      ! 
    252246      REAL(wp) ::   zwgt           ! boundary weight 
    253247      INTEGER  ::   ib, ik, igrd   ! dummy loop indices 
     
    255249      !!---------------------------------------------------------------------- 
    256250      ! 
    257       IF( nn_timing == 1 ) CALL timing_start('bdy_tra_rnf') 
     251      IF( nn_timing == 1 )   CALL timing_start('bdy_tra_rnf') 
    258252      ! 
    259253      igrd = 1                       ! Everything is at T-points here 
     
    269263      END DO 
    270264      ! 
    271       IF( kt .eq. nit000 ) CLOSE( unit = 102 ) 
    272       ! 
    273       IF( nn_timing == 1 ) CALL timing_stop('bdy_tra_rnf') 
     265      IF( kt == nit000 )  CLOSE( unit = 102 ) 
     266      ! 
     267      IF( nn_timing == 1 )   CALL timing_stop('bdy_tra_rnf') 
    274268      ! 
    275269   END SUBROUTINE bdy_tra_rnf 
    276270 
     271 
    277272   SUBROUTINE bdy_tra_dmp( kt ) 
    278273      !!---------------------------------------------------------------------- 
     
    282277      !!  
    283278      !!---------------------------------------------------------------------- 
    284       INTEGER,         INTENT(in) ::   kt 
    285       !!  
     279      INTEGER, INTENT(in) ::   kt   ! 
     280      ! 
    286281      REAL(wp) ::   zwgt           ! boundary weight 
    287282      REAL(wp) ::   zta, zsa, ztime 
     
    291286      !!---------------------------------------------------------------------- 
    292287      ! 
    293       IF( nn_timing == 1 ) CALL timing_start('bdy_tra_dmp') 
    294       ! 
    295       DO ib_bdy=1, nb_bdy 
    296          IF ( ln_tra_dmp(ib_bdy) ) THEN 
     288      IF( nn_timing == 1 )   CALL timing_start('bdy_tra_dmp') 
     289      ! 
     290      DO ib_bdy = 1, nb_bdy 
     291         IF( ln_tra_dmp(ib_bdy) ) THEN 
    297292            igrd = 1                       ! Everything is at T-points here 
    298293            DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 
     
    308303            END DO 
    309304         ENDIF 
    310       ENDDO 
    311       ! 
    312       IF( nn_timing == 1 ) CALL timing_stop('bdy_tra_dmp') 
     305      END DO 
     306      ! 
     307      IF( nn_timing == 1 )   CALL timing_stop('bdy_tra_dmp') 
    313308      ! 
    314309   END SUBROUTINE bdy_tra_dmp 
     
    326321      WRITE(*,*) 'bdy_tra_dmp: You should not have seen this print! error?', kt 
    327322   END SUBROUTINE bdy_tra_dmp 
    328  
    329323#endif 
    330324 
Note: See TracChangeset for help on using the changeset viewer.