Changeset 11763


Ignore:
Timestamp:
2019-10-22T18:18:37+02:00 (11 months ago)
Author:
acc
Message:

Branch 2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps. Update to WAD files that were previously untested on this branch

Location:
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OFF/nemogcm.F90

    r11527 r11763  
    341341#endif 
    342342 
    343                            CALL     trc_init                         ! Passive tracers initialization 
     343                           CALL     trc_init( Nbb, Nnn, Naa )        ! Passive tracers initialization 
    344344                           CALL dia_ptr_init   ! Poleward TRansports initialization 
    345345                            
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/tests/WAD/EXPREF/makebdy_tc7.py

    r7609 r11763  
    44pathout = "bdyssh_tc7" 
    55 
    6 nx = 34  
     6nx = 23  
    77ny = 1 
    88nt = 24 
     
    1818 ssh = np.zeros((nt,ny,nx)) 
    1919 for nnt in range(nd*nt,(nd+1)*nt): 
    20    tx = 2.5*np.cos((3.141592654/6.0)*(nnt+1.0)) 
     20   tx = 2.5*np.cos((3.141592654/6.0)*(nnt)) 
    2121   print nnt, tx 
    2222   for nnx in range(nx): 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/tests/WAD/EXPREF/namelist_cfg

    r10075 r11763  
    169169!----------------------------------------------------------------------- 
    170170    ctypebdy = 'E' 
    171     nbdyind  = 50 
     171    nbdyind  = 33 
    172172    nbdybeg  = 1 
    173     nbdyend  = 34 
     173    nbdyend  = 23 
    174174    !ctypebdy = 'W' 
    175175    !nbdyind  = 2 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/tests/WAD/MY_DOCS/Namelists/nam_wad_tc7

    r7609 r11763  
    1515    nb_bdy         = 1                    !  number of open boundary sets 
    1616/ 
    17 !----------------------------------------------------------------------- 
    18 &namwad  !   Wetting and drying 
    19 !----------------------------------------------------------------------- 
    20    rn_wdmin1         =  0.150   ! Minimum wet depth on dried cells 
    21 / 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/tests/WAD/MY_SRC/bdyini.F90

    r10425 r11763  
    133133      INTEGER  ::   i_offset, j_offset                     !   -       - 
    134134      INTEGER , POINTER  ::  nbi, nbj, nbr                 ! short cuts 
    135       REAL(wp), POINTER  ::  flagu, flagv                  !    -   - 
    136135      REAL(wp), POINTER, DIMENSION(:,:)       ::   pmask    ! pointer to 2D mask fields 
    137136      REAL(wp) ::   zefl, zwfl, znfl, zsfl                 ! local scalars 
     
    385384          END SELECT 
    386385          IF(lwp) WRITE(numout,*) 
     386          ! 
     387          ! sanity check if used with tides         
     388          IF( ln_tide ) THEN  
     389             IF(lwp) WRITE(numout,*) ' The total volume correction is not working with tides. ' 
     390             IF(lwp) WRITE(numout,*) ' Set ln_vol to .FALSE. ' 
     391             IF(lwp) WRITE(numout,*) ' or ' 
     392             IF(lwp) WRITE(numout,*) ' equilibriate your bdy input files ' 
     393             CALL ctl_stop( 'The total volume correction is not working with tides.' ) 
     394          END IF 
    387395        ELSE 
    388396          IF(lwp) WRITE(numout,*) 'No volume correction applied at open boundaries' 
     
    12031211            END DO 
    12041212            IF( icount /= 0 ) THEN 
    1205                IF(lwp) WRITE(numout,*) 
    1206                IF(lwp) WRITE(numout,*) ' E R R O R : Some ',cgrid(igrd),' grid points,',   & 
     1213               WRITE(ctmp1,*) ' E R R O R : Some ',cgrid(igrd),' grid points,',   & 
    12071214                  ' are not boundary points (flagu calculation). Check nbi, nbj, indices for boundary set ',ib_bdy 
    1208                IF(lwp) WRITE(numout,*) ' ========== ' 
    1209                IF(lwp) WRITE(numout,*) 
    1210                nstop = nstop + 1 
     1215               WRITE(ctmp2,*) ' ========== ' 
     1216               CALL ctl_stop( ' ', ctmp1, ctmp2, ' ' ) 
    12111217            ENDIF  
    12121218         END DO 
     
    12381244            END DO 
    12391245            IF( icount /= 0 ) THEN 
    1240                IF(lwp) WRITE(numout,*) 
    1241                IF(lwp) WRITE(numout,*) ' E R R O R : Some ',cgrid(igrd),' grid points,',   & 
     1246               WRITE(ctmp1,*) ' E R R O R : Some ',cgrid(igrd),' grid points,',   & 
    12421247                  ' are not boundary points (flagv calculation). Check nbi, nbj, indices for boundary set ',ib_bdy 
    1243                IF(lwp) WRITE(numout,*) ' ========== ' 
    1244                IF(lwp) WRITE(numout,*) 
    1245                nstop = nstop + 1 
     1248               WRITE(ctmp2,*) ' ========== ' 
     1249               CALL ctl_stop( ' ', ctmp1, ctmp2, ' ' ) 
    12461250            ENDIF  
    12471251         END DO 
    12481252         ! 
    12491253      END DO 
    1250  
    1251       ! Compute total lateral surface for volume correction: 
    1252       ! ---------------------------------------------------- 
    1253       ! JC: this must be done at each time step with non-linear free surface 
    1254       bdysurftot = 0._wp  
    1255       IF( ln_vol ) THEN   
    1256          igrd = 2      ! Lateral surface at U-points 
    1257          DO ib_bdy = 1, nb_bdy 
    1258             DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 
    1259                nbi => idx_bdy(ib_bdy)%nbi(ib,igrd) 
    1260                nbj => idx_bdy(ib_bdy)%nbj(ib,igrd) 
    1261                flagu => idx_bdy(ib_bdy)%flagu(ib,igrd) 
    1262                bdysurftot = bdysurftot + hu_n   (nbi  , nbj)                           & 
    1263                   &                    * e2u    (nbi  , nbj) * ABS( flagu ) & 
    1264                   &                    * tmask_i(nbi  , nbj)                           & 
    1265                   &                    * tmask_i(nbi+1, nbj)                    
    1266             END DO 
    1267          END DO 
    1268  
    1269          igrd=3 ! Add lateral surface at V-points 
    1270          DO ib_bdy = 1, nb_bdy 
    1271             DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 
    1272                nbi => idx_bdy(ib_bdy)%nbi(ib,igrd) 
    1273                nbj => idx_bdy(ib_bdy)%nbj(ib,igrd) 
    1274                flagv => idx_bdy(ib_bdy)%flagv(ib,igrd) 
    1275                bdysurftot = bdysurftot + hv_n   (nbi, nbj  )                           & 
    1276                   &                    * e1v    (nbi, nbj  ) * ABS( flagv ) & 
    1277                   &                    * tmask_i(nbi, nbj  )                           & 
    1278                   &                    * tmask_i(nbi, nbj+1) 
    1279             END DO 
    1280          END DO 
    1281          ! 
    1282          CALL mpp_sum( 'bdyini', bdysurftot )      ! sum over the global domain 
    1283       END IF    
    12841254      ! 
    12851255      ! Tidy up 
     
    12881258      ! 
    12891259   END SUBROUTINE bdy_segs 
    1290  
    12911260 
    12921261   SUBROUTINE bdy_ctl_seg 
     
    13761345                     icorns(ib2,1) = npckgw(ib1) 
    13771346                  ELSEIF ((jpisft(ib2)==jpiwob(ib1)).AND.(jpjwft(ib1)==jpjsob(ib2))) THEN 
    1378                      IF(lwp) WRITE(numout,*) 
    1379                      IF(lwp) WRITE(numout,*) ' E R R O R : Found an acute open boundary corner at point (i,j)= ', & 
    1380                      &                                     jpisft(ib2), jpjwft(ib1) 
    1381                      IF(lwp) WRITE(numout,*) ' ==========  Not allowed yet' 
    1382                      IF(lwp) WRITE(numout,*) '             Crossing problem with West segment: ',npckgw(ib1), &  
    1383                      &                                                    ' and South segment: ',npckgs(ib2) 
    1384                      IF(lwp) WRITE(numout,*) 
    1385                      nstop = nstop + 1 
     1347                     WRITE(ctmp1,*) ' E R R O R : Found an acute open boundary corner at point (i,j)= ', & 
     1348                        &                                     jpisft(ib2), jpjwft(ib1) 
     1349                     WRITE(ctmp2,*) ' ==========  Not allowed yet' 
     1350                     WRITE(ctmp3,*) '             Crossing problem with West segment: ',npckgw(ib1), &  
     1351                        &                                        ' and South segment: ',npckgs(ib2) 
     1352                     CALL ctl_stop( ' ', ctmp1, ctmp2, ctmp3, ' ' ) 
    13861353                  ELSE 
    1387                      IF(lwp) WRITE(numout,*) 
    1388                      IF(lwp) WRITE(numout,*) ' E R R O R : Check South and West Open boundary indices' 
    1389                      IF(lwp) WRITE(numout,*) ' ==========  Crossing problem with West segment: ',npckgw(ib1) , & 
    1390                      &                                                    ' and South segment: ',npckgs(ib2) 
    1391                      IF(lwp) WRITE(numout,*) 
    1392                      nstop = nstop+1 
     1354                     WRITE(ctmp1,*) ' E R R O R : Check South and West Open boundary indices' 
     1355                     WRITE(ctmp2,*) ' ==========  Crossing problem with West segment: ',npckgw(ib1) , & 
     1356                        &                                         ' and South segment: ',npckgs(ib2) 
     1357                     CALL ctl_stop( ' ', ctmp1, ctmp2, ' ' ) 
    13931358                  END IF 
    13941359               END IF 
     
    14121377                     icorns(ib2,2) = npckge(ib1) 
    14131378                  ELSEIF ((jpjeft(ib1)==jpjsob(ib2)).AND.(jpisdt(ib2)==jpieob(ib1)+1)) THEN 
    1414                      IF(lwp) WRITE(numout,*) 
    1415                      IF(lwp) WRITE(numout,*) ' E R R O R : Found an acute open boundary corner at point (i,j)= ', & 
    1416                      &                                     jpisdt(ib2), jpjeft(ib1) 
    1417                      IF(lwp) WRITE(numout,*) ' ==========  Not allowed yet' 
    1418                      IF(lwp) WRITE(numout,*) '             Crossing problem with East segment: ',npckge(ib1), & 
    1419                      &                                                    ' and South segment: ',npckgs(ib2) 
    1420                      IF(lwp) WRITE(numout,*) 
    1421                      nstop = nstop + 1 
     1379                     WRITE(ctmp1,*) ' E R R O R : Found an acute open boundary corner at point (i,j)= ', & 
     1380                        &                                     jpisdt(ib2), jpjeft(ib1) 
     1381                     WRITE(ctmp2,*) ' ==========  Not allowed yet' 
     1382                     WRITE(ctmp3,*) '             Crossing problem with East segment: ',npckge(ib1), & 
     1383                        &                                        ' and South segment: ',npckgs(ib2) 
     1384                     CALL ctl_stop( ' ', ctmp1, ctmp2, ctmp3, ' ' ) 
    14221385                  ELSE 
    1423                      IF(lwp) WRITE(numout,*) 
    1424                      IF(lwp) WRITE(numout,*) ' E R R O R : Check South and East Open boundary indices' 
    1425                      IF(lwp) WRITE(numout,*) ' ==========  Crossing problem with East segment: ',npckge(ib1), & 
    1426                      &                                                    ' and South segment: ',npckgs(ib2) 
    1427                      IF(lwp) WRITE(numout,*) 
    1428                      nstop = nstop + 1 
     1386                     WRITE(ctmp1,*) ' E R R O R : Check South and East Open boundary indices' 
     1387                     WRITE(ctmp2,*) ' ==========  Crossing problem with East segment: ',npckge(ib1), & 
     1388                     &                                           ' and South segment: ',npckgs(ib2) 
     1389                     CALL ctl_stop( ' ', ctmp1, ctmp2, ' ' ) 
    14291390                  END IF 
    14301391               END IF 
     
    14481409                     icornn(ib2,1) = npckgw(ib1) 
    14491410                  ELSEIF ((jpjwdt(ib1)==jpjnob(ib2)+1).AND.(jpinft(ib2)==jpiwob(ib1))) THEN 
    1450                      IF(lwp) WRITE(numout,*) 
    1451                      IF(lwp) WRITE(numout,*) ' E R R O R : Found an acute open boundary corner at point (i,j)= ', & 
     1411                     WRITE(ctmp1,*) ' E R R O R : Found an acute open boundary corner at point (i,j)= ', & 
    14521412                     &                                     jpinft(ib2), jpjwdt(ib1) 
    1453                      IF(lwp) WRITE(numout,*) ' ==========  Not allowed yet' 
    1454                      IF(lwp) WRITE(numout,*) '             Crossing problem with West segment: ',npckgw(ib1), & 
     1413                     WRITE(ctmp2,*) ' ==========  Not allowed yet' 
     1414                     WRITE(ctmp3,*) '             Crossing problem with West segment: ',npckgw(ib1), & 
    14551415                     &                                                    ' and North segment: ',npckgn(ib2) 
    1456                      IF(lwp) WRITE(numout,*) 
    1457                      nstop = nstop + 1 
     1416                     CALL ctl_stop( ' ', ctmp1, ctmp2, ctmp3, ' ' ) 
    14581417                  ELSE 
    1459                      IF(lwp) WRITE(numout,*) 
    1460                      IF(lwp) WRITE(numout,*) ' E R R O R : Check North and West Open boundary indices' 
    1461                      IF(lwp) WRITE(numout,*) ' ==========  Crossing problem with West segment: ',npckgw(ib1), & 
     1418                     WRITE(ctmp1,*) ' E R R O R : Check North and West Open boundary indices' 
     1419                     WRITE(ctmp2,*) ' ==========  Crossing problem with West segment: ',npckgw(ib1), & 
    14621420                     &                                                    ' and North segment: ',npckgn(ib2) 
    1463                      IF(lwp) WRITE(numout,*) 
    1464                      nstop = nstop + 1 
     1421                     CALL ctl_stop( ' ', ctmp1, ctmp2, ' ' ) 
    14651422                  END IF 
    14661423               END IF 
     
    14841441                     icornn(ib2,2) = npckge(ib1) 
    14851442                  ELSEIF ((jpjedt(ib1)==jpjnob(ib2)+1).AND.(jpindt(ib2)==jpieob(ib1)+1)) THEN 
    1486                      IF(lwp) WRITE(numout,*) 
    1487                      IF(lwp) WRITE(numout,*) ' E R R O R : Found an acute open boundary corner at point (i,j)= ', & 
     1443                     WRITE(ctmp1,*) ' E R R O R : Found an acute open boundary corner at point (i,j)= ', & 
    14881444                     &                                     jpindt(ib2), jpjedt(ib1) 
    1489                      IF(lwp) WRITE(numout,*) ' ==========  Not allowed yet' 
    1490                      IF(lwp) WRITE(numout,*) '             Crossing problem with East segment: ',npckge(ib1), & 
    1491                      &                                                    ' and North segment: ',npckgn(ib2) 
    1492                      IF(lwp) WRITE(numout,*) 
    1493                      nstop = nstop + 1 
     1445                     WRITE(ctmp2,*) ' ==========  Not allowed yet' 
     1446                     WRITE(ctmp3,*) '             Crossing problem with East segment: ',npckge(ib1), & 
     1447                     &                                           ' and North segment: ',npckgn(ib2) 
     1448                     CALL ctl_stop( ' ', ctmp1, ctmp2, ctmp3, ' ' ) 
    14941449                  ELSE 
    1495                      IF(lwp) WRITE(numout,*) 
    1496                      IF(lwp) WRITE(numout,*) ' E R R O R : Check North and East Open boundary indices' 
    1497                      IF(lwp) WRITE(numout,*) ' ==========  Crossing problem with East segment: ',npckge(ib1), & 
    1498                      &                                                    ' and North segment: ',npckgn(ib2) 
    1499                      IF(lwp) WRITE(numout,*) 
    1500                      nstop = nstop + 1 
     1450                     WRITE(ctmp1,*) ' E R R O R : Check North and East Open boundary indices' 
     1451                     WRITE(ctmp2,*) ' ==========  Crossing problem with East segment: ',npckge(ib1), & 
     1452                     &                                           ' and North segment: ',npckgn(ib2) 
     1453                     CALL ctl_stop( ' ', ctmp1, ctmp2, ' ' ) 
    15011454                  END IF 
    15021455               END IF 
     
    15241477         IF (ztestmask(1)==1) THEN  
    15251478            IF (icornw(ib,1)==0) THEN 
    1526                IF(lwp) WRITE(numout,*) 
    1527                IF(lwp) WRITE(numout,*) ' E R R O R : Open boundary segment ', npckgw(ib) 
    1528                IF(lwp) WRITE(numout,*) ' ==========  does not start on land or on a corner'                                                   
    1529                IF(lwp) WRITE(numout,*) 
    1530                nstop = nstop + 1 
     1479               WRITE(ctmp1,*) ' E R R O R : Open boundary segment ', npckgw(ib) 
     1480               WRITE(ctmp2,*) ' ==========  does not start on land or on a corner'                                                   
     1481               CALL ctl_stop( ' ', ctmp1, ctmp2, ' ' ) 
    15311482            ELSE 
    15321483               ! This is a corner 
     
    15381489         IF (ztestmask(2)==1) THEN 
    15391490            IF (icornw(ib,2)==0) THEN 
    1540                IF(lwp) WRITE(numout,*) 
    1541                IF(lwp) WRITE(numout,*) ' E R R O R : Open boundary segment ', npckgw(ib) 
    1542                IF(lwp) WRITE(numout,*) ' ==========  does not end on land or on a corner'                                                   
    1543                IF(lwp) WRITE(numout,*) 
    1544                nstop = nstop + 1 
     1491               WRITE(ctmp1,*) ' E R R O R : Open boundary segment ', npckgw(ib) 
     1492               WRITE(ctmp2,*) ' ==========  does not end on land or on a corner'                                                   
     1493               CALL ctl_stop( ' ', ctmp1, ctmp2, ' ' ) 
    15451494            ELSE 
    15461495               ! This is a corner 
     
    15681517         IF (ztestmask(1)==1) THEN 
    15691518            IF (icorne(ib,1)==0) THEN 
    1570                IF(lwp) WRITE(numout,*) 
    1571                IF(lwp) WRITE(numout,*) ' E R R O R : Open boundary segment ', npckge(ib) 
    1572                IF(lwp) WRITE(numout,*) ' ==========  does not start on land or on a corner'                                                   
    1573                IF(lwp) WRITE(numout,*) 
    1574                nstop = nstop + 1  
     1519               WRITE(ctmp1,*) ' E R R O R : Open boundary segment ', npckge(ib) 
     1520               WRITE(ctmp2,*) ' ==========  does not start on land or on a corner'                                                   
     1521               CALL ctl_stop( ' ', ctmp1, ctmp2, ' ' ) 
    15751522            ELSE 
    15761523               ! This is a corner 
     
    15821529         IF (ztestmask(2)==1) THEN 
    15831530            IF (icorne(ib,2)==0) THEN 
    1584                IF(lwp) WRITE(numout,*) 
    1585                IF(lwp) WRITE(numout,*) ' E R R O R : Open boundary segment ', npckge(ib) 
    1586                IF(lwp) WRITE(numout,*) ' ==========  does not end on land or on a corner'                                                   
    1587                IF(lwp) WRITE(numout,*) 
    1588                nstop = nstop + 1 
     1531               WRITE(ctmp1,*) ' E R R O R : Open boundary segment ', npckge(ib) 
     1532               WRITE(ctmp2,*) ' ==========  does not end on land or on a corner'                                                   
     1533               CALL ctl_stop( ' ', ctmp1, ctmp2, ' ' ) 
    15891534            ELSE 
    15901535               ! This is a corner 
     
    16111556 
    16121557         IF ((ztestmask(1)==1).AND.(icorns(ib,1)==0)) THEN 
    1613             IF(lwp) WRITE(numout,*) 
    1614             IF(lwp) WRITE(numout,*) ' E R R O R : Open boundary segment ', npckgs(ib) 
    1615             IF(lwp) WRITE(numout,*) ' ==========  does not start on land or on a corner'                                                   
    1616             IF(lwp) WRITE(numout,*) 
    1617             nstop = nstop + 1 
     1558            WRITE(ctmp1,*) ' E R R O R : Open boundary segment ', npckgs(ib) 
     1559            WRITE(ctmp2,*) ' ==========  does not start on land or on a corner'                                                   
     1560            CALL ctl_stop( ' ', ctmp1, ctmp2, ' ' ) 
    16181561         ENDIF 
    16191562         IF ((ztestmask(2)==1).AND.(icorns(ib,2)==0)) THEN 
    1620             IF(lwp) WRITE(numout,*) 
    1621             IF(lwp) WRITE(numout,*) ' E R R O R : Open boundary segment ', npckgs(ib) 
    1622             IF(lwp) WRITE(numout,*) ' ==========  does not end on land or on a corner'                                                   
    1623             IF(lwp) WRITE(numout,*) 
    1624             nstop = nstop + 1 
     1563            WRITE(ctmp1,*) ' E R R O R : Open boundary segment ', npckgs(ib) 
     1564            WRITE(ctmp2,*) ' ==========  does not end on land or on a corner'                                                   
     1565            CALL ctl_stop( ' ', ctmp1, ctmp2, ' ' ) 
    16251566         ENDIF 
    16261567      END DO 
     
    16411582 
    16421583         IF ((ztestmask(1)==1).AND.(icornn(ib,1)==0)) THEN 
    1643             IF(lwp) WRITE(numout,*) 
    1644             IF(lwp) WRITE(numout,*) ' E R R O R : Open boundary segment ', npckgn(ib) 
    1645             IF(lwp) WRITE(numout,*) ' ==========  does not start on land'                                                   
    1646             IF(lwp) WRITE(numout,*) 
    1647             nstop = nstop + 1 
     1584            WRITE(ctmp1,*) ' E R R O R : Open boundary segment ', npckgn(ib) 
     1585            WRITE(ctmp2,*) ' ==========  does not start on land'                                                   
     1586            CALL ctl_stop( ' ', ctmp1, ctmp2, ' ' ) 
    16481587         ENDIF 
    16491588         IF ((ztestmask(2)==1).AND.(icornn(ib,2)==0)) THEN 
    1650             IF(lwp) WRITE(numout,*) 
    1651             IF(lwp) WRITE(numout,*) ' E R R O R : Open boundary segment ', npckgn(ib) 
    1652             IF(lwp) WRITE(numout,*) ' ==========  does not end on land'                                                   
    1653             IF(lwp) WRITE(numout,*) 
    1654             nstop = nstop + 1 
     1589            WRITE(ctmp1,*) ' E R R O R : Open boundary segment ', npckgn(ib) 
     1590            WRITE(ctmp2,*) ' ==========  does not end on land'                                                   
     1591            CALL ctl_stop( ' ', ctmp1, ctmp2, ' ' ) 
    16551592         ENDIF 
    16561593      END DO 
     
    16911628      ! 
    16921629      IF( itest>0 ) THEN 
    1693          IF(lwp) WRITE(numout,*) ' E R R O R : Segments ', ib1, 'and ', ib2 
    1694          IF(lwp) WRITE(numout,*) ' ==========  have different open bdy schemes'                                                   
    1695          IF(lwp) WRITE(numout,*) 
    1696          nstop = nstop + 1 
     1630         WRITE(ctmp1,*) ' E R R O R : Segments ', ib1, 'and ', ib2 
     1631         WRITE(ctmp2,*) ' ==========  have different open bdy schemes'                                                   
     1632         CALL ctl_stop( ' ', ctmp1, ctmp2, ' ' ) 
    16971633      ENDIF 
    16981634      ! 
Note: See TracChangeset for help on using the changeset viewer.