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

Changeset 2116


Ignore:
Timestamp:
2010-09-23T19:36:32+02:00 (14 years ago)
Author:
mlelod
Message:

ticket: #720 restart the branch from the latest DEV_r1837_MLF branch revision (2112)

Location:
branches/dev_r2091_ZTC/NEMO
Files:
13 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/dev_r2091_ZTC/NEMO/LIM_SRC_2/limthd_2.F90

    r1758 r2116  
    241241             
    242242            !  energy needed to bring ocean surface layer until its freezing 
    243             qcmif  (ji,jj) =  rau0 * rcp * fse3t_m(ji,jj,1)   & 
     243            qcmif  (ji,jj) =  rau0 * rcp * fse3t_m(ji,jj)   & 
    244244                &          * ( tfu(ji,jj) - sst_m(ji,jj) ) * ( 1 - zinda ) 
    245245             
  • branches/dev_r2091_ZTC/NEMO/OPA_SRC/DOM/dom_oce.F90

    r2068 r2116  
    147147   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   e3t_b              !: before         -      -      -    -   T      points (m) 
    148148   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   e3u_b  , e3v_b     !:   -            -      -      -    -   U--V   points (m) 
    149    REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   e3t_d              !: "diffused"     -      -      -    -   T      points (m) 
    150149#else 
    151150   LOGICAL, PUBLIC, PARAMETER ::   lk_vvl = .FALSE.   !: fixed grid flag 
  • branches/dev_r2091_ZTC/NEMO/OPA_SRC/DOM/domzgr_substitute.h90

    r2068 r2116  
    77   !! History :  1.0  !  2005-10  (A. Beckmann, G. Madec) generalisation to all coord. 
    88   !!            3.1  !  2009-02  (G. Madec, M. Leclair)  pure z* coordinate 
     9   !!            3.3  !  2010-09  (G. Madec, M. Leclair)  z_tilde coordinate 
    910   !!---------------------------------------------------------------------- 
    1011#if defined key_zco 
     
    3334#   define  fse3vw_0(i,j,k)  e3vw(i,j,k) 
    3435#endif 
    35 #if defined key_vvl 
     36#if defined key_ztc 
     37! z_tilde coordinate 3D arrays at t,u,v points at b,n,a time steps 
     38#   define  fsdept(i,j,k)  gdept_1(i,j,k) 
     39#   define  fsdepw(i,j,k)  gdepw_1(i,j,k) 
     40#   define  fsde3w(i,j,k)  gdep3w_1(i,j,k) 
     41#   define  fse3t(i,j,k)   e3t_1(i,j,k) 
     42#   define  fse3u(i,j,k)   e3u_1(i,j,k) 
     43#   define  fse3v(i,j,k)   e3v_1(i,j,k) 
     44#   define  fse3f(i,j,k)   e3f_1(i,j,k) 
     45#   define  fse3w(i,j,k)   e3w_1(i,j,k) 
     46#   define  fse3uw(i,j,k)  e3uw_1(i,j,k) 
     47#   define  fse3vw(i,j,k)  e3vw_1(i,j,k) 
     48 
     49#   define  fse3t_b(i,j,k)   e3t_b(i,j,k) 
     50#   define  fse3u_b(i,j,k)   e3u_b(i,j,k) 
     51#   define  fse3v_b(i,j,k)   e3v_b(i,j,k) 
     52#   define  fse3uw_b(i,j,k)  e3uw_b(i,j,k) 
     53#   define  fse3vw_b(i,j,k)  e3vw_b(i,j,k) 
     54 
     55#   define  fsdept_n(i,j,k)  gdept_1(i,j,k) 
     56#   define  fsdepw_n(i,j,k)  gdepw_1(i,j,k) 
     57#   define  fsde3w_n(i,j,k)  gdep3w_1(i,j,k) 
     58#   define  fse3t_n(i,j,k)   e3t_n(i,j,k) 
     59#   define  fse3u_n(i,j,k)   e3u_n(i,j,k) 
     60#   define  fse3v_n(i,j,k)   e3v_n(i,j,k) 
     61#   define  fse3f_n(i,j,k)   e3f_1(i,j,k) 
     62#   define  fse3w_n(i,j,k)   e3w_1(i,j,k) 
     63#   define  fse3uw_n(i,j,k)  e3uw(i,j,k) 
     64#   define  fse3vw_n(i,j,k)  e3vw(i,j,k) 
     65 
     66! - ML - Caution: only the first level of e3t_m is used (in limthd_2.F90) 
     67!                 It is replaced b y a 2d array 
     68#   define  fse3t_m(i,j)     e3t_m(i,j) 
     69#   define  fse3t_d(i,j,k)   e3t_d(i,j,k) 
     70 
     71#   define  fse3t_a(i,j,k)   e3t_a(i,j,k) 
     72#   define  fse3u_a(i,j,k)   e3u_a(i,j,k) 
     73#   define  fse3v_a(i,j,k)   e3v_a(i,j,k) 
     74 
     75#elif defined key_vvl 
    3676! s* or z*-coordinate (3D + time dependency) + use of additional now arrays (..._1) 
    3777#   define  fsdept(i,j,k)  gdept_1(i,j,k) 
     
    63103#   define  fse3vw_n(i,j,k)  (fse3vw_0(i,j,k)*(1.+sshv_n(i,j)*muv(i,j,k))) 
    64104 
    65 #   define  fse3t_m(i,j,k)   (fse3t_0(i,j,k)*(1.+ssh_m(i,j)*mut(i,j,k))) 
     105! - ML - Caution: only the first level of e3t_m is used (in limthd_2.F90) 
     106!                 It is replaced b y a 2d array 
     107#   define  fse3t_m(i,j)     (fse3t_0(i,j,1)*(1.+ssh_m(i,j)*mut(i,j,1))) 
    66108#   define  fse3t_d(i,j,k)   e3t_d(i,j,k) 
    67109 
  • branches/dev_r2091_ZTC/NEMO/OPA_SRC/DYN/dynnxt.F90

    r2068 r2116  
    242242            ! ------------------------------- 
    243243            DO jk = 1, jpkm1 
    244                fse3t_b(:,:,jk) = fse3t_n(:,:,jk) + atfp * fse3t_d(:,:,jk) 
     244               fse3t_b(:,:,jk) = fse3t_n(:,:,jk)                                   & 
     245                  &              + atfp * (  fse3t_b(:,:,jk) + fse3t_a(:,:,jk)     & 
     246                  &                         - 2.e0 * fse3t_n(:,:,jk)            ) 
    245247            ENDDO 
    246248            ! Add volume filter correction only at the first level of t-point scale factors 
  • branches/dev_r2091_ZTC/NEMO/OPA_SRC/DYN/sshwzv.F90

    r2068 r2116  
     1 
    12MODULE sshwzv    
    23   !!============================================================================== 
     
    156157      ! In forward Euler time stepping case, the same formulation as in the leap-frog case can be used 
    157158      ! because emp_b field is initialized with the vlaues of emp field. Hence, 0.5 * ( emp + emp_b ) = emp 
    158       IF( neuler == 0 .AND. kt == nit000 ) THEN 
    159          z1_rau0 = 1.e0 / rau0 
    160          ssha(:,:) = (  sshb(:,:) - z2dt * ( z1_rau0 *   emp(:,:)                + zhdiv(:,:) )  ) * tmask(:,:,1) 
    161       ELSE 
    162          z1_rau0 = 0.5 / rau0 
    163          ssha(:,:) = (  sshb(:,:) - z2dt * ( z1_rau0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) )  ) * tmask(:,:,1) 
    164       ENDIF 
     159      z1_rau0 = 0.5 / rau0 
     160      ssha(:,:) = (  sshb(:,:) - z2dt * ( z1_rau0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) )  ) * tmask(:,:,1) 
    165161 
    166162#if defined key_obc 
     
    186182         CALL lbc_lnk( sshv_a, 'V', 1. ) 
    187183      ENDIF 
    188       !                                           !----------------------------------------! 
    189       !                                           !     vertical scale factor laplacian    ! 
    190       !                                           !----------------------------------------! 
    191       ! Needed for Robert-Asselin time filter and for Brown & Campana semi implicit hydrostatic presure gradient 
    192       DO jk = 1, jpk 
    193          fse3t_d(:,:,jk) =          fse3t_b(:,:,jk)   & 
    194             &              - 2.e0 * fse3t_n(:,:,jk)   & 
    195             &              +        fse3t_a(:,:,jk) 
    196       ENDDO 
    197184      !                                           !------------------------------! 
    198185      !                                           !     Now Vertical Velocity    ! 
  • branches/dev_r2091_ZTC/NEMO/OPA_SRC/IOM/in_out_manager.F90

    r1770 r2116  
    7878   INTEGER            ::   nn_bench     =    0    !: benchmark parameter (0/1) 
    7979   INTEGER            ::   nn_bit_cmp   =    0    !: bit reproducibility  (0/1) 
     80   LOGICAL            ::   ln_hsb     = .FALSE.   !: check the heat and salt budgets 
    8081 
    8182   !                                              !: OLD namelist names 
  • branches/dev_r2091_ZTC/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r2091 r2116  
    4545   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   wndm              !: wind speed module at T-point (=|U10m-Uoce|)  [m/s] 
    4646   !! wndm is used only in PISCES to compute surface gases exchanges in ice-free ocean or leads 
    47    REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   qsr    , qsr_b    !: sea heat flux:     solar                     [W/m2] 
     47   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   qsr               !: sea heat flux:     solar                     [W/m2] 
    4848   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   qns    , qns_b    !: sea heat flux: non solar                     [W/m2] 
    4949   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   qsr_tot           !: total     solar heat flux (over sea and ice) [W/m2] 
     
    5353   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   emp_tot           !: total E-P-R over ocean and ice               [Kg/m2/s] 
    5454   ! - ML - begin 
    55    REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   sbc_hc_n          !: sbc heat content trend now                   [K/m/s] 
     55   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   sbc_hc_n          !: sbc heat content trend now                   [K.m/s] 
    5656   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   sbc_hc_b          !:  "   "      "      "   before                   " 
    57    REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   sbc_sc_n          !: sbc salt content trend now                   [psu/m/s] 
     57   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   sbc_sc_n          !: sbc salt content trend now                   [psu.m/s] 
    5858   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   sbc_sc_b          !:  "   "      "      "   before                   " 
    59    REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   qsr_hc_n      !: heat content trend due to qsr flux now       [K/m/s] 
     59   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   qsr_hc_n      !: heat content trend due to qsr flux now       [K.m/s] 
    6060   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   qsr_hc_b      !:  "      "      "    "  "   "   "   before       " 
    6161   ! - ML - end 
     
    7878   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   sss_m     !: mean (nn_fsbc time-step) surface sea salinity            [psu] 
    7979   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   ssh_m     !: mean (nn_fsbc time-step) sea surface height                [m] 
     80#if defined key_ztc 
     81   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   e3t_m     !: mean (nn_fsbc time-step) first ocean level thickness       [m] 
     82#endif 
    8083 
    8184   !!---------------------------------------------------------------------- 
  • branches/dev_r2091_ZTC/NEMO/OPA_SRC/SBC/sbcmod.F90

    r2091 r2116  
    195195         vtau_b(:,:) = vtau(:,:)                         ! (except at nit000 where before fields 
    196196         qns_b (:,:) = qns (:,:)                         !  are set at the end of the routine) 
    197          qsr_b (:,:) = qsr (:,:) 
     197         ! The 3D heat content due to qsr forcing is treated in traqsr 
     198         ! qsr_b (:,:) = qsr (:,:) 
    198199         emp_b (:,:) = emp (:,:) 
    199200         emps_b(:,:) = emps(:,:) 
    200           
    201       ENDIF 
    202  
     201      ENDIF 
    203202      !                                            ! ---------------------------------------- ! 
    204203      !                                            !        forcing field computation         ! 
     
    259258            CALL iom_get( numror, jpdom_autoglo, 'vtau_b', vtau_b )   ! before j-stress  (V-point) 
    260259            CALL iom_get( numror, jpdom_autoglo, 'qns_b' , qns_b  )   ! before non solar heat flux (T-point) 
    261             CALL iom_get( numror, jpdom_autoglo, 'qsr_b' , qsr_b  )   ! before     solar heat flux (T-point) 
     260            ! The 3D heat content due to qsr forcing is treated in traqsr 
     261            ! CALL iom_get( numror, jpdom_autoglo, 'qsr_b' , qsr_b  )   ! before     solar heat flux (T-point) 
    262262            CALL iom_get( numror, jpdom_autoglo, 'emp_b' , emp_b  )   ! before     freshwater flux (T-point) 
    263263            CALL iom_get( numror, jpdom_autoglo, 'emps_b', emps_b )   ! before C/D freshwater flux (T-point) 
     
    267267            vtau_b(:,:) = vtau(:,:) 
    268268            qns_b (:,:) = qns (:,:) 
    269             qsr_b (:,:) = qsr (:,:) 
     269            ! qsr_b (:,:) = qsr (:,:) 
    270270            emp_b (:,:) = emp (:,:) 
    271271            emps_b(:,:) = emps(:,:) 
     
    283283         CALL iom_rstput( kt, nitrst, numrow, 'vtau_b' , vtau ) 
    284284         CALL iom_rstput( kt, nitrst, numrow, 'qns_b'  , qns  ) 
    285          CALL iom_rstput( kt, nitrst, numrow, 'qsr_b'  , qsr  ) 
     285         ! The 3D heat content due to qsr forcing is treated in traqsr 
     286         ! CALL iom_rstput( kt, nitrst, numrow, 'qsr_b'  , qsr  ) 
    286287         CALL iom_rstput( kt, nitrst, numrow, 'emp_b'  , emp  ) 
    287288         CALL iom_rstput( kt, nitrst, numrow, 'emps_b' , emps ) 
  • branches/dev_r2091_ZTC/NEMO/OPA_SRC/SBC/sbcssm.F90

    r1715 r2116  
    6464         sss_m(:,:) = sn(:,:,1) 
    6565         ssh_m(:,:) = sshn(:,:) 
     66         IF( lk_vvl ) fse3t_m(:,:) = fse3t_n(:,:,1) 
    6667         ! 
    6768      ELSE 
     
    7980               CALL iom_get( numror, jpdom_autoglo, 'sss_m'  , sss_m  )   !   "         "    salinity    (T-point) 
    8081               CALL iom_get( numror, jpdom_autoglo, 'ssh_m'  , ssh_m  )   !   "         "    height      (T-point) 
     82               IF( lk_vvl ) THEN 
     83                  CALL iom_get( numror, jpdom_autoglo, 'e3t_m'  , fse3t_m  )   !   first ocean level thickness (T-point) 
     84               ENDIF 
    8185               ! 
    8286               IF( zf_sbc /= REAL( nn_fsbc, wp ) ) THEN      ! nn_fsbc has changed between 2 runs 
     
    8993                  sss_m(:,:) = zcoef * sss_m(:,:) 
    9094                  ssh_m(:,:) = zcoef * ssh_m(:,:) 
     95                  IF( lk_vvl ) fse3t_m(:,:) = zcoef * fse3t_m(:,:) 
    9196               ELSE 
    9297                  IF(lwp) WRITE(numout,*) '~~~~~~~   mean fields read in the ocean restart file' 
     
    100105               sss_m(:,:) = zcoef * sn(:,:,1) 
    101106               ssh_m(:,:) = zcoef * sshn(:,:) 
     107               IF( lk_vvl ) fse3t_m(:,:) = zcoef * fse3t_n(:,:,1) 
    102108            ENDIF 
    103109            !                                             ! ---------------------------------------- ! 
     
    109115            sss_m(:,:) = 0.e0 
    110116            ssh_m(:,:) = 0.e0 
     117            IF( lk_vvl ) fse3t_m(:,:) = 0.e0 
    111118         ENDIF 
    112119         !                                                ! ---------------------------------------- ! 
     
    118125         sss_m(:,:) = sss_m(:,:) + sn(:,:,1) 
    119126         ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) 
    120  
     127         IF( lk_vvl ) fse3t_m(:,:) = fse3t_m(:,:) + fse3t_n(:,:,1) 
    121128         !                                                ! ---------------------------------------- ! 
    122129         IF( MOD( kt - 1 , nn_fsbc ) == 0 ) THEN          !   Mean value at each nn_fsbc time-step   ! 
    123130            !                                             ! ---------------------------------------- ! 
     131            ! - ML - In a pure rigourous implementation, the averaging of sst and sss should be weighted 
     132            !        by the level thickness in vvl case. We suppose here that the effect is negligible. 
    124133            zcoef = 1. / REAL( nn_fsbc, wp ) 
    125134            sst_m(:,:) = sst_m(:,:) * zcoef           ! mean SST             [Celcius] 
     
    128137            ssv_m(:,:) = ssv_m(:,:) * zcoef           ! 
    129138            ssh_m(:,:) = ssh_m(:,:) * zcoef           ! mean SSH             [m] 
     139            IF( lk_vvl ) fse3t_m(:,:) = fse3t_m(:,:) * zcoef  !   first ocean level thickness [m] 
    130140            ! 
    131141         ENDIF 
     
    144154            CALL iom_rstput( kt, nitrst, numrow, 'sss_m'  , sss_m  ) 
    145155            CALL iom_rstput( kt, nitrst, numrow, 'ssh_m'  , ssh_m  ) 
     156            IF( lk_vvl ) THEN 
     157               CALL iom_rstput( kt, nitrst, numrow, 'e3t_m'  , fse3t_m  ) 
     158            ENDIF 
    146159            ! 
    147160         ENDIF 
  • branches/dev_r2091_ZTC/NEMO/OPA_SRC/TRA/tranxt.F90

    r2091 r2116  
    282282                  ze3t_n = fse3t_n(ji,jj,jk) 
    283283                  ze3t_a = fse3t_a(ji,jj,jk) 
    284                   ze3t_d = fse3t_d(ji,jj,jk) 
     284                  ze3t_d = ze3t_b - 2.e0 * ze3t_n + ze3t_a 
    285285                  !                                         ! tracer content at Before, now and after 
    286286                  ztc_b  = tb(ji,jj,jk) * ze3t_b   ;   zsc_b = sb(ji,jj,jk) * ze3t_b 
  • branches/dev_r2091_ZTC/NEMO/OPA_SRC/TRA/trasbc.F90

    r2091 r2116  
    127127         qns(:,:) = qns(:,:) + qsr(:,:)      ! total heat flux in qns 
    128128         qsr(:,:) = 0.e0                     ! qsr set to zero 
    129          IF( kt == nit000 ) THEN             ! idem on before field at nit000 
    130             qsr_b(:,:) = 0.e0                      
    131          ENDIF 
     129         ! IF( kt == nit000 ) THEN             ! idem on before field at nit000 
     130         !    qsr_b(:,:) = 0.e0                      
     131         ! ENDIF 
    132132      ENDIF 
    133133      !                                          Set before sbc tracer content fields 
     
    186186      !                                          Write in the ocean restart file 
    187187      !                                          ******************************* 
    188       IF(lwp) WRITE(numout,*) 
    189       IF(lwp) WRITE(numout,*) 'sbc : ocean surface tracer content forcing fields written in ocean restart file ',   & 
    190            &                    'at it= ', kt,' date= ', ndastp 
    191       IF(lwp) WRITE(numout,*) '~~~~' 
    192       CALL iom_rstput( kt, nitrst, numrow, 'sbc_hc_b', sbc_hc_n ) 
    193       CALL iom_rstput( kt, nitrst, numrow, 'sbc_sc_b', sbc_sc_n ) 
     188      IF( lrst_oce ) THEN 
     189         IF(lwp) WRITE(numout,*) 
     190         IF(lwp) WRITE(numout,*) 'sbc : ocean surface tracer content forcing fields written in ocean restart file ',   & 
     191            &                    'at it= ', kt,' date= ', ndastp 
     192         IF(lwp) WRITE(numout,*) '~~~~' 
     193         CALL iom_rstput( kt, nitrst, numrow, 'sbc_hc_b', sbc_hc_n ) 
     194         CALL iom_rstput( kt, nitrst, numrow, 'sbc_sc_b', sbc_sc_n ) 
     195      ENDIF 
    194196       
    195197      IF( l_trdtra ) THEN           ! save the sbc trends for diagnostic 
  • branches/dev_r2091_ZTC/NEMO/OPA_SRC/opa.F90

    r1793 r2116  
    5454   USE trdmod          ! momentum/tracers trends       (trd_mod_init routine) 
    5555   USE diaptr          ! poleward transports           (dia_ptr_init routine) 
     56   USE diahsb          ! heat, salt and volume budgets (dia_hsb_init routine) 
    5657   USE step            ! OPA time-stepping                  (stp     routine) 
    5758#if defined key_oasis3 
     
    180181      !! 
    181182      NAMELIST/namctl/ ln_ctl  , nn_print, nn_ictls, nn_ictle,   & 
    182          &             nn_isplt, nn_jsplt, nn_jctls, nn_jctle, nn_bench, nn_bit_cmp 
     183         &             nn_isplt, nn_jsplt, nn_jctls, nn_jctle, nn_bench, nn_bit_cmp, ln_hsb 
    183184      !!---------------------------------------------------------------------- 
    184185      ! 
     
    279280      CALL dia_ptr_init                         ! Poleward TRansports initialization 
    280281      CALL trd_mod_init                         ! Mixed-layer/Vorticity/Integral constraints trends 
     282      IF(ln_hsb)   CALL dia_hsb_init            ! heat content, salt content and volume budgets 
    281283      ! 
    282284   END SUBROUTINE opa_init 
     
    313315         WRITE(numout,*) '      benchmark parameter (0/1)       nn_bench   = ', nn_bench 
    314316         WRITE(numout,*) '      bit comparison mode (0/1)       nn_bit_cmp = ', nn_bit_cmp 
     317         WRITE(numout,*) '      check the heat and salt budgets ln_hsb     = ', ln_hsb 
    315318      ENDIF 
    316319 
  • branches/dev_r2091_ZTC/NEMO/OPA_SRC/step.F90

    r2068 r2116  
    117117   USE prtctl          ! Print control                    (prt_ctl routine) 
    118118   ! - ML -  
    119    USE diatrb          ! global tracer conservation       (dia_trb  routine) 
     119   USE diahsb          ! global tracer conservation       (dia_hsb  routine) 
    120120 
    121121#if defined key_agrif 
     
    320320 
    321321                               CALL ssh_nxt( kstp )         ! sea surface height at next time step 
    322                                CALL dia_trb( kstp )         ! - ML - global conservation diagnostics 
     322      IF( ln_hsb           )   CALL dia_hsb( kstp )         ! - ML - global conservation diagnostics 
    323323 
    324324      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
Note: See TracChangeset for help on using the changeset viewer.