Changeset 5296


Ignore:
Timestamp:
2015-05-27T12:47:55+02:00 (5 years ago)
Author:
pabouttier
Message:

Commit stochastic parametrization module and perturbation of EOS

Location:
branches/2015/dev_r5177_CNRS4_stopar/NEMOGCM
Files:
3 added
5 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5177_CNRS4_stopar/NEMOGCM/CONFIG/SHARED/namelist_ref

    r5147 r5296  
    5050!!                      ***  Domain namelists  *** 
    5151!!====================================================================== 
    52 !!   namcfg       parameters of the configuration       
     52!!   namcfg       parameters of the configuration 
    5353!!   namzgr       vertical coordinate 
    5454!!   namzgr_sco   s-coordinate or hybrid z-s-coordinate 
     
    5858! 
    5959!----------------------------------------------------------------------- 
    60 &namcfg     !   parameters of the configuration       
     60&namcfg     !   parameters of the configuration 
    6161!----------------------------------------------------------------------- 
    6262   cp_cfg      =  "default"            !  name of the configuration 
     
    7272   jperio      =       0               !  lateral cond. type (between 0 and 6) 
    7373                                       !  = 0 closed                 ;   = 1 cyclic East-West 
    74                                        !  = 2 equatorial symmetric   ;   = 3 North fold T-point pivot  
     74                                       !  = 2 equatorial symmetric   ;   = 3 North fold T-point pivot 
    7575                                       !  = 4 cyclic East-West AND North fold T-point pivot 
    7676                                       !  = 5 North fold F-point pivot 
    7777                                       !  = 6 cyclic East-West AND North fold F-point pivot 
    78    ln_use_jattr = .false.              !  use (T) the file attribute: open_ocean_jstart, if present  
     78   ln_use_jattr = .false.              !  use (T) the file attribute: open_ocean_jstart, if present 
    7979                                       !  in netcdf input files, as the start j-row for reading 
    8080/ 
     
    101101                        !!!!!!!  SH94 stretching coefficients  (ln_s_sh94 = .true.) 
    102102   rn_theta    =    6.0    !  surface control parameter (0<=theta<=20) 
    103    rn_bb       =    0.8    !  stretching with SH94 s-sigma    
     103   rn_bb       =    0.8    !  stretching with SH94 s-sigma 
    104104                        !!!!!!!  SF12 stretching coefficient  (ln_s_sf12 = .true.) 
    105105   rn_alpha    =    4.4    !  stretching with SF12 s-sigma 
     
    110110   rn_zb_b     =   -0.2    !  offset for calculating Zb 
    111111                        !!!!!!!! Other stretching (not SH94 or SF12) [also uses rn_theta above] 
    112    rn_thetb    =    1.0    !  bottom control parameter  (0<=thetb<= 1)  
     112   rn_thetb    =    1.0    !  bottom control parameter  (0<=thetb<= 1) 
    113113/ 
    114114!----------------------------------------------------------------------- 
     
    164164   nn_baro       =    30               !  Number of iterations of barotropic mode 
    165165                                       !  during rn_rdt seconds. Only used if ln_bt_nn_auto=F 
    166    rn_bt_cmax    =    0.8              !  Maximum courant number allowed if ln_bt_nn_auto=T  
     166   rn_bt_cmax    =    0.8              !  Maximum courant number allowed if ln_bt_nn_auto=T 
    167167   nn_bt_flt     =    1                !  Time filter choice 
    168168                                       !  = 0 None 
    169169                                       !  = 1 Boxcar over   nn_baro barotropic steps 
    170                                        !  = 2 Boxcar over 2*nn_baro     "        "   
     170                                       !  = 2 Boxcar over 2*nn_baro     "        " 
    171171/ 
    172172!----------------------------------------------------------------------- 
     
    245245   ln_rnf      = .true.    !  runoffs                                   (T   => fill namsbc_rnf) 
    246246   nn_isf      = 0         !  ice shelf melting/freezing                (/=0 => fill namsbc_isf) 
    247                            !  0 =no isf                  1 = presence of ISF  
    248                            !  2 = bg03 parametrisation   3 = rnf file for isf    
     247                           !  0 =no isf                  1 = presence of ISF 
     248                           !  2 = bg03 parametrisation   3 = rnf file for isf 
    249249                           !  4 = ISF fwf specified 
    250250                           !  option 1 and 4 need ln_isfcav = .true. (domzgr) 
     
    277277&namsbc_flx    !   surface boundary condition : flux formulation 
    278278!----------------------------------------------------------------------- 
    279 !              !  file name  ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask !  
     279!              !  file name  ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
    280280!              !             !  (if <0  months)  !   name    !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      ! 
    281281   sn_utau     = 'utau'      ,        24         , 'utau'    , .false.      , .false., 'yearly'  , ''       , ''       , '' 
     
    320320   ln_taudif   = .false.   !  HF tau contribution: use "mean of stress module - module of the mean stress" data 
    321321   rn_zqt      = 10.        !  Air temperature and humidity reference height (m) 
    322    rn_zu       = 10.        !  Wind vector reference height (m)                  
     322   rn_zu       = 10.        !  Wind vector reference height (m) 
    323323   rn_pfac     = 1.        !  multiplicative factor for precipitation (total & snow) 
    324324   rn_efac     = 1.        !  multiplicative factor for evaporation (0. or 1.) 
    325    rn_vfac     = 0.        !  multiplicative factor for ocean/ice velocity  
     325   rn_vfac     = 0.        !  multiplicative factor for ocean/ice velocity 
    326326                           !  in the calculation of the wind stress (0.=absolute winds or 1.=relative winds) 
    327327/ 
     
    373373!              !  file name  ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
    374374!              !             !  (if <0  months)  !   name    !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      ! 
    375    sn_usp      = 'sas_grid_U' ,    120           , 'vozocrtx' ,  .true.    , .true. ,   'yearly'  , ''       , ''             , ''       
     375   sn_usp      = 'sas_grid_U' ,    120           , 'vozocrtx' ,  .true.    , .true. ,   'yearly'  , ''       , ''             , '' 
    376376   sn_vsp      = 'sas_grid_V' ,    120           , 'vomecrty' ,  .true.    , .true. ,   'yearly'  , ''       , ''             , '' 
    377377   sn_tem      = 'sas_grid_T' ,    120           , 'sosstsst' ,  .true.    , .true. ,   'yearly'  , ''       , ''             , '' 
     
    422422/ 
    423423!----------------------------------------------------------------------- 
    424 &namsbc_isf    !  Top boundary layer (ISF)  
     424&namsbc_isf    !  Top boundary layer (ISF) 
    425425!----------------------------------------------------------------------- 
    426426!              ! file name ! frequency (hours) ! variable ! time interpol. !  clim   ! 'yearly'/ ! weights  ! rotation ! 
     
    499499                                                      ! Initial mass required for an iceberg of each class 
    500500      rn_initial_mass          = 8.8e7, 4.1e8, 3.3e9, 1.8e10, 3.8e10, 7.5e10, 1.2e11, 2.2e11, 3.9e11, 7.4e11 
    501                                                       ! Proportion of calving mass to apportion to each class   
     501                                                      ! Proportion of calving mass to apportion to each class 
    502502      rn_distribution          = 0.24, 0.12, 0.15, 0.18, 0.12, 0.07, 0.03, 0.03, 0.03, 0.02 
    503503                                                      ! Ratio between effective and real iceberg mass (non-dim) 
    504                                                       ! i.e. number of icebergs represented at a point          
     504                                                      ! i.e. number of icebergs represented at a point 
    505505      rn_mass_scaling          = 2000, 200, 50, 20, 10, 5, 2, 1, 1, 1 
    506506                                                      ! thickness of newly calved bergs (m) 
     
    511511      rn_bits_erosion_fraction = 0.                   ! Fraction of erosion melt flux to divert to bergy bits 
    512512      rn_sicn_shift            = 0.                   ! Shift of sea-ice concn in erosion flux (0<sicn_shift<1) 
    513       ln_passive_mode          = .false.              ! iceberg - ocean decoupling    
     513      ln_passive_mode          = .false.              ! iceberg - ocean decoupling 
    514514      nn_test_icebergs         =  10                  ! Create test icebergs of this class (-1 = no) 
    515515                                                      ! Put a test iceberg at each gridpoint in box (lon1,lon2,lat1,lat2) 
    516516      rn_test_box              = 108.0,  116.0, -66.0, -58.0 
    517       rn_speed_limit           = 0.                   ! CFL speed limit for a berg    
     517      rn_speed_limit           = 0.                   ! CFL speed limit for a berg 
    518518 
    519519!              ! file name ! frequency (hours) !   variable   ! time interp.   !  clim   ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
    520520!              !           !  (if <0  months)  !     name     !   (logical)    !  (T/F ) ! 'monthly' ! filename ! pairing  ! filename      ! 
    521521      sn_icb =  'calving' ,       -1           , 'calvingmask',  .true.        , .true.  , 'yearly'  , ''       , ''       , '' 
    522     
    523       cn_dir = './'  
     522 
     523      cn_dir = './' 
    524524/ 
    525525 
     
    607607                                          !  = 2, use tidal harmonic forcing data from files 
    608608                                          !  = 3, use external data AND tidal harmonic forcing 
    609     cn_dyn3d      =  'none'               !   
     609    cn_dyn3d      =  'none'               ! 
    610610    nn_dyn3d_dta  =  0                    !  = 0, bdy data are equal to the initial state 
    611611                                          !  = 1, bdy data are read in 'bdydata   .nc' files 
    612     cn_tra        =  'none'               !  
     612    cn_tra        =  'none'               ! 
    613613    nn_tra_dta    =  0                    !  = 0, bdy data are equal to the initial state 
    614614                                          !  = 1, bdy data are read in 'bdydata   .nc' files 
    615     cn_ice_lim      =  'none'             !   
     615    cn_ice_lim      =  'none'             ! 
    616616    nn_ice_lim_dta  =  0                  !  = 0, bdy data are equal to the initial state 
    617617                                          !  = 1, bdy data are read in 'bdydata   .nc' files 
     
    622622    ln_tra_dmp    =.false.                !  open boudaries conditions for tracers 
    623623    ln_dyn3d_dmp  =.false.                !  open boundary condition for baroclinic velocities 
    624     rn_time_dmp   =  1.                   ! Damping time scale in days  
     624    rn_time_dmp   =  1.                   ! Damping time scale in days 
    625625    rn_time_dmp_out =  1.                 ! Outflow damping time scale 
    626626    nn_rimwidth   = 10                    !  width of the relaxation zone 
     
    675675   rn_bfri2_max =   1.e-1  !  max. bottom drag coefficient (non linear case and ln_loglayer=T) 
    676676   rn_bfeb2    =    2.5e-3 !  bottom turbulent kinetic energy background  (m2/s2) 
    677    rn_bfrz0    =    3.e-3  !  bottom roughness [m] if ln_loglayer=T  
     677   rn_bfrz0    =    3.e-3  !  bottom roughness [m] if ln_loglayer=T 
    678678   ln_bfr2d    = .false.   !  horizontal variation of the bottom friction coef (read a 2D mask file ) 
    679679   rn_bfrien   =    50.    !  local multiplying factor of bfr (ln_bfr2d=T) 
     
    721721!----------------------------------------------------------------------- 
    722722   nn_eos      =  -1     !  type of equation of state and Brunt-Vaisala frequency 
    723                                  !  =-1, TEOS-10  
    724                                  !  = 0, EOS-80  
     723                                 !  =-1, TEOS-10 
     724                                 !  = 0, EOS-80 
    725725                                 !  = 1, S-EOS   (simplified eos) 
    726726   ln_useCT    = .true.  ! use of Conservative Temp. ==> surface CT converted in Pot. Temp. in sbcssm 
     
    820820&nam_vvl    !   vertical coordinate options 
    821821!----------------------------------------------------------------------- 
    822    ln_vvl_zstar  = .true.           !  zstar vertical coordinate                    
     822   ln_vvl_zstar  = .true.           !  zstar vertical coordinate 
    823823   ln_vvl_ztilde = .false.          !  ztilde vertical coordinate: only high frequency variations 
    824824   ln_vvl_layer  = .false.          !  full layer vertical coordinate 
     
    11741174   ln_sst     = .false.     ! Logical switch for SST observations 
    11751175   ln_reysst  = .false.     !     ln_reysst               Logical switch for Reynolds observations 
    1176    ln_ghrsst  = .false.    !     ln_ghrsst               Logical switch for GHRSST observations       
     1176   ln_ghrsst  = .false.    !     ln_ghrsst               Logical switch for GHRSST observations 
    11771177 
    11781178   ln_sstfb   = .false.    ! Logical switch for feedback SST data 
     
    12011201   sstfbfiles = 'sst_01.nc' 
    12021202                           !     seaicefiles             Sea Ice input observation file names 
    1203    seaicefiles = 'seaice_01.nc'   
     1203   seaicefiles = 'seaice_01.nc' 
    12041204                           !     velavcurfiles           Vel. cur. daily av. input file name 
    12051205                           !     velhvcurfiles           Vel. cur. high freq. input file name 
     
    12661266   rn_htrmax         =  200.0   ! max. depth of transition range 
    12671267/ 
     1268!----------------------------------------------------------------------- 
     1269&namsto       ! Stochastic parametrization of EOS 
     1270!----------------------------------------------------------------------- 
     1271   ln_rststo = .false.           ! start from mean parameter (F) or from restart file (T) 
     1272   ln_rstseed = .true.           ! read seed of RNG from restart file 
     1273   cn_storst_in  = "restart_sto" !  suffix of stochastic parameter restart file (input) 
     1274   cn_storst_out = "restart_sto" !  suffix of stochastic parameter restart file (output) 
     1275 
     1276   ln_sto_eos = .false.          ! stochastic equation of state 
     1277   nn_sto_eos = 1                ! number of independent random walks 
     1278   rn_eos_stdxy = 1.4            ! random walk horz. standard deviation (in grid points) 
     1279   rn_eos_stdz  = 0.7            ! random walk vert. standard deviation (in grid points) 
     1280   rn_eos_tcor  = 1440.0         ! random walk time correlation (in timesteps) 
     1281   nn_eos_ord  = 1               ! order of autoregressive processes 
     1282   nn_eos_flt  = 0               ! passes of Laplacian filter 
     1283   rn_eos_lim  = 2.0             ! limitation factor (default = 3.0) 
     1284/ 
  • branches/2015/dev_r5177_CNRS4_stopar/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90

    r5147 r5296  
    3030   !!   eos_insitu_2d  : Compute the in situ density for 2d fields 
    3131   !!   bn2            : Compute the Brunt-Vaisala frequency 
    32    !!   eos_rab        : generic interface of in situ thermal/haline expansion ratio  
     32   !!   eos_rab        : generic interface of in situ thermal/haline expansion ratio 
    3333   !!   eos_rab_3d     : compute in situ thermal/haline expansion ratio 
    3434   !!   eos_rab_2d     : compute in situ thermal/haline expansion ratio for 2d fields 
     
    4242   USE in_out_manager  ! I/O manager 
    4343   USE lib_mpp         ! MPP library 
    44    USE lib_fortran     ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
     44   USE lib_fortran     ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
    4545   USE prtctl          ! Print control 
    4646   USE wrk_nemo        ! Memory Allocation 
    47    USE lbclnk         ! ocean lateral boundary conditions 
     47   USE lbclnk          ! ocean lateral boundary conditions 
    4848   USE timing          ! Timing 
     49   USE stopar          ! Stochastic T/S fluctuations 
     50   USE stopts          ! Stochastic T/S fluctuations 
    4951 
    5052   IMPLICIT NONE 
     
    6062   END INTERFACE 
    6163   ! 
    62    INTERFACE eos_fzp  
     64   INTERFACE eos_fzp 
    6365      MODULE PROCEDURE eos_fzp_2d, eos_fzp_0d 
    6466   END INTERFACE 
     
    7880   !                                   !!!  simplified eos coefficients 
    7981   ! default value: Vallis 2006 
    80    REAL(wp) ::   rn_a0      = 1.6550e-1_wp     ! thermal expansion coeff.  
    81    REAL(wp) ::   rn_b0      = 7.6554e-1_wp     ! saline  expansion coeff.  
    82    REAL(wp) ::   rn_lambda1 = 5.9520e-2_wp     ! cabbeling coeff. in T^2         
    83    REAL(wp) ::   rn_lambda2 = 5.4914e-4_wp     ! cabbeling coeff. in S^2         
    84    REAL(wp) ::   rn_mu1     = 1.4970e-4_wp     ! thermobaric coeff. in T   
    85    REAL(wp) ::   rn_mu2     = 1.1090e-5_wp     ! thermobaric coeff. in S   
    86    REAL(wp) ::   rn_nu      = 2.4341e-3_wp     ! cabbeling coeff. in theta*salt   
    87     
     82   REAL(wp) ::   rn_a0      = 1.6550e-1_wp     ! thermal expansion coeff. 
     83   REAL(wp) ::   rn_b0      = 7.6554e-1_wp     ! saline  expansion coeff. 
     84   REAL(wp) ::   rn_lambda1 = 5.9520e-2_wp     ! cabbeling coeff. in T^2 
     85   REAL(wp) ::   rn_lambda2 = 5.4914e-4_wp     ! cabbeling coeff. in S^2 
     86   REAL(wp) ::   rn_mu1     = 1.4970e-4_wp     ! thermobaric coeff. in T 
     87   REAL(wp) ::   rn_mu2     = 1.1090e-5_wp     ! thermobaric coeff. in S 
     88   REAL(wp) ::   rn_nu      = 2.4341e-3_wp     ! cabbeling coeff. in theta*salt 
     89 
    8890   ! TEOS10/EOS80 parameters 
    8991   REAL(wp) ::   r1_S0, r1_T0, r1_Z0, rdeltaS 
    90     
     92 
    9193   ! EOS parameters 
    9294   REAL(wp) ::   EOS000 , EOS100 , EOS200 , EOS300 , EOS400 , EOS500 , EOS600 
     
    106108   REAL(wp) ::   EOS022 
    107109   REAL(wp) ::   EOS003 , EOS103 
    108    REAL(wp) ::   EOS013  
    109     
     110   REAL(wp) ::   EOS013 
     111 
    110112   ! ALPHA parameters 
    111113   REAL(wp) ::   ALP000 , ALP100 , ALP200 , ALP300 , ALP400 , ALP500 
     
    122124   REAL(wp) ::   ALP012 
    123125   REAL(wp) ::   ALP003 
    124     
     126 
    125127   ! BETA parameters 
    126128   REAL(wp) ::   BET000 , BET100 , BET200 , BET300 , BET400 , BET500 
     
    149151   REAL(wp) ::   PEN002 , PEN102 
    150152   REAL(wp) ::   PEN012 
    151     
     153 
    152154   ! ALPHA_PEN parameters 
    153155   REAL(wp) ::   APE000 , APE100 , APE200 , APE300 
     
    279281                     &  + rn_b0 * ( 1._wp - 0.5_wp*rn_lambda2*zs - rn_mu2*zh ) * zs   & 
    280282                     &  - rn_nu * zt * zs 
    281                      !                                  
     283                     ! 
    282284                  prd(ji,jj,jk) = zn * r1_rau0 * ztm                ! density anomaly (masked) 
    283285               END DO 
     
    313315      REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pdep   ! depth                      [m] 
    314316      ! 
    315       INTEGER  ::   ji, jj, jk                ! dummy loop indices 
    316       REAL(wp) ::   zt , zh , zs , ztm        ! local scalars 
    317       REAL(wp) ::   zn , zn0, zn1, zn2, zn3   !   -      - 
     317      INTEGER  ::   ji, jj, jk, jsmp, jdof       ! dummy loop indices 
     318      REAL(wp) ::   zt , zh , zstemp, zs , ztm   ! local scalars 
     319      REAL(wp) ::   zn , zn0, zn1, zn2, zn3      !   -      - 
     320      REAL(wp), DIMENSION(:), ALLOCATABLE :: zn0_sto, zn_sto, zsign            ! local vectors 
    318321      !!---------------------------------------------------------------------- 
    319322      ! 
     
    324327      CASE( -1, 0 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    325328         ! 
    326          DO jk = 1, jpkm1 
    327             DO jj = 1, jpj 
    328                DO ji = 1, jpi 
    329                   ! 
    330                   zh  = pdep(ji,jj,jk) * r1_Z0                                  ! depth 
    331                   zt  = pts (ji,jj,jk,jp_tem) * r1_T0                           ! temperature 
    332                   zs  = SQRT( ABS( pts(ji,jj,jk,jp_sal) + rdeltaS ) * r1_S0 )   ! square root salinity 
    333                   ztm = tmask(ji,jj,jk)                                         ! tmask 
    334                   ! 
    335                   zn3 = EOS013*zt   & 
    336                      &   + EOS103*zs+EOS003 
    337                      ! 
    338                   zn2 = (EOS022*zt   & 
    339                      &   + EOS112*zs+EOS012)*zt   & 
    340                      &   + (EOS202*zs+EOS102)*zs+EOS002 
    341                      ! 
    342                   zn1 = (((EOS041*zt   & 
    343                      &   + EOS131*zs+EOS031)*zt   & 
    344                      &   + (EOS221*zs+EOS121)*zs+EOS021)*zt   & 
    345                      &   + ((EOS311*zs+EOS211)*zs+EOS111)*zs+EOS011)*zt   & 
    346                      &   + (((EOS401*zs+EOS301)*zs+EOS201)*zs+EOS101)*zs+EOS001 
    347                      ! 
    348                   zn0 = (((((EOS060*zt   & 
    349                      &   + EOS150*zs+EOS050)*zt   & 
    350                      &   + (EOS240*zs+EOS140)*zs+EOS040)*zt   & 
    351                      &   + ((EOS330*zs+EOS230)*zs+EOS130)*zs+EOS030)*zt   & 
    352                      &   + (((EOS420*zs+EOS320)*zs+EOS220)*zs+EOS120)*zs+EOS020)*zt   & 
    353                      &   + ((((EOS510*zs+EOS410)*zs+EOS310)*zs+EOS210)*zs+EOS110)*zs+EOS010)*zt   & 
    354                      &   + (((((EOS600*zs+EOS500)*zs+EOS400)*zs+EOS300)*zs+EOS200)*zs+EOS100)*zs+EOS000 
    355                      ! 
    356                   zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    357                   ! 
    358                   prhop(ji,jj,jk) = zn0 * ztm                           ! potential density referenced at the surface 
    359                   ! 
    360                   prd(ji,jj,jk) = (  zn * r1_rau0 - 1._wp  ) * ztm      ! density anomaly (masked) 
     329         ! Stochastic equation of state 
     330         IF ( ln_sto_eos ) THEN 
     331            ALLOCATE(zn0_sto(1:2*nn_sto_eos)) 
     332            ALLOCATE(zn_sto(1:2*nn_sto_eos)) 
     333            ALLOCATE(zsign(1:2*nn_sto_eos)) 
     334            DO jsmp = 1, 2*nn_sto_eos, 2 
     335              zsign(jsmp)   = 1._wp 
     336              zsign(jsmp+1) = -1._wp 
     337            END DO 
     338            ! 
     339            DO jk = 1, jpkm1 
     340               DO jj = 1, jpj 
     341                  DO ji = 1, jpi 
     342                     ! 
     343                     ! compute density (2*nn_sto_eos) times: 
     344                     ! (1) for t+dt, s+ds (with the random TS fluctutation computed in sto_pts) 
     345                     ! (2) for t-dt, s-ds (with the opposite fluctuation) 
     346                     DO jsmp = 1, nn_sto_eos*2 
     347                        zh     = pdep(ji,jj,jk) * r1_Z0                                  ! depth 
     348                        zt     = pts (ji,jj,jk,jp_tem) * r1_T0  + pts_ran(ji,jj,jk,jp_tem,jdof) * zsign(jsmp)  ! temperature 
     349                        zstemp = pts   (ji,jj,jk,jp_sal) + pts_ran(ji,jj,jk,jp_sal,jdof) * zsign(jsmp) 
     350                        zs     = SQRT( ABS( zstemp + rdeltaS ) * r1_S0 )   ! square root salinity 
     351                        ztm    = tmask(ji,jj,jk)                                         ! tmask 
     352                        ! 
     353                        zn3 = EOS013*zt   & 
     354                           &   + EOS103*zs+EOS003 
     355                           ! 
     356                        zn2 = (EOS022*zt   & 
     357                           &   + EOS112*zs+EOS012)*zt   & 
     358                           &   + (EOS202*zs+EOS102)*zs+EOS002 
     359                           ! 
     360                        zn1 = (((EOS041*zt   & 
     361                           &   + EOS131*zs+EOS031)*zt   & 
     362                           &   + (EOS221*zs+EOS121)*zs+EOS021)*zt   & 
     363                           &   + ((EOS311*zs+EOS211)*zs+EOS111)*zs+EOS011)*zt   & 
     364                           &   + (((EOS401*zs+EOS301)*zs+EOS201)*zs+EOS101)*zs+EOS001 
     365                           ! 
     366                        zn0_sto(jsmp) = (((((EOS060*zt   & 
     367                           &   + EOS150*zs+EOS050)*zt   & 
     368                           &   + (EOS240*zs+EOS140)*zs+EOS040)*zt   & 
     369                           &   + ((EOS330*zs+EOS230)*zs+EOS130)*zs+EOS030)*zt   & 
     370                           &   + (((EOS420*zs+EOS320)*zs+EOS220)*zs+EOS120)*zs+EOS020)*zt   & 
     371                           &   + ((((EOS510*zs+EOS410)*zs+EOS310)*zs+EOS210)*zs+EOS110)*zs+EOS010)*zt   & 
     372                           &   + (((((EOS600*zs+EOS500)*zs+EOS400)*zs+EOS300)*zs+EOS200)*zs+EOS100)*zs+EOS000 
     373                           ! 
     374                        zn_sto(jsmp)  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
     375                     END DO 
     376                     ! 
     377                     ! 
     378                     ! compute stochastic density as the mean of the (2*nn_sto_eos) densities 
     379                     prhop(ji,jj,jk) = 0._wp ; prd(ji,jj,jk) = 0._wp 
     380                     DO jsmp = 1, nn_sto_eos*2 
     381                        prhop(ji,jj,jk) = prhop(ji,jj,jk) + zn0_sto(jsmp)                      ! potential density referenced at the surface 
     382                        !  
     383                        prd(ji,jj,jk) = prd(ji,jj,jk) + (  zn_sto(jsmp) * r1_rau0 - 1._wp  )   ! density anomaly (masked) 
     384                     END DO 
     385                     prhop(ji,jj,jk) = 0.5_wp * prhop(ji,jj,jk) * ztm / nn_sto_eos 
     386                     prd  (ji,jj,jk) = 0.5_wp * prd  (ji,jj,jk) * ztm / nn_sto_eos 
     387                  END DO 
    361388               END DO 
    362389            END DO 
    363          END DO 
     390            DEALLOCATE(zn0_sto,zn_sto,zsign) 
     391         ! Non-stochastic equation of state 
     392         ELSE 
     393            DO jk = 1, jpkm1 
     394               DO jj = 1, jpj 
     395                  DO ji = 1, jpi 
     396                     ! 
     397                     zh  = pdep(ji,jj,jk) * r1_Z0                                  ! depth 
     398                     zt  = pts (ji,jj,jk,jp_tem) * r1_T0                           ! temperature 
     399                     zs  = SQRT( ABS( pts(ji,jj,jk,jp_sal) + rdeltaS ) * r1_S0 )   ! square root salinity 
     400                     ztm = tmask(ji,jj,jk)                                         ! tmask 
     401                     ! 
     402                     zn3 = EOS013*zt   & 
     403                        &   + EOS103*zs+EOS003 
     404                        ! 
     405                     zn2 = (EOS022*zt   & 
     406                        &   + EOS112*zs+EOS012)*zt   & 
     407                        &   + (EOS202*zs+EOS102)*zs+EOS002 
     408                        ! 
     409                     zn1 = (((EOS041*zt   & 
     410                        &   + EOS131*zs+EOS031)*zt   & 
     411                        &   + (EOS221*zs+EOS121)*zs+EOS021)*zt   & 
     412                        &   + ((EOS311*zs+EOS211)*zs+EOS111)*zs+EOS011)*zt   & 
     413                        &   + (((EOS401*zs+EOS301)*zs+EOS201)*zs+EOS101)*zs+EOS001 
     414                        ! 
     415                     zn0 = (((((EOS060*zt   & 
     416                        &   + EOS150*zs+EOS050)*zt   & 
     417                        &   + (EOS240*zs+EOS140)*zs+EOS040)*zt   & 
     418                        &   + ((EOS330*zs+EOS230)*zs+EOS130)*zs+EOS030)*zt   & 
     419                        &   + (((EOS420*zs+EOS320)*zs+EOS220)*zs+EOS120)*zs+EOS020)*zt   & 
     420                        &   + ((((EOS510*zs+EOS410)*zs+EOS310)*zs+EOS210)*zs+EOS110)*zs+EOS010)*zt   & 
     421                        &   + (((((EOS600*zs+EOS500)*zs+EOS400)*zs+EOS300)*zs+EOS200)*zs+EOS100)*zs+EOS000 
     422                        ! 
     423                     zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
     424                     ! 
     425                     prhop(ji,jj,jk) = zn0 * ztm                           ! potential density referenced at the surface 
     426                     ! 
     427                     prd(ji,jj,jk) = (  zn * r1_rau0 - 1._wp  ) * ztm      ! density anomaly (masked) 
     428                  END DO 
     429               END DO 
     430            END DO 
     431         ENDIF 
    364432         ! 
    365433      CASE( 1 )                !==  simplified EOS  ==! 
     
    681749         ! 
    682750         CALL lbc_lnk( pab(:,:,jp_tem), 'T', 1. )                    ! Lateral boundary conditions 
    683          CALL lbc_lnk( pab(:,:,jp_sal), 'T', 1. )                     
     751         CALL lbc_lnk( pab(:,:,jp_sal), 'T', 1. ) 
    684752         ! 
    685753      CASE( 1 )                  !==  simplified EOS  ==! 
     
    702770         ! 
    703771         CALL lbc_lnk( pab(:,:,jp_tem), 'T', 1. )                    ! Lateral boundary conditions 
    704          CALL lbc_lnk( pab(:,:,jp_sal), 'T', 1. )                     
     772         CALL lbc_lnk( pab(:,:,jp_sal), 'T', 1. ) 
    705773         ! 
    706774      CASE DEFAULT 
     
    820888      !!                  ***  ROUTINE bn2  *** 
    821889      !! 
    822       !! ** Purpose :   Compute the local Brunt-Vaisala frequency at the  
     890      !! ** Purpose :   Compute the local Brunt-Vaisala frequency at the 
    823891      !!                time-step of the input arguments 
    824892      !! 
     
    827895      !!      N.B. N^2 is set one for all to zero at jk=1 in istate module. 
    828896      !! 
    829       !! ** Action  :   pn2 : square of the brunt-vaisala frequency at w-point  
     897      !! ** Action  :   pn2 : square of the brunt-vaisala frequency at w-point 
    830898      !! 
    831899      !!---------------------------------------------------------------------- 
     
    844912            DO ji = 1, jpi 
    845913               zrw =   ( fsdepw(ji,jj,jk  ) - fsdept(ji,jj,jk) )   & 
    846                   &  / ( fsdept(ji,jj,jk-1) - fsdept(ji,jj,jk) )  
    847                   ! 
    848                zaw = pab(ji,jj,jk,jp_tem) * (1. - zrw) + pab(ji,jj,jk-1,jp_tem) * zrw  
     914                  &  / ( fsdept(ji,jj,jk-1) - fsdept(ji,jj,jk) ) 
     915                  ! 
     916               zaw = pab(ji,jj,jk,jp_tem) * (1. - zrw) + pab(ji,jj,jk-1,jp_tem) * zrw 
    849917               zbw = pab(ji,jj,jk,jp_sal) * (1. - zrw) + pab(ji,jj,jk-1,jp_sal) * zrw 
    850918               ! 
     
    10261094      !! ** Purpose :   Calculates nonlinear anomalies of alpha_PE, beta_PE and PE at T-points 
    10271095      !! 
    1028       !! ** Method  :   PE is defined analytically as the vertical  
     1096      !! ** Method  :   PE is defined analytically as the vertical 
    10291097      !!                   primitive of EOS times -g integrated between 0 and z>0. 
    10301098      !!                pen is the nonlinear bsq-PE anomaly: pen = ( PE - rau0 gz ) / rau0 gz - rd 
    1031       !!                                                      = 1/z * /int_0^z rd dz - rd  
     1099      !!                                                      = 1/z * /int_0^z rd dz - rd 
    10321100      !!                                where rd is the density anomaly (see eos_rhd function) 
    10331101      !!                ab_pe are partial derivatives of PE anomaly with respect to T and S: 
     
    10941162                     ! 
    10951163                  zn  = ( zn2 * zh + zn1 ) * zh + zn0 
    1096                   !                               
     1164                  ! 
    10971165                  pab_pe(ji,jj,jk,jp_tem) = zn * zh * r1_rau0 * ztm 
    10981166                  ! 
     
    11091177                     ! 
    11101178                  zn  = ( zn2 * zh + zn1 ) * zh + zn0 
    1111                   !                               
     1179                  ! 
    11121180                  pab_pe(ji,jj,jk,jp_sal) = zn / zs * zh * r1_rau0 * ztm 
    11131181                  ! 
     
    15891657      END SELECT 
    15901658      ! 
    1591       rau0_rcp    = rau0 * rcp  
     1659      rau0_rcp    = rau0 * rcp 
    15921660      r1_rau0     = 1._wp / rau0 
    15931661      r1_rcp      = 1._wp / rcp 
    1594       r1_rau0_rcp = 1._wp / rau0_rcp  
     1662      r1_rau0_rcp = 1._wp / rau0_rcp 
    15951663      ! 
    15961664      IF(lwp) WRITE(numout,*) 
  • branches/2015/dev_r5177_CNRS4_stopar/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90

    r5123 r5296  
    2929   !!            3.3.1! 2011-01  (A. R. Porter, STFC Daresbury) dynamical allocation 
    3030   !!            3.4  ! 2011-11  (C. Harris) decomposition changes for running with CICE 
    31    !!                 ! 2012-05  (C. Calone, J. Simeon, G. Madec, C. Ethe) Add grid coarsening  
     31   !!                 ! 2012-05  (C. Calone, J. Simeon, G. Madec, C. Ethe) Add grid coarsening 
    3232   !!---------------------------------------------------------------------- 
    3333 
     
    5959   USE phycst          ! physical constant                  (par_cst routine) 
    6060   USE trdini          ! dyn/tra trends initialization     (trd_init routine) 
    61    USE asminc          ! assimilation increments      
     61   USE asminc          ! assimilation increments 
    6262   USE asmbkg          ! writing out state trajectory 
    6363   USE diaptr          ! poleward transports           (dia_ptr_init routine) 
     
    8181   USE sbctide, ONLY: lk_tide 
    8282   USE crsini          ! initialise grid coarsening utility 
    83    USE lbcnfd, ONLY: isendto, nsndto, nfsloop, nfeloop ! Setup of north fold exchanges  
     83   USE lbcnfd, ONLY: isendto, nsndto, nfsloop, nfeloop ! Setup of north fold exchanges 
     84   USE stopar 
     85   USE stopts 
    8486 
    8587   IMPLICIT NONE 
     
    125127#if defined key_agrif 
    126128      CALL Agrif_Declare_Var_dom   ! AGRIF: set the meshes for DOM 
    127       CALL Agrif_Declare_Var       !  "      "   "   "      "  DYN/TRA  
     129      CALL Agrif_Declare_Var       !  "      "   "   "      "  DYN/TRA 
    128130# if defined key_top 
    129131      CALL Agrif_Declare_Var_top   !  "      "   "   "      "  TOP 
     
    197199      IF( lk_cpl ) CALL cpl_finalize    ! end coupling and mpp communications with OASIS 
    198200#else 
    199       IF( lk_cpl ) THEN  
     201      IF( lk_cpl ) THEN 
    200202         CALL cpl_finalize              ! end coupling and mpp communications with OASIS 
    201203      ELSE 
     
    246248      REWIND( numnam_cfg )              ! Namelist namcfg in confguration namelist : Control prints & Benchmark 
    247249      READ  ( numnam_cfg, namcfg, IOSTAT = ios, ERR = 904 ) 
    248 904   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcfg in configuration namelist', .TRUE. )    
     250904   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcfg in configuration namelist', .TRUE. ) 
    249251 
    250252! Force values for AGRIF zoom (cf. agrif_user.F90) 
     
    322324#if defined key_nemocice_decomp 
    323325         jpi = ( nx_global+2-2*jpreci + (jpni-1) ) / jpni + 2*jpreci ! first  dim. 
    324          jpj = ( ny_global+2-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj ! second dim.  
     326         jpj = ( ny_global+2-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj ! second dim. 
    325327#else 
    326328         jpi = ( jpiglo-2*jpreci + (jpni-1) ) / jpni + 2*jpreci   ! first  dim. 
     
    392394 
    393395                            CALL dyn_nept_init  ! simplified form of Neptune effect 
    394       !      
     396      ! 
    395397      IF( ln_crs        )   CALL     crs_init   ! Domain initialization of coarsened grid 
    396398      ! 
     
    432434      IF( nn_cla == 1 .AND. cp_cfg == 'orca' .AND. jp_cfg == 2 )   CALL cla_init       ! Cross Land Advection 
    433435                            CALL icb_init( rdt, nit000)   ! initialise icebergs instance 
    434       
     436                            CALL sto_par_init   ! Stochastic parametrization 
     437      IF( ln_sto_eos     )  CALL sto_pts_init   ! RRandom T/S fluctuations 
     438 
    435439#if defined key_top 
    436440      !                                     ! Passive tracers 
     
    506510         WRITE(numout,*) '      left bottom i index of the zoom (in data domain) jpizoom = ', jpizoom 
    507511         WRITE(numout,*) '      left bottom j index of the zoom (in data domain) jpizoom = ', jpjzoom 
    508          WRITE(numout,*) '      lateral cond. type (between 0 and 6) jperio = ', jperio    
     512         WRITE(numout,*) '      lateral cond. type (between 0 and 6) jperio = ', jperio 
    509513         WRITE(numout,*) '      use file attribute if exists as i/p j-start ln_use_jattr = ', ln_use_jattr 
    510514      ENDIF 
     
    607611      USE ldftra_oce, ONLY: ldftra_oce_alloc 
    608612      USE trc_oce   , ONLY: trc_oce_alloc 
    609 #if defined key_diadct  
    610       USE diadct    , ONLY: diadct_alloc  
    611 #endif  
     613#if defined key_diadct 
     614      USE diadct    , ONLY: diadct_alloc 
     615#endif 
    612616#if defined key_bdy 
    613617      USE bdy_oce   , ONLY: bdy_oce_alloc 
     
    626630      ierr = ierr + trc_oce_alloc   ()          ! shared TRC / TRA arrays 
    627631      ! 
    628 #if defined key_diadct  
    629       ierr = ierr + diadct_alloc    ()          !  
    630 #endif  
     632#if defined key_diadct 
     633      ierr = ierr + diadct_alloc    ()          ! 
     634#endif 
    631635#if defined key_bdy 
    632636      ierr = ierr + bdy_oce_alloc   ()          ! bdy masks (incl. initialization) 
     
    757761      !!====================================================================== 
    758762      !!                     ***  ROUTINE  nemo_northcomms  *** 
    759       !! nemo_northcomms    :  Setup for north fold exchanges with explicit  
     763      !! nemo_northcomms    :  Setup for north fold exchanges with explicit 
    760764      !!                       point-to-point messaging 
    761765      !!===================================================================== 
     
    765769      !!---------------------------------------------------------------------- 
    766770      !!    1.0  ! 2011-10  (A. C. Coward, NOCS & J. Donners, PRACE) 
    767       !!    2.0  ! 2013-06 Setup avoiding MPI communication (I. Epicoco, S. Mocavero, CMCC)  
     771      !!    2.0  ! 2013-06 Setup avoiding MPI communication (I. Epicoco, S. Mocavero, CMCC) 
    768772      !!---------------------------------------------------------------------- 
    769773 
     
    772776 
    773777      njmppmax = MAXVAL( njmppt ) 
    774      
     778 
    775779      !initializes the north-fold communication variables 
    776780      isendto(:) = 0 
     
    788792          !loop over the other north-fold processes to find the processes 
    789793          !managing the points belonging to the sxT-dxT range 
    790    
     794 
    791795          DO jn = 1, jpni 
    792796                !sxT is the first point (in the global domain) of the jn 
  • branches/2015/dev_r5177_CNRS4_stopar/NEMOGCM/NEMO/OPA_SRC/step.F90

    r5147 r5296  
    106106 
    107107      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     108      ! Update stochastic parameters and random T/S fluctuations 
     109      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     110                        CALL sto_par( kstp )          ! Stochastic parameters 
     111 
     112      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    108113      ! Ocean physics update                (ua, va, tsa used as workspace) 
    109114      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     
    145150      ! 
    146151      IF( lk_ldfslp ) THEN                            ! slope of lateral mixing 
     152         IF(ln_sto_eos ) CALL sto_pts( tsn )    ! Random T/S fluctuations 
    147153                         CALL eos( tsb, rhd, gdept_0(:,:,:) )               ! before in situ density 
    148154         IF( ln_zps .AND. .NOT. ln_isfcav)                               & 
     
    173179      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    174180                         CALL ssh_nxt       ( kstp )  ! after ssh (includes call to div_cur) 
    175       IF( lk_vvl     )   CALL dom_vvl_sf_nxt( kstp )  ! after vertical scale factors  
    176                          CALL wzv           ( kstp )  ! now cross-level velocity  
    177  
    178       IF( lk_dynspg_ts ) THEN  
     181      IF( lk_vvl     )   CALL dom_vvl_sf_nxt( kstp )  ! after vertical scale factors 
     182                         CALL wzv           ( kstp )  ! now cross-level velocity 
     183 
     184      IF( lk_dynspg_ts ) THEN 
    179185          ! In case the time splitting case, update almost all momentum trends here: 
    180186          ! Note that the computation of vertical velocity above, hence "after" sea level 
    181187          ! is necessary to compute momentum advection for the rhs of barotropic loop: 
     188            IF(ln_sto_eos ) CALL sto_pts( tsn )    ! Random T/S fluctuations 
    182189                            CALL eos    ( tsn, rhd, rhop, fsdept_n(:,:,:) ) ! now in situ density for hpg computation 
    183190            IF( ln_zps .AND. .NOT. ln_isfcav)                               & 
     
    210217                                  CALL div_cur( kstp )         ! Horizontal divergence & Relative vorticity (2nd call in time-split case) 
    211218          IF( lk_vvl     )        CALL dom_vvl_sf_nxt( kstp, kcall=2 )  ! after vertical scale factors (update depth average component) 
    212                                   CALL wzv           ( kstp )  ! now cross-level velocity  
     219                                  CALL wzv           ( kstp )  ! now cross-level velocity 
    213220      ENDIF 
    214221 
     
    261268         IF( ln_zdfnpc   )   CALL tra_npc( kstp )                ! update after fields by non-penetrative convection 
    262269                             CALL tra_nxt( kstp )                ! tracer fields at next time step 
     270            IF(ln_sto_eos )  CALL sto_pts( tsn )    ! Random T/S fluctuations 
    263271                             CALL eos    ( tsa, rhd, rhop, fsdept_n(:,:,:) )  ! Time-filtered in situ density for hpg computation 
    264272            IF( ln_zps .AND. .NOT. ln_isfcav)                                & 
     
    271279      ELSE                                                  ! centered hpg  (eos then time stepping) 
    272280         IF ( .NOT. lk_dynspg_ts ) THEN                     ! eos already called in time-split case 
     281             IF(ln_sto_eos ) CALL sto_pts( tsn )    ! Random T/S fluctuations 
    273282                             CALL eos    ( tsn, rhd, rhop, fsdept_n(:,:,:) )  ! now in situ density for hpg computation 
    274283         IF( ln_zps .AND. .NOT. ln_isfcav)                                   & 
    275284               &             CALL zps_hde    ( kstp, jpts, tsn, gtsu, gtsv,  &    ! Partial steps: before horizontal gradient 
    276285               &                                           rhd, gru , grv    )  ! of t, s, rd at the last ocean level 
    277          IF( ln_zps .AND.       ln_isfcav)                                   &  
     286         IF( ln_zps .AND.       ln_isfcav)                                   & 
    278287               &             CALL zps_hde_isf( kstp, jpts, tsn, gtsu, gtsv,  &    ! Partial steps for top cell (ISF) 
    279288               &                                           rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   & 
     
    292301                               ua(:,:,:) = ua_sv(:,:,:) 
    293302                               va(:,:,:) = va_sv(:,:,:) 
    294                                                              ! Revert now divergence and rotational to previously computed ones  
     303                                                             ! Revert now divergence and rotational to previously computed ones 
    295304                                                             !(needed because of the time swap in div_cur, at the beginning of each time step) 
    296305                               hdivn(:,:,:) = hdivb(:,:,:) 
    297                                rotn(:,:,:)  = rotb(:,:,:)  
     306                               rotn(:,:,:)  = rotb(:,:,:) 
    298307 
    299308                               CALL dyn_bfr( kstp )         ! bottom friction 
     
    349358      ! 
    350359#if defined key_iomput 
    351       IF( kstp == nitend .OR. indic < 0 ) THEN  
     360      IF( kstp == nitend .OR. indic < 0 ) THEN 
    352361                      CALL iom_context_finalize( "nemo"     ) ! needed for XIOS+AGRIF 
    353          IF( ln_crs ) CALL iom_context_finalize( "nemo_crs" ) !  
     362         IF( ln_crs ) CALL iom_context_finalize( "nemo_crs" ) ! 
    354363      ENDIF 
    355364#endif 
  • branches/2015/dev_r5177_CNRS4_stopar/NEMOGCM/NEMO/OPA_SRC/step_oce.F90

    r4990 r5296  
    5454   USE dynnxt           ! time-stepping                    (dyn_nxt routine) 
    5555 
     56   USE stopar           ! Stochastic parametrization       (sto_par routine) 
     57   USE stopts           ! Stochastic T/S fluctuations      (sto_pts routine) 
     58 
    5659   USE bdy_par          ! for lk_bdy 
    5760   USE bdy_oce          ! for dmp logical 
     
    6972   USE ldfeiv           ! eddy induced velocity coef.      (ldf_eiv routine) 
    7073   USE ldftra_smag      ! Smagirinsky diffusion            (ldftra_smag routine) 
    71    USE ldfdyn_smag      ! Smagorinsky viscosity            (ldfdyn_smag routine)  
     74   USE ldfdyn_smag      ! Smagorinsky viscosity            (ldfdyn_smag routine) 
    7275 
    7376   USE zdftmx           ! tide-induced vertical mixing     (zdf_tmx routine) 
Note: See TracChangeset for help on using the changeset viewer.