Changeset 2299 in lmdz_wrf


Ignore:
Timestamp:
Jan 29, 2019, 8:49:10 PM (6 years ago)
Author:
lfita
Message:

Working version!!

Location:
trunk/tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/module_scientific.f90

    r2297 r2299  
    56345634  END SUBROUTINE spaceweightstats
    56355635
    5636   SUBROUTINE multi_spacewightstats_in3DRK3_slc3v(varin, rundim, Ngridsin, gridsin, percentages,       &
    5637     varout, di1, di2, di3, ds1, ds2, ds3, ds4, ds5, ds6, maxNgridsin, Lstats)
     5636  SUBROUTINE multi_spacewightstats_in3DRK3_slc3v3(varin, Ngridsin, gridsin, percentages, varout,      &
     5637    di1, di2, di3, ds1, ds2, ds3, maxNgridsin)
    56385638  ! Subroutine to compute an spatial statistics value from a 3D RK matrix using 3rd dimension as
    5639   !   running one into a matrix of slices using spatial weights
     5639  !   running one into a matrix of 3-variables slices of rank 3 using spatial weights
    56405640
    56415641    IMPLICIT NONE
    56425642
    5643     INTEGER, INTENT(in)                                  :: di1, di2, di3, ds1, ds2, ds3, ds4, ds5, ds6
    5644     INTEGER, INTENT(in)                                  :: rundim, maxNgridsin
    5645     CHARACTER(len=*), INTENT(in)                         :: stats
    5646     INTEGER, DIMENSION(ds1,ds2,ds3,ds4,ds5,ds6),                                                      &
    5647       INTENT(in)                                         :: Ngridsin
    5648     INTEGER, INTENT(in)                                                                               &
    5649       DIMENSION(ds1,ds2,ds3,ds4,ds5,ds6,maxNgridsin,2)   :: gridsin
     5643    INTEGER, INTENT(in)                                  :: di1, di2, di3, ds1, ds2, ds3
     5644    INTEGER, INTENT(in)                                  :: maxNgridsin
     5645    INTEGER, DIMENSION(ds1,ds2,ds3), INTENT(in)          :: Ngridsin
     5646    INTEGER, DIMENSION(ds1,ds2,ds3,maxNgridsin,2),                                                    &
     5647      INTENT(in)                                         :: gridsin
    56505648    REAL(r_k), DIMENSION(di1,di2,di3), INTENT(in)        :: varin
    5651     REAL(r_k), INTENT(in)                                                                             &
    5652       DIMENSION(ds1,ds2,ds3,ds4,ds5,ds6,maxNgridsin)     :: percentages
    5653     REAL(r_k), DIMENSION(ds1,ds2,ds3,ds4,ds5,ds6,di3,7),                                              &
    5654       INTENT(out)                                        :: varout
     5649    REAL(r_k), INTENT(in),                                                                            &
     5650      DIMENSION(ds1,ds2,ds3,maxNgridsin)                 :: percentages
     5651    REAL(r_k), DIMENSION(ds1,ds2,ds3,di3,7), INTENT(out) :: varout
    56555652
    56565653! Local
    5657     INTEGER                                              :: i1, i2, i3, s1, s2, s3, s4, s5, s6
     5654    INTEGER                                              :: i1, i2, i3, s1, s2, s3, iv
    56585655    INTEGER                                              :: Ncounts, Nin
    56595656    CHARACTER(len=3)                                     :: val1S, val2S
    56605657    CHARACTER(len=30)                                    :: val3S
    5661     REAL(r_k)                                            :: val1, val2
    5662     REAL(r_k), DIMENSION(Lstats)                         :: icounts
     5658    REAL(r_k)                                            :: minv, maxv, meanv, mean2v, stdv, medv
    56635659    INTEGER, DIMENSION(:), ALLOCATABLE                   :: pin
    56645660    INTEGER, DIMENSION(:,:), ALLOCATABLE                 :: gin
     5661    REAL(r_k), DIMENSION(:), ALLOCATABLE                 :: svin
     5662    REAL(r_k), DIMENSION(:,:), ALLOCATABLE               :: vin
    56655663
    56665664!!!!!!! Variables
    56675665! di1, di2, di3: length of dimensions of the 3D matrix of values
    5668 ! ds[1-6]: length of dimensions of matrix with the slices
     5666! ds[1-3]: length of dimensions of matrix with the slices
    56695667! maxNgridsin: maximum number of grid points from the 3D matrix in any slice
    56705668! varin: 3D RK variable to be used
     
    56725670! gridsin: coordinates of grids of the 3D RK matrix B to matrix of slices
    56735671! percentages: weights as percentages of space of 3D RK matrix for each slice
    5674 ! stats: name of the spatial statistics to compute inside each slice using values from 3D RK matrix
    5675 !   Avaialbe ones:
     5672!!!!!
     5673! Available spatial statistics to compute inside each slice using values from 3D RK matrix
    56765674!   'min': minimum value
    56775675!   'max': maximum value
     
    56835681! varout: output statistical variable
    56845682
    5685     fname = 'multi_spacewightstats_in3DRK3_slc3v'
     5683    fname = 'multi_spacewightstats_in3DRK3_slc3v3'
     5684
     5685    ! Let's be efficient?
     5686    varout = fillVal64
     5687    DO s1 =1, ds1
     5688      DO s2 =1, ds2
     5689        DO s3 =1, ds3
     5690          Nin = Ngridsin(s1,s2,s3)
     5691          IF (ALLOCATED(gin)) DEALLOCATE(gin)
     5692          ALLOCATE(gin(Nin,2))
     5693          IF (ALLOCATED(pin)) DEALLOCATE(pin)
     5694          ALLOCATE(pin(Nin))
     5695          IF (ALLOCATED(vin)) DEALLOCATE(vin)
     5696          ALLOCATE(vin(Nin,di3))
     5697          IF (ALLOCATED(svin)) DEALLOCATE(svin)
     5698          ALLOCATE(svin(Nin))
     5699          gin = gridsin(s1,s2,s3,1:Nin,:)
     5700          pin = percentages(s1,s2,s3,1:Nin)
     5701
     5702          minv = fillVal64
     5703          maxv = -fillVal64
     5704          meanv = zeroRK
     5705          mean2v = zeroRK
     5706          stdv = zeroRK
     5707
     5708          ! Getting the values
     5709          DO iv=1, Nin
     5710            i1 = gin(iv,1)
     5711            i2 = gin(iv,2)
     5712            vin(iv,:) = varin(i1,i2,:)
     5713          END DO
     5714
     5715          ! Computing along d3
     5716          DO i3=1, di3
     5717            minv = MINVAL(vin(:,i3))
     5718            maxv = MAXVAL(vin(:,i3))
     5719            meanv = SUM(vin(:,i3)*pin)/Nin
     5720            mean2v = SUM(vin(:,i3)**2*pin)/Nin
     5721            stdv = SQRT(mean2v - meanv**2)
     5722            svin = vin(:,i3)
     5723            CALL SortR_K(svin, Nin)
     5724            medv = svin(INT(Nin/2))
     5725            varout(s1,s2,s3,i3,1) = minv
     5726            varout(s1,s2,s3,i3,2) = maxv
     5727            varout(s1,s2,s3,i3,3) = meanv
     5728            varout(s1,s2,s3,i3,4) = mean2v
     5729            varout(s1,s2,s3,i3,5) = stdv
     5730            varout(s1,s2,s3,i3,6) = medv
     5731            varout(s1,s2,s3,i3,7) = Nin*1.
     5732          END DO
     5733        END DO
     5734      END DO
     5735    END DO
     5736
     5737    IF (ALLOCATED(gin)) DEALLOCATE(gin)
     5738    IF (ALLOCATED(pin)) DEALLOCATE(pin)
     5739    IF (ALLOCATED(vin)) DEALLOCATE(vin)
     5740    IF (ALLOCATED(svin)) DEALLOCATE(svin)
     5741   
     5742    RETURN
     5743
     5744  END SUBROUTINE multi_spacewightstats_in3DRK3_slc3v3
     5745
     5746  SUBROUTINE multi_spacewightstats_in3DRK3_slc3v4(varin, Ngridsin, gridsin, percentages, varout,      &
     5747    di1, di2, di3, ds1, ds2, ds3, ds4, maxNgridsin)
     5748  ! Subroutine to compute an spatial statistics value from a 3D RK matrix using 3rd dimension as
     5749  !   running one into a matrix of 3-variables slices of rank 4 using spatial weights
     5750
     5751    IMPLICIT NONE
     5752
     5753    INTEGER, INTENT(in)                                  :: di1, di2, di3, ds1, ds2, ds3, ds4
     5754    INTEGER, INTENT(in)                                  :: maxNgridsin
     5755    INTEGER, DIMENSION(ds1,ds2,ds3,ds4), INTENT(in)      :: Ngridsin
     5756    INTEGER, INTENT(in),                                                                              &
     5757      DIMENSION(ds1,ds2,ds3,ds4,maxNgridsin,2)           :: gridsin
     5758    REAL(r_k), DIMENSION(di1,di2,di3), INTENT(in)        :: varin
     5759    REAL(r_k), INTENT(in),                                                                            &
     5760      DIMENSION(ds1,ds2,ds3,ds4,maxNgridsin)             :: percentages
     5761    REAL(r_k), DIMENSION(ds1,ds2,ds3,ds4,di3,7),                                                      &
     5762      INTENT(out)                                        :: varout
     5763
     5764! Local
     5765    INTEGER                                              :: i1, i2, i3, s1, s2, s3, s4, iv
     5766    INTEGER                                              :: Ncounts, Nin
     5767    CHARACTER(len=3)                                     :: val1S, val2S
     5768    CHARACTER(len=30)                                    :: val3S
     5769    REAL(r_k)                                            :: minv, maxv, meanv, mean2v, stdv, medv
     5770    INTEGER, DIMENSION(:), ALLOCATABLE                   :: pin
     5771    INTEGER, DIMENSION(:,:), ALLOCATABLE                 :: gin
     5772    REAL(r_k), DIMENSION(:), ALLOCATABLE                 :: svin
     5773    REAL(r_k), DIMENSION(:,:), ALLOCATABLE               :: vin
     5774
     5775!!!!!!! Variables
     5776! di1, di2, di3: length of dimensions of the 3D matrix of values
     5777! ds[1-4]: length of dimensions of matrix with the slices
     5778! maxNgridsin: maximum number of grid points from the 3D matrix in any slice
     5779! varin: 3D RK variable to be used
     5780! Ngridsin: number of grids from 3D RK matrix for each slice
     5781! gridsin: coordinates of grids of the 3D RK matrix B to matrix of slices
     5782! percentages: weights as percentages of space of 3D RK matrix for each slice
     5783!!!!!
     5784! Available spatial statistics to compute inside each slice using values from 3D RK matrix
     5785!   'min': minimum value
     5786!   'max': maximum value
     5787!   'mean': space weighted mean value
     5788!   'mean2': space weighted quadratic mean value
     5789!   'stddev': space weighted standard deviation value
     5790!   'median': median value
     5791!   'count': percentage of the space of matrix A covered by each different value of matrix B
     5792! varout: output statistical variable
     5793
     5794    fname = 'multi_spacewightstats_in3DRK3_slc3v4'
    56865795
    56875796    ! Let's be efficient?
     
    56915800        DO s3 =1, ds3
    56925801          DO s4 =1, ds4
    5693             DO s5 =1, ds5
    5694               DO s5 =1, ds6
    5695                 Nin = Ngridsin(s1,s2,s3,s4,s5,s6)
    5696                 IF (ALLOCATED(gin)) DEALLOCATE(gin)
    5697                 ALLOCATE(gin(Nin,2))
    5698                 IF (ALLOCATED(pin)) DEALLOCATE(pin)
    5699                 ALLOCATE(pin(Nin))
    5700                 gin = gridsin(s1,s2,s3,s4,s5,s6,1:Nin,:)
    5701                 pin = percentages(s1,s2,s3,s4,s5,s6,1:Nin)
    5702 
    5703                 DO i1=1, di1
    5704                   DO i2=1, di2
    5705 
    5706         DO iv=1, Ngridsin(ix,iy)
    5707               ii = gridsin(ix,iy,iv,1)
    5708               jj = gridsin(ix,iy,iv,2)
    5709               IF (varin(ii,jj) < varout(ix,iy,Lstats)) varout(ix,iy,1) = varin(ii,jj)
     5802            Nin = Ngridsin(s1,s2,s3,s4)
     5803            IF (ALLOCATED(gin)) DEALLOCATE(gin)
     5804            ALLOCATE(gin(Nin,2))
     5805            IF (ALLOCATED(pin)) DEALLOCATE(pin)
     5806            ALLOCATE(pin(Nin))
     5807            IF (ALLOCATED(vin)) DEALLOCATE(vin)
     5808            ALLOCATE(vin(Nin,di3))
     5809            IF (ALLOCATED(svin)) DEALLOCATE(svin)
     5810            ALLOCATE(svin(Nin))
     5811            gin = gridsin(s1,s2,s3,s4,1:Nin,:)
     5812            pin = percentages(s1,s2,s3,s4,1:Nin)
     5813
     5814            minv = fillVal64
     5815            maxv = -fillVal64
     5816            meanv = zeroRK
     5817            mean2v = zeroRK
     5818            stdv = zeroRK
     5819
     5820            ! Getting the values
     5821            DO iv=1, Nin
     5822              i1 = gin(iv,1)
     5823              i2 = gin(iv,2)
     5824              vin(iv,:) = varin(i1,i2,:)
     5825            END DO
     5826
     5827            ! Computing along d3
     5828            DO i3=1, di3
     5829              minv = MINVAL(vin(:,i3))
     5830              maxv = MAXVAL(vin(:,i3))
     5831              meanv = SUM(vin(:,i3)*pin)/Nin
     5832              mean2v = SUM(vin(:,i3)**2*pin)/Nin
     5833              stdv = SQRT(mean2v - meanv**2)
     5834              svin = vin(:,i3)
     5835              CALL SortR_K(svin, Nin)
     5836              medv = svin(INT(Nin/2))
     5837              varout(s1,s2,s3,s4,i3,1) = minv
     5838              varout(s1,s2,s3,s4,i3,2) = maxv
     5839              varout(s1,s2,s3,s4,i3,3) = meanv
     5840              varout(s1,s2,s3,s4,i3,4) = mean2v
     5841              varout(s1,s2,s3,s4,i3,5) = stdv
     5842              varout(s1,s2,s3,s4,i3,6) = medv
     5843              varout(s1,s2,s3,s4,i3,7) = Nin*1.
    57105844            END DO
    57115845          END DO
    57125846        END DO
    5713 
    5714       CASE DEFAULT
    5715         msg = "statisitcs '" // TRIM(stats) // "' not ready !!" // CHAR(44) // " available ones: " // &
    5716           "'min', 'max', 'mean', 'mean2', 'stddev', 'count'"
    5717         CALL ErrMsg(msg, fname, -1)
    5718     END SELECT statn
    5719 
    5720 
    5721   END SUBROUTINE multi_spacewightstats_in3DRK3_slc3v
     5847      END DO
     5848    END DO
     5849
     5850    IF (ALLOCATED(gin)) DEALLOCATE(gin)
     5851    IF (ALLOCATED(pin)) DEALLOCATE(pin)
     5852    IF (ALLOCATED(vin)) DEALLOCATE(vin)
     5853    IF (ALLOCATED(svin)) DEALLOCATE(svin)
     5854   
     5855    RETURN
     5856
     5857  END SUBROUTINE multi_spacewightstats_in3DRK3_slc3v4
    57225858
    57235859  SUBROUTINE multi_index_mat2DI(d1, d2, d12, mat, value, Nindices, indices)
  • trunk/tools/nc_var_tools.py

    r2297 r2299  
    2776027760
    2776127761    # Statistics from values within final slice
    27762     statns = ['min', 'max', 'mean', 'mean2', 'stddev', 'median']
     27762    statns = ['min', 'max', 'mean', 'mean2', 'stddev', 'median', 'count']
    2776327763    Lstatns = {'min': 'space minimum', 'max': 'space maximum', 'mean': 'space mean', \
    2776427764      'mean2': 'space quadratic mean', 'stddev': 'spcae standard deviation',         \
    2776527765      'median': 'median', 'count': 'amount of grids'}
    27766     ustatns = {'min': 'vu', 'max': 'vu', 'mean': 'vu', 'mean2': 'vu', 'stddev': 'vu',\
     27766    Ustatns = {'min': 'vu', 'max': 'vu', 'mean': 'vu', 'mean2': 'vu', 'stddev': 'vu',\
    2776727767      'median': 'vu', 'count': 'counts'}
    2776827768
     
    2856228562    aanewvar.setncattr('coordinates',' '.join(Srgrid[::-1]))
    2856328563
    28564     anewvar = onewnc.createVariable(dn+'gridarea','f',tuple(Srgrid),                 \
     28564    anewvar = onewnc.createVariable(dn+'gridarea','f',tuple(Spgrid),                 \
    2856528565      fill_value=gen.fillValueF)
    2856628566    basicvardef(anewvar ,dn+'gridarea', "area of the join slice " + newslcvarns[0] + \
    2856728567      " & " + newslcvarns[1], vu)
    28568     anewvar.setncattr('coordinates',' '.join(Srgrid[::-1]))
     28568    anewvar.setncattr('coordinates',' '.join(Spgrid[::-1]))
    2856928569
    2857028570    pnewvar = onewnc.createVariable(dn+'gridpercen','f',tuple(Spgrid),               \
     
    2857228572    basicvardef(pnewvar ,dn+'gridpercen', "percentages of the " +                    \
    2857328573      "grids cells from " + newslcvarns[0] + " laying within " + newslcvarns[1], '1')
    28574     pnewvar.setncattr('coordinates',' '.join(Scgrid[::-1]))
     28574    pnewvar.setncattr('coordinates',' '.join(Spgrid[::-1]))
    2857528575
    2857628576    for jA in range(dyA):
     
    2859328593                        # I do not understand why this is needed !!
    2859428594                        if aA != gen.mamat[1] and aB != gen.mamat[1]:
    28595                             anewvar[jB,iB,jA,iA]= (aA*pA)*(aB*pB)
     28595                            anewvar[iv.jB,iB,jA,iA]= (aA*pA)*(aB*pB)
    2859628596                            slicearea = slicearea + (aA*pA)*(aB*pB)
    2859728597                        aanewvar[jB,iB,jA,iA]= slicearea
     
    2867128671        aanewvar.setncattr('coordinates',' '.join(Srgrid[::-1]))
    2867228672
    28673         anewvar = onewnc.createVariable(dn+'gridarea','f',tuple(Srgrid),                 \
     28673        anewvar = onewnc.createVariable(dn+'gridarea','f',tuple(Spgrid),                 \
    2867428674          fill_value=gen.fillValueF)
    2867528675        basicvardef(anewvar ,dn+'gridarea', "area of the join slice " + newslcvarns[0] + \
    2867628676          " & " + newslcvarns[1], vu)
    28677         anewvar.setncattr('coordinates',' '.join(Srgrid[::-1]))
     28677        anewvar.setncattr('coordinates',' '.join(Spgrid[::-1]))
    2867828678
    2867928679        pnewvar = onewnc.createVariable(dn+'gridpercen','f',tuple(Spgrid),               \
     
    2868128681        basicvardef(pnewvar ,dn+'gridpercen', "percentages of the " +                    \
    2868228682          "grids cells from " + newslcvarns[0] + " laying within " + newslcvarns[1], '1')
    28683         pnewvar.setncattr('coordinates',' '.join(Scgrid[::-1]))
     28683        pnewvar.setncattr('coordinates',' '.join(Spgrid[::-1]))
    2868428684
    2868528685        for jA in range(dyA):
     
    2870228702                            # I do not understand why this is needed !!
    2870328703                            if aA != gen.mamat[1] and aB != gen.mamat[1]:
    28704                                 anewvar[jB,iB,jA,iA]= (aA*pA)*(aB*pB)
     28704                                anewvar[iv,jB,iB,jA,iA]= (aA*pA)*(aB*pB)
    2870528705                                slicearea = slicearea + (aA*pA)*(aB*pB)
    2870628706                            aanewvar[jB,iB,jA,iA]= slicearea
     
    2872228722    sa = oslicearea[:]
    2872328723    sga = oslicegridarea[:]
    28724     sgp = oslicegridpercen[:]
    28725 
    28726     dimsslice = list(oNslice.dimensions)
    28727     shapeslice = list(oNslice.shape)
     28724
     28725    # removing monotones. Fortran only accepts rank <= 7 arrays !!
     28726    sN, Ndims = gen.remove_monotones(sN, oNslice.dimensions)
     28727    sin, indims = gen.remove_monotones(sin, oslicein.dimensions)
     28728    sa, adims = gen.remove_monotones(sa, oslicearea.dimensions)
     28729    sga, gadims = gen.remove_monotones(sga, oslicegridarea.dimensions)
     28730
     28731    # Percentages as the areal fraction of each grid with respect slice size
     28732    sgp = sga/sa
     28733
     28734    ssh = sN.shape
     28735    dimsslice = list(Ndims)
     28736    shapeslice = list(sN.shape)
     28737
     28738    sNt = sN.transpose()
     28739    sint = sin.transpose()
     28740    spt = sgp.transpose()
    2872828741
    2872928742    for varn in varns:
     
    2873828751        vardims = []
    2873928752        varshape = []
     28753        idd = 0
    2874028754        for dnn in vdimns:
    2874128755            vdimn = dimvars[dnn]
     
    2876928783                    if not gen.searchInlist(onewnc.variables,vdimn): add_vars(onc,   \
    2877028784                      onewnc, [vdimn])
     28785            idd = idd + 1
    2877128786
    2877228787        newvardims = vardims + dimsslice
    2877328788        newvarshape = varshape + shapeslice
    28774 
     28789        print 'Lluis newvardims:', newvardims, 'newvarshape:', newvarshape
     28790
     28791#        newvarslice = []
     28792#        for dimn in
     28793
     28794        onewvars = {}
    2877528795        for statn in statns:
    2877628796            Lstn = Lstatns[statn]
    2877728797            if Ustatns[statn] == 'vu': vvu = vu
    2877828798            else:
    28779                 if statn == 'stddev': vvu = vu + '2'
     28799                if statn == 'mean2': vvu = vu + '2'
    2878028800                else: vvu = Ustatns[statn]
    2878128801            newvar= onewnc.createVariable(varn+'sliced'+statn,'f', tuple(newvardims),\
     
    2878328803            basicvardef(newvar, varn+'sliced'+statn, Lstn + ' ' + varn +             \
    2878428804              ' within slice by '+ dn, vvu)
     28805            onewvars[statn] = newvar
    2878528806            onewnc.sync()
    2878628807
    2878728808        # getting all the slices
    28788         allslices = gen.provide_slices(dimsslice, shapeslice, dimsslice)
    28789         print allslices
     28809        #allslices = gen.provide_slices(dimsslice, shapeslice, dimsslice)
     28810        #print allslices
     28811
     28812        varvt = varv.transpose()
     28813
     28814        print 'Lluis vshape:', vshape, 'sN:', sN.shape
     28815
     28816        if len(vshape) == 3 and len(sN.shape) == 4:
     28817            voutt = fsci.module_scientific.multi_spacewightstats_in3drk3_slc3v4(     \
     28818              varin=varvt, ngridsin=sNt, gridsin=sint, percentages=spt,              \
     28819              di1=vshape[2], di2=vshape[1], di3=vshape[0], ds1=ssh[3],               \
     28820              ds2=ssh[2], ds3=ssh[1], ds4=ssh[0], maxngridsin=sin.shape[1])
     28821            vout = voutt.transpose()
     28822        elif len(vshape) == 3 and len(sN.shape) == 3:
     28823            voutt = fsci.module_scientific.multi_spacewightstats_in3drk3_slc3v3(     \
     28824              varin=varvt, ngridsin=sNt, gridsin=sint, percentages=spt,              \
     28825              di1=vshape[2], di2=vshape[1], di3=vshape[0], ds1=ssh[2],               \
     28826              ds2=ssh[1], ds3=ssh[0], maxngridsin=sin.shape[1])
     28827            vout = voutt.transpose()
     28828        else:
     28829            print errormsg
     28830            print '  ' + fname + ": variable rank:", len(vshape), 'combined with',   \
     28831             ' slice rank:', len(sN.shape), 'not ready!!'
     28832            print '    available ones _______'
     28833            print ' var_rank: 3   slice_rank: 3'
     28834            print ' var_rank: 3   slice_rank: 4'
     28835            quit(-1)
     28836
     28837        print 'Lluis shapes vout:', vout.shape
     28838
     28839        ist = 0
     28840        for statn in statns:
     28841            newvar = onewvars[statn]
     28842            print 'Lluis stn:', statn, 'shape:', newvar.shape
     28843            newvar[:] = vout[ist]
     28844            onewnc.sync()
    2879028845
    2879128846        quit()
Note: See TracChangeset for help on using the changeset viewer.