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 2335 for branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/OBS/obs_mpp.F90 – NEMO

Ignore:
Timestamp:
2010-10-29T09:39:51+02:00 (13 years ago)
Author:
gm
Message:

v3.3beta: Suppress obsolete key_mpp_shmem

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/OBS/obs_mpp.F90

    r2287 r2335  
    1 #if defined key_mpp_mpi 
    2 #if defined key_sp 
    3 #define mpivar mpi_real 
    4 #else 
    5 #define mpivar mpi_double_precision 
    6 #endif 
    7 #endif 
    81MODULE obs_mpp 
    92   !!====================================================================== 
     
    114   !! Observation diagnostics: Various MPP support routines 
    125   !!====================================================================== 
    13  
     6   !! History :  2.0  ! 2006-03  (K. Mogensen)  Original code 
     7   !!             -   ! 2006-05  (K. Mogensen)  Reformatted 
     8   !!             -   ! 2008-01  (K. Mogensen)  add mpp_global_max 
    149   !!---------------------------------------------------------------------- 
    15    !! obs_mpp_bcast_integer : Broadcast an integer array from a processor  
    16    !!                         to all processors 
    17    !! obs_mpp_max_integer   : Find maximum on all processors of each 
    18    !!                         value in an integer on all processors 
     10#if defined key_mpp_mpi 
     11# if defined key_sp 
     12#  define mpivar mpi_real 
     13# else 
     14#  define mpivar mpi_double_precision 
     15# endif 
     16#endif 
     17   !!---------------------------------------------------------------------- 
     18   !! obs_mpp_bcast_integer : Broadcast an integer array from a processor to all processors 
     19   !! obs_mpp_max_integer   : Find maximum on all processors of each value in an integer on all processors 
    1920   !! obs_mpp_find_obs_proc : Find processors which should hold the observations 
    2021   !! obs_mpp_sum_integers  : Sum an integer array from all processors 
    2122   !! obs_mpp_sum_integer   : Sum an integer from all processors 
    2223   !!---------------------------------------------------------------------- 
    23    !! * Modules used    
    24    USE dom_oce, ONLY : &    ! Ocean space and time domain variables 
    25       & nproc, & 
    26       & mig,mjg 
    27    USE mpp_map, ONLY : & 
    28       & mppmap 
     24   USE dom_oce, ONLY :   nproc, mig, mjg   ! Ocean space and time domain variables 
     25   USE mpp_map, ONLY :   mppmap 
    2926   USE in_out_manager 
    3027#if defined key_mpp_mpi 
    31    USE lib_mpp, ONLY : &    ! MPP library 
    32       & mpi_comm_opa 
     28   USE lib_mpp, ONLY :   mpi_comm_opa      ! MPP library 
    3329#endif 
    3430   IMPLICIT NONE 
    35  
    36    !! * Routine accessibility 
    3731   PRIVATE 
    3832 
    39    PUBLIC obs_mpp_bcast_integer, & ! Broadcast an integer array from a proc to all procs 
    40       &   obs_mpp_max_integer,   & ! Find maximum across processors in an integer array 
    41       &   obs_mpp_find_obs_proc, & ! Find processors which should hold the observations 
    42       &   obs_mpp_sum_integers,  & ! Sum an integer array from all processors 
    43       &   obs_mpp_sum_integer,   & ! Sum an integer from all processors 
     33   PUBLIC obs_mpp_bcast_integer, & !: Broadcast an integer array from a proc to all procs 
     34      &   obs_mpp_max_integer,   & !: Find maximum across processors in an integer array 
     35      &   obs_mpp_find_obs_proc, & !: Find processors which should hold the observations 
     36      &   obs_mpp_sum_integers,  & !: Sum an integer array from all processors 
     37      &   obs_mpp_sum_integer,   & !: Sum an integer from all processors 
    4438      &   mpp_alltoall_int,      & 
    4539      &   mpp_alltoallv_int,     & 
     
    5044   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    5145   !! $Id$ 
    52    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
     46   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    5347   !!---------------------------------------------------------------------- 
    54  
    5548CONTAINS 
    5649 
    57    SUBROUTINE obs_mpp_bcast_integer(kvals,kno,kroot) 
     50   SUBROUTINE obs_mpp_bcast_integer( kvals, kno, kroot ) 
    5851      !!---------------------------------------------------------------------- 
    5952      !!               ***  ROUTINE obs_mpp_bcast_integer *** 
     
    6457      !! 
    6558      !! ** Action  : This does only work for MPI.  
    66       !!              It does not work for SHMEM. 
    6759      !!              MPI_COMM_OPA needs to be replace for OASIS4.! 
    6860      !! 
    6961      !! References : http://www.mpi-forum.org 
    70       !! 
    71       !! History : 
    72       !!        !  06-03  (K. Mogensen)  Original code 
    73       !!        !  06-05  (K. Mogensen)  Reformatted 
    74       !!---------------------------------------------------------------------- 
    75  
    76       !! * Arguments 
    77       INTEGER, INTENT(IN) :: kno       ! Number of elements in array 
    78       INTEGER, INTENT(IN) :: kroot      ! Processor to send data 
    79       INTEGER, DIMENSION(kno), INTENT(INOUT) :: & 
    80          & kvals         ! Array to send on kroot, receive for non-kroot 
     62      !!---------------------------------------------------------------------- 
     63      INTEGER                , INTENT(in   ) ::   kno     ! Number of elements in array 
     64      INTEGER                , INTENT(in   ) ::   kroot   ! Processor to send data 
     65      INTEGER, DIMENSION(kno), INTENT(inout) ::   kvals   ! Array to send on kroot, receive for non-kroot 
     66      !! 
     67#if defined key_mpp_mpi 
     68      INTEGER :: ierr 
     69INCLUDE 'mpif.h' 
     70      !!---------------------------------------------------------------------- 
     71 
     72      ! Call the MPI library to broadcast data 
     73      CALL mpi_bcast( kvals, kno, mpi_integer,  & 
     74         &            kroot, mpi_comm_opa, ierr ) 
     75#else 
     76      ! no MPI: empty routine 
     77#endif 
     78      ! 
     79   END SUBROUTINE obs_mpp_bcast_integer 
     80 
    8181   
    82 #if defined key_mpp_mpi 
    83       !! * Local declarations 
    84       INTEGER :: ierr 
    85 INCLUDE 'mpif.h' 
    86  
    87       !----------------------------------------------------------------------- 
    88       ! Call the MPI library to broadcast data 
    89       !----------------------------------------------------------------------- 
    90       CALL mpi_bcast( kvals, kno, mpi_integer, & 
    91          &            kroot, mpi_comm_opa, ierr ) 
    92 #elif defined key_mpp_shmem 
    93 error "Only MPI support for MPP in NEMOVAR" 
    94 #endif 
    95  
    96    END SUBROUTINE obs_mpp_bcast_integer 
    97      
    9882   SUBROUTINE obs_mpp_max_integer( kvals, kno ) 
    9983      !!---------------------------------------------------------------------- 
     
    10993      !! 
    11094      !! References : http://www.mpi-forum.org 
    111       !! 
    112       !! History : 
    113       !!        !  06-03  (K. Mogensen)  Original code 
    114       !!        !  06-05  (K. Mogensen)  Reformatted 
    115       !!---------------------------------------------------------------------- 
    116  
    117       !! * Arguments 
    118       INTEGER, INTENT(IN) ::kno       ! Number of elements in array 
    119       INTEGER, DIMENSION(kno), INTENT(INOUT) :: & 
    120          & kvals     ! Array to send on kroot, receive for non-kroot   
    121  
    122 #if defined key_mpp_mpi 
    123       !! * Local declarations 
    124       INTEGER :: ierr 
    125       INTEGER, DIMENSION(kno) :: & 
    126          & ivals 
    127 INCLUDE 'mpif.h' 
    128  
    129       !----------------------------------------------------------------------- 
     95      !!---------------------------------------------------------------------- 
     96      INTEGER                , INTENT(in   ) ::   kno     ! Number of elements in array 
     97      INTEGER, DIMENSION(kno), INTENT(inout) ::   kvals   ! Array to send on kroot, receive for non-kroot   
     98      !! 
     99#if defined key_mpp_mpi 
     100      INTEGER :: ierr 
     101      INTEGER, DIMENSION(kno) ::   ivals 
     102INCLUDE 'mpif.h' 
     103      !!---------------------------------------------------------------------- 
     104 
    130105      ! Call the MPI library to find the maximum across processors 
    131       !----------------------------------------------------------------------- 
    132       CALL mpi_allreduce( kvals, ivals, kno, mpi_integer, & 
     106      CALL mpi_allreduce( kvals, ivals, kno, mpi_integer,   & 
    133107         &                mpi_max, mpi_comm_opa, ierr ) 
    134108      kvals(:) = ivals(:) 
    135 #elif defined key_mpp_shmem 
    136 error "Only MPI support for MPP in NEMOVAR" 
     109#else 
     110      ! no MPI: empty routine 
    137111#endif 
    138112   END SUBROUTINE obs_mpp_max_integer 
    139113 
    140    SUBROUTINE obs_mpp_find_obs_proc(kobsp,kobsi,kobsj,kno) 
     114 
     115   SUBROUTINE obs_mpp_find_obs_proc( kobsp, kobsi, kobsj, kno ) 
    141116      !!---------------------------------------------------------------------- 
    142117      !!               ***  ROUTINE obs_mpp_find_obs_proc *** 
     
    155130      !! 
    156131      !! References : http://www.mpi-forum.org 
    157       !! 
    158       !! History : 
    159       !!        !  06-07  (K. Mogensen)  Original code 
    160       !!---------------------------------------------------------------------- 
    161  
    162       !! * Arguments 
    163       INTEGER, INTENT(IN) :: kno 
    164       INTEGER, DIMENSION(kno), INTENT(IN) :: & 
    165          & kobsi, & 
    166          & kobsj 
    167       INTEGER, DIMENSION(kno), INTENT(INOUT) :: & 
    168          & kobsp 
    169  
    170 #if defined key_mpp_mpi 
    171       !! * Local declarations 
     132      !!---------------------------------------------------------------------- 
     133      INTEGER                , INTENT(in   ) ::   kno 
     134      INTEGER, DIMENSION(kno), INTENT(in   ) ::   kobsi, kobsj 
     135      INTEGER, DIMENSION(kno), INTENT(inout) ::   kobsp 
     136      !! 
     137#if defined key_mpp_mpi 
    172138      INTEGER :: ji 
    173139      INTEGER :: jj 
     
    177143      INTEGER :: iobsjp 
    178144      INTEGER :: num_sus_obs 
    179       INTEGER, DIMENSION(kno) :: & 
    180          & iobsig, & 
    181          & iobsjg 
    182       INTEGER, ALLOCATABLE, DIMENSION(:,:) :: & 
    183          & iobsp, iobsi, iobsj 
    184  
    185 INCLUDE 'mpif.h' 
     145      INTEGER, DIMENSION(kno) ::   iobsig, iobsjg 
     146      INTEGER, ALLOCATABLE, DIMENSION(:,:) ::   iobsp, iobsi, iobsj 
     147      !! 
     148INCLUDE 'mpif.h' 
     149      !!---------------------------------------------------------------------- 
    186150 
    187151      !----------------------------------------------------------------------- 
     
    258222      DEALLOCATE( iobsi ) 
    259223      DEALLOCATE( iobsp ) 
    260 #elif defined key_mpp_shmem 
    261 error "Only MPI support for MPP in NEMOVAR" 
    262 #endif 
    263  
     224#else 
     225      ! no MPI: empty routine 
     226#endif 
     227      ! 
    264228   END SUBROUTINE obs_mpp_find_obs_proc 
    265229 
     230 
    266231   SUBROUTINE obs_mpp_sum_integers( kvalsin, kvalsout, kno ) 
    267232      !!---------------------------------------------------------------------- 
     
    276241      !! 
    277242      !! References : http://www.mpi-forum.org 
    278       !! 
    279       !! History : 
    280       !!        !  06-07  (K. Mogensen)  Original code 
    281       !!---------------------------------------------------------------------- 
    282  
    283       !! * Arguments 
    284       INTEGER, INTENT(IN) :: kno 
    285       INTEGER, DIMENSION(kno), INTENT(IN) :: & 
    286          & kvalsin 
    287       INTEGER, DIMENSION(kno), INTENT(OUT) :: & 
    288          & kvalsout 
    289  
    290 #if defined key_mpp_mpi 
    291       !! * Local declarations 
    292       INTEGER :: ierr 
    293 INCLUDE 'mpif.h' 
    294   
     243      !!---------------------------------------------------------------------- 
     244      INTEGER                , INTENT(in   ) :: kno 
     245      INTEGER, DIMENSION(kno), INTENT(in   ) ::   kvalsin 
     246      INTEGER, DIMENSION(kno), INTENT(  out) ::   kvalsout 
     247      !! 
     248#if defined key_mpp_mpi 
     249      INTEGER :: ierr 
     250      !! 
     251INCLUDE 'mpif.h' 
     252      !!---------------------------------------------------------------------- 
     253      ! 
    295254      !----------------------------------------------------------------------- 
    296255      ! Call the MPI library to find the sum across processors 
     
    298257      CALL mpi_allreduce( kvalsin, kvalsout, kno, mpi_integer, & 
    299258         &                mpi_sum, mpi_comm_opa, ierr ) 
    300 #elif defined key_mpp_shmem 
    301 error "Only MPI support for MPP in NEMOVAR" 
    302 #else 
    303  
     259#else 
    304260      !----------------------------------------------------------------------- 
    305261      ! For no-MPP just return input values 
     
    307263      kvalsout(:) = kvalsin(:) 
    308264#endif 
    309  
     265      ! 
    310266   END SUBROUTINE obs_mpp_sum_integers 
    311267 
     268 
    312269   SUBROUTINE obs_mpp_sum_integer( kvalin, kvalout ) 
    313270      !!---------------------------------------------------------------------- 
     
    322279      !! 
    323280      !! References : http://www.mpi-forum.org 
    324       !! 
    325       !! History : 
    326       !!        !  06-07  (K. Mogensen)  Original code 
    327       !!---------------------------------------------------------------------- 
    328  
    329       !! * Arguments 
    330       INTEGER, INTENT(IN) :: kvalin 
    331       INTEGER, INTENT(OUT) :: kvalout 
    332  
    333 #if defined key_mpp_mpi 
    334       !! * Local declarations 
    335       INTEGER :: ierr 
    336 INCLUDE 'mpif.h' 
    337  
     281      !!---------------------------------------------------------------------- 
     282      INTEGER, INTENT(in   ) ::   kvalin 
     283      INTEGER, INTENT(  out) ::   kvalout 
     284      !! 
     285#if defined key_mpp_mpi 
     286      INTEGER :: ierr 
     287      !! 
     288INCLUDE 'mpif.h' 
     289      !!---------------------------------------------------------------------- 
     290      ! 
    338291      !----------------------------------------------------------------------- 
    339292      ! Call the MPI library to find the sum across processors 
    340293      !----------------------------------------------------------------------- 
    341       CALL mpi_allreduce( kvalin, kvalout, 1, mpi_integer, & 
     294      CALL mpi_allreduce( kvalin, kvalout, 1, mpi_integer,   & 
    342295         &                mpi_sum, mpi_comm_opa, ierr ) 
    343 #elif defined key_mpp_shmem 
    344 error "Only MPI support for MPP in NEMOVAR" 
    345 #else 
    346  
     296#else 
    347297      !----------------------------------------------------------------------- 
    348298      ! For no-MPP just return input values 
     
    350300      kvalout = kvalin 
    351301#endif 
     302      ! 
    352303   END SUBROUTINE obs_mpp_sum_integer 
     304 
    353305 
    354306   SUBROUTINE mpp_global_max( pval ) 
     
    365317      !! 
    366318      !! References : http://www.mpi-forum.org 
    367       !! 
    368       !! History : 
    369       !!        !  08-01  (K. Mogensen)  Original code 
    370       !!---------------------------------------------------------------------- 
    371  
    372       !! * Arguments 
    373       REAL(KIND=wp), DIMENSION(jpiglo,jpjglo), INTENT(INOUT) :: & 
    374          & pval 
    375       !! * Local declarations 
    376       INTEGER :: ierr 
    377 #if defined key_mpp_mpi 
    378 INCLUDE 'mpif.h' 
    379       REAL(KIND=wp), DIMENSION(:,:), ALLOCATABLE :: & 
    380          & zcp 
     319      !!---------------------------------------------------------------------- 
     320      REAL(KIND=wp), DIMENSION(jpiglo,jpjglo), INTENT(inout) ::   pval 
     321      !! 
     322      INTEGER :: ierr 
     323#if defined key_mpp_mpi 
     324INCLUDE 'mpif.h' 
     325      REAL(KIND=wp), DIMENSION(:,:), ALLOCATABLE ::   zcp 
     326      !!---------------------------------------------------------------------- 
    381327 
    382328      ! Copy data for input to MPI 
     
    396342         & ) 
    397343 
    398 #elif defined key_mpp_shmem 
    399 error "Only MPI support for MPP in NEMOVAR" 
    400 #endif 
    401        
     344#else 
     345      ! no MPI: empty routine 
     346#endif 
     347      ! 
    402348   END SUBROUTINE mpp_global_max 
    403349 
     350 
    404351   SUBROUTINE mpp_alltoall_int( kno, kvalsin, kvalsout ) 
    405352      !!---------------------------------------------------------------------- 
     
    414361      !! 
    415362      !! References : http://www.mpi-forum.org 
    416       !! 
    417       !! History : 
    418       !!        !  06-09  (K. Mogensen)  Original code 
    419       !!---------------------------------------------------------------------- 
    420  
    421       !! * Arguments 
    422       INTEGER, INTENT(IN) :: kno 
    423       INTEGER, DIMENSION(kno*jpnij), INTENT(IN) :: & 
    424          & kvalsin 
    425       INTEGER, DIMENSION(kno*jpnij), INTENT(OUT) :: & 
    426          & kvalsout 
    427       !! * Local declarations 
     363      !!---------------------------------------------------------------------- 
     364      INTEGER                      , INTENT(in   ) ::   kno 
     365      INTEGER, DIMENSION(kno*jpnij), INTENT(in   ) ::   kvalsin 
     366      INTEGER, DIMENSION(kno*jpnij), INTENT(  out) ::   kvalsout 
     367      !! 
    428368      INTEGER :: ierr 
    429369#if defined key_mpp_mpi 
     
    435375         &               kvalsout, kno, mpi_integer, & 
    436376         &               mpi_comm_opa, ierr ) 
    437 #elif defined key_mpp_shmem 
    438 error "Only MPI support for MPP in NEMOVAR" 
    439377#else 
    440378      !----------------------------------------------------------------------- 
     
    443381      kvalsout = kvalsin 
    444382#endif 
    445        
     383      ! 
    446384   END SUBROUTINE mpp_alltoall_int 
    447385 
    448    SUBROUTINE mpp_alltoallv_int( kvalsin, knoin, kinv, kvalsout, & 
    449       &                              knoout, koutv ) 
     386 
     387   SUBROUTINE mpp_alltoallv_int( kvalsin, knoin , kinv , kvalsout,   & 
     388      &                                   knoout, koutv ) 
    450389      !!---------------------------------------------------------------------- 
    451390      !!               ***  ROUTINE mpp_alltoallv_int *** 
     
    459398      !! 
    460399      !! References : http://www.mpi-forum.org 
    461       !! 
    462       !! History : 
    463       !!        !  06-09  (K. Mogensen)  Original code 
    464       !!---------------------------------------------------------------------- 
    465  
    466       !! * Arguments 
    467       INTEGER, INTENT(IN) :: knoin 
    468       INTEGER, INTENT(IN) :: knoout 
    469       INTEGER, DIMENSION(jpnij) :: & 
    470          & kinv, & 
    471          & koutv 
    472       INTEGER, DIMENSION(knoin), INTENT(IN) :: & 
    473          & kvalsin 
    474       INTEGER, DIMENSION(knoout), INTENT(OUT) :: & 
    475          & kvalsout 
    476       !! * Local declarations 
     400      !!---------------------------------------------------------------------- 
     401      INTEGER                   , INTENT(in) :: knoin 
     402      INTEGER                   , INTENT(in) :: knoout 
     403      INTEGER, DIMENSION(jpnij)                 ::   kinv, koutv 
     404      INTEGER, DIMENSION(knoin) , INTENT(in   ) ::   kvalsin 
     405      INTEGER, DIMENSION(knoout), INTENT(  out) ::   kvalsout 
     406      !! 
    477407      INTEGER :: ierr 
    478408      INTEGER :: jproc 
    479409#if defined key_mpp_mpi 
    480410INCLUDE 'mpif.h' 
    481       INTEGER, DIMENSION(jpnij) :: & 
    482          & irdsp, & 
    483          & isdsp 
     411      INTEGER, DIMENSION(jpnij) ::   irdsp, isdsp 
    484412      !----------------------------------------------------------------------- 
    485413      ! Compute displacements 
     
    497425         &                kvalsout, koutv, irdsp, mpi_integer, & 
    498426         &                mpi_comm_opa, ierr ) 
    499 #elif defined key_mpp_shmem 
    500 error "Only MPI support for MPP in NEMOVAR" 
    501427#else 
    502428      !----------------------------------------------------------------------- 
     
    505431      kvalsout = kvalsin 
    506432#endif 
    507        
     433      ! 
    508434   END SUBROUTINE mpp_alltoallv_int 
    509435 
    510    SUBROUTINE mpp_alltoallv_real( pvalsin, knoin, kinv, pvalsout, & 
    511       &                               knoout, koutv ) 
     436 
     437   SUBROUTINE mpp_alltoallv_real( pvalsin, knoin , kinv , pvalsout,   & 
     438      &                                    knoout, koutv ) 
    512439      !!---------------------------------------------------------------------- 
    513440      !!               ***  ROUTINE mpp_alltoallv_real *** 
     
    521448      !! 
    522449      !! References : http://www.mpi-forum.org 
    523       !! 
    524       !! History : 
    525       !!        !  06-09  (K. Mogensen)  Original code 
    526       !!---------------------------------------------------------------------- 
    527  
    528       !! * Arguments 
    529       INTEGER, INTENT(IN) :: knoin 
    530       INTEGER, INTENT(IN) :: knoout 
    531       INTEGER, DIMENSION(jpnij) :: & 
    532          & kinv, & 
    533          & koutv 
    534       REAL(KIND=wp), DIMENSION(knoin), INTENT(IN) :: & 
    535          & pvalsin 
    536       REAL(KIND=wp), DIMENSION(knoout), INTENT(OUT) :: & 
    537          & pvalsout 
    538       !! * Local declarations 
     450      !!---------------------------------------------------------------------- 
     451      INTEGER                    , INTENT(in   ) :: knoin 
     452      INTEGER                    , INTENT(in   ) :: knoout 
     453      INTEGER , DIMENSION(jpnij)                 ::   kinv, koutv 
     454      REAL(wp), DIMENSION(knoin) , INTENT(in   ) ::   pvalsin 
     455      REAL(wp), DIMENSION(knoout), INTENT(  out) ::   pvalsout 
     456      !! 
    539457      INTEGER :: ierr 
    540458      INTEGER :: jproc 
    541459#if defined key_mpp_mpi 
    542460INCLUDE 'mpif.h' 
    543       INTEGER, DIMENSION(jpnij) :: & 
    544          & irdsp, & 
    545          & isdsp 
     461      INTEGER, DIMENSION(jpnij) ::   irdsp, isdsp 
     462      !!---------------------------------------------------------------------- 
     463      ! 
    546464      !----------------------------------------------------------------------- 
    547465      ! Compute displacements 
     
    559477         &                pvalsout, koutv, irdsp, mpivar, & 
    560478         &                mpi_comm_opa, ierr ) 
    561 #elif defined key_mpp_shmem 
    562 error "Only MPI support for MPP in NEMOVAR" 
    563479#else 
    564480      !----------------------------------------------------------------------- 
     
    567483      pvalsout = pvalsin 
    568484#endif 
    569        
     485      ! 
    570486   END SUBROUTINE mpp_alltoallv_real 
    571487 
     488   !!====================================================================== 
    572489END MODULE obs_mpp 
Note: See TracChangeset for help on using the changeset viewer.