- Timestamp:
- Jan 30, 2019, 7:41:32 PM (6 years ago)
- Location:
- trunk/tools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/module_scientific.f90
r2302 r2304 44 44 ! multi_index_mat3DRK: Subroutine to provide the indices of the different locations of a value inside a 3D RK matrix 45 45 ! multi_index_mat4DRK: Subroutine to provide the indices of the different locations of a value inside a 4D RK matrix 46 ! multi_spaceweightstats_in3DRK3_slc3v3: Subroutine to compute an spatial statistics value from a 3D RK matrix using 3rd dimension as 47 ! running one into a matrix of 3-variables slices of rank 3 using spatial weights 48 ! multi_spaceweightstats_in3DRK3_slc3v4: Subroutine to compute an spatial statistics value from a 3D RK matrix using 3rd dimension as 49 ! running one into a matrix of 3-variables slices of rank 4 using spatial weights 46 50 ! NcountR: Subroutine to count real values 47 51 ! paths_border: Subroutine to search the paths of a border field. … … 5634 5638 END SUBROUTINE spaceweightstats 5635 5639 5636 SUBROUTINE multi_spacew ightstats_in3DRK3_slc3v3(varin, Ngridsin, gridsin, percentages, varout,&5640 SUBROUTINE multi_spaceweightstats_in3DRK3_slc3v3(varin, Ngridsin, gridsin, percentages, varout, & 5637 5641 di1, di2, di3, ds1, ds2, ds3, maxNgridsin) 5638 5642 ! Subroutine to compute an spatial statistics value from a 3D RK matrix using 3rd dimension as … … 5653 5657 ! Local 5654 5658 INTEGER :: i1, i2, i3, s1, s2, s3, iv 5659 INTEGER :: ii3, ss1, ss2, ss3 5655 5660 INTEGER :: Ncounts, Nin 5656 5661 CHARACTER(len=3) :: val1S, val2S 5657 5662 CHARACTER(len=30) :: val3S 5658 5663 REAL(r_k) :: minv, maxv, meanv, mean2v, stdv, medv 5659 INTEGER, DIMENSION(:), ALLOCATABLE:: pin5664 REAL(r_k), DIMENSION(:), ALLOCATABLE :: pin 5660 5665 INTEGER, DIMENSION(:,:), ALLOCATABLE :: gin 5661 5666 REAL(r_k), DIMENSION(:), ALLOCATABLE :: svin … … 5681 5686 ! varout: output statistical variable 5682 5687 5683 fname = 'multi_spacewightstats_in3DRK3_slc3v3' 5688 fname = 'multi_spaceweightstats_in3DRK3_slc3v3' 5689 5690 varout = fillval64 5691 5692 ss1 = 8 + 1 5693 ss2 = 5 + 1 5694 ss3 = 3 + 1 5695 ii3 = 1 + 1 5684 5696 5685 5697 ! Let's be efficient? … … 5700 5712 pin = percentages(s1,s2,s3,1:Nin) 5701 5713 5702 minv = fillVal645703 maxv = -fillVal645704 meanv = zeroRK5705 mean2v = zeroRK5706 stdv = zeroRK5707 5708 5714 ! Getting the values 5709 5715 DO iv=1, Nin … … 5713 5719 END DO 5714 5720 5721 IF (s1 == ss1 .AND. s2 == ss2 .AND. s3 == ss3) THEN 5722 PRINT *, ' Lluis FOR Nin:', Nin 5723 PRINT *, ' Lluis FOR values:', vin(:,ii3) 5724 DO iv=1, Nin 5725 PRINT *,' c:', iv, ':', gin(iv,:), ' p:', pin(iv) 5726 END DO 5727 END IF 5728 5715 5729 ! Computing along d3 5716 5730 DO i3=1, di3 5731 minv = fillVal64 5732 maxv = -fillVal64 5733 meanv = zeroRK 5734 mean2v = zeroRK 5735 stdv = zeroRK 5717 5736 minv = MINVAL(vin(:,i3)) 5718 5737 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) 5738 meanv = SUM(vin(:,i3)*pin) 5739 mean2v = SUM(vin(:,i3)**2*pin) 5740 DO iv=1,Nin 5741 stdv = stdv + ( (meanv - vin(iv,i3))*pin(iv) )**2 5742 END DO 5743 stdv = SQRT(stdv) 5722 5744 svin = vin(:,i3) 5723 5745 CALL SortR_K(svin, Nin) … … 5742 5764 RETURN 5743 5765 5744 END SUBROUTINE multi_spacew ightstats_in3DRK3_slc3v35745 5746 SUBROUTINE multi_spacew ightstats_in3DRK3_slc3v4(varin, Ngridsin, gridsin, percentages, varout,&5766 END SUBROUTINE multi_spaceweightstats_in3DRK3_slc3v3 5767 5768 SUBROUTINE multi_spaceweightstats_in3DRK3_slc3v4(varin, Ngridsin, gridsin, percentages, varout, & 5747 5769 di1, di2, di3, ds1, ds2, ds3, ds4, maxNgridsin) 5748 5770 ! Subroutine to compute an spatial statistics value from a 3D RK matrix using 3rd dimension as … … 5768 5790 CHARACTER(len=30) :: val3S 5769 5791 REAL(r_k) :: minv, maxv, meanv, mean2v, stdv, medv 5770 INTEGER, DIMENSION(:), ALLOCATABLE:: pin5792 REAL(r_k), DIMENSION(:), ALLOCATABLE :: pin 5771 5793 INTEGER, DIMENSION(:,:), ALLOCATABLE :: gin 5772 5794 REAL(r_k), DIMENSION(:), ALLOCATABLE :: svin … … 5792 5814 ! varout: output statistical variable 5793 5815 5794 fname = 'multi_spacewightstats_in3DRK3_slc3v4' 5816 fname = 'multi_spaceweightstats_in3DRK3_slc3v4' 5817 5818 varout = fillval64 5795 5819 5796 5820 ! Let's be efficient? … … 5827 5851 ! Computing along d3 5828 5852 DO i3=1, di3 5853 minv = fillVal64 5854 maxv = -fillVal64 5855 meanv = zeroRK 5856 mean2v = zeroRK 5857 stdv = zeroRK 5858 5829 5859 minv = MINVAL(vin(:,i3)) 5830 5860 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) 5861 meanv = SUM(vin(:,i3)*pin) 5862 mean2v = SUM(vin(:,i3)**2*pin) 5863 DO iv=1,Nin 5864 stdv = stdv + ( (meanv - vin(iv,i3))*pin(iv) )**2 5865 END DO 5866 stdv = SQRT(stdv) 5834 5867 svin = vin(:,i3) 5835 5868 CALL SortR_K(svin, Nin) … … 5855 5888 RETURN 5856 5889 5857 END SUBROUTINE multi_spacew ightstats_in3DRK3_slc3v45890 END SUBROUTINE multi_spaceweightstats_in3DRK3_slc3v4 5858 5891 5859 5892 SUBROUTINE multi_index_mat2DI(d1, d2, d12, mat, value, Nindices, indices) -
trunk/tools/nc_var_tools.py
r2303 r2304 28742 28742 for iB in range(dxB): 28743 28743 Nin = sN[jA,iA,jB,iB] 28744 sgpa[0:Nin,jA,iA,jB,iB] = anewvar[0:Nin,jA,iA,jB,iB]/ \ 28745 aanewvar[jA,iA,jB,iB] 28746 panewvar[0:Nin,jA,iA,jB,iB] = sgpa[0:Nin,jA,iA,jB,iB] 28744 if Nin > 0 and aanewvar[jA,iA,jB,iB] != 0.: 28745 sgpa[0:Nin,jA,iA,jB,iB] = anewvar[0:Nin,jA,iA,jB,iB]/ \ 28746 aanewvar[jA,iA,jB,iB] 28747 panewvar[0:Nin,jA,iA,jB,iB] = sgpa[0:Nin,jA,iA,jB,iB] 28748 # Let's check 28749 psum = np.sum(sgpa[0:Nin,jA,iA,jB,iB]) 28750 if psum != 1.: 28751 print warnmsg 28752 print ' ' + fname + 'at slide:', jA,iA,jB,iB, \ 28753 'percentages do NOT add one !!' 28754 print ' Ngrids:', Nin, 'slice area:', \ 28755 aanewvar[jA,iA,jB,iB], 'total sum:', psum 28756 #for iv in range(Nin): 28757 # print iv, sgpa[iv,jA,iA,jB,iB] 28747 28758 onewnc.sync() 28748 28759 28760 # Masking... 28761 sgpa = ma.masked_equal(sgpa,gen.fillValueF) 28762 28749 28763 # removing monotones. Fortran only accepts rank <= 7 arrays !! 28750 28764 sN, Ndims = gen.remove_monotones(sN, oNslice.dimensions) … … 28759 28773 28760 28774 sNt = sN.transpose() 28761 sint = sin.transpose() 28775 #sint = sin.transpose() 28776 sint0 = sin.transpose() 28777 ## We are in Fortran thus (dx,dy) and 1st:1 !!!! 28778 sint = np.ones((sint0.shape), dtype=np.float)*gen.fillValueF 28779 sint[...,0] = sint0[...,1] 28780 sint[...,1] = sint0[...,0] 28762 28781 spt = sgpa.transpose() 28782 28783 # Checking 28784 i = 3 28785 j = 5 28786 k = 8 28787 chijk = [i,j,k] 28788 it = 1 28789 slicesvals = [] 28790 print 'Lluis Ndims:', Ndims 28791 idd = 0 28792 for dnn in Ndims: 28793 scvv = slicesinf[dnn.split('_')[1]] 28794 sccvvv = scvv[3] 28795 print 'sccvvv:', sccvvv 28796 print 'Lluis dnn:', dnn, sccvvv[chijk[idd]] 28797 slicesvals.append(sccvvv[chijk[idd]]) 28798 idd = idd + 1 28763 28799 28764 28800 for varn in varns: … … 28776 28812 for dnn in vdimns: 28777 28813 vdimn = dimvars[dnn] 28778 if vdimn == 'WRFtime': 28814 if vdimn == 'WRFtime': 28779 28815 vdimn = 'time' 28780 odimvar = onc.variables['Times'] 28781 timewrfv = odimvar[:] 28782 tvals, urefvals = compute_WRFtime(timewrfv, refdate='19491201000000',\ 28783 tunitsval='minutes') 28784 tvals = np.array(tvals) 28785 dimtwrf = len(tvals) 28816 if not onewnc.variables.has_key('time'): 28817 odimvar = onc.variables['Times'] 28818 timewrfv = odimvar[:] 28819 tvals, urefvals = compute_WRFtime(timewrfv, \ 28820 refdate='19491201000000', tunitsval='minutes') 28821 tvals = np.array(tvals) 28822 dimtwrf = len(tvals) 28823 if not gen.searchInlist(onewnc.dimensions,vdimn): 28824 newdim = onewnc.createDimension(vdimn, None) 28825 if not gen.searchInlist(onewnc.variables,vdimn): 28826 newvar = onewnc.createVariable(vdimn, 'f', ('time')) 28827 newvar[:] = tvals 28828 basicvardef(newvar, 'time', 'Time', urefvals) 28829 newvar.setncattr('calendar','gregorian') 28786 28830 if gen.searchInlist(slicestatsdim, dnn): 28787 28831 vardims.append(vdimn) 28788 28832 varshape.append(dimtwrf) 28789 if not gen.searchInlist(onewnc.dimensions,vdimn):28790 newdim = onewnc.createDimension(vdimn, None)28791 if not gen.searchInlist(onewnc.variables,vdimn):28792 newvar = onewnc.createVariable(vdimn, 'f', ('time'))28793 newvar[:] = tvals28794 basicvardef(newvar, 'time', 'Time', urefvals)28795 newvar.setncattr('calendar','gregorian')28796 28833 28797 28834 else: … … 28809 28846 newvardims = vardims + dimsslice 28810 28847 newvarshape = varshape + shapeslice 28811 print 'Lluis newvardims:', newvardims, 'newvarshape:', newvarshape 28848 print 'Lluis newvardims:', newvardims, 'newvarshape:', newvarshape, 'varv:', varv.shape 28849 print 'Lluis shapes sint:', sint.shape 28812 28850 28813 28851 # newvarslice = [] … … 28832 28870 #print allslices 28833 28871 28872 vout = None 28873 voutt = None 28874 varvt = None 28834 28875 varvt = varv.transpose() 28835 28876 print 'vs:', varvt[7, 69, :] 28836 28877 if len(vshape) == 3 and len(sN.shape) == 4: 28837 voutt = fsci.module_scientific.multi_spacew ightstats_in3drk3_slc3v4(\28878 voutt = fsci.module_scientific.multi_spaceweightstats_in3drk3_slc3v4( \ 28838 28879 varin=varvt, ngridsin=sNt, gridsin=sint, percentages=spt, \ 28839 28880 di1=vshape[2], di2=vshape[1], di3=vshape[0], ds1=ssh[3], \ … … 28841 28882 vout = voutt.transpose() 28842 28883 elif len(vshape) == 3 and len(sN.shape) == 3: 28843 voutt = fsci.module_scientific.multi_spacew ightstats_in3drk3_slc3v3(\28884 voutt = fsci.module_scientific.multi_spaceweightstats_in3drk3_slc3v3( \ 28844 28885 varin=varvt, ngridsin=sNt, gridsin=sint, percentages=spt, \ 28845 28886 di1=vshape[2], di2=vshape[1], di3=vshape[0], ds1=ssh[2], \ … … 28855 28896 quit(-1) 28856 28897 28898 print "Lluis Let's check !!", vout.shape 28899 print 'i j k it:', i, j, k ,it, 'N:', sN[i,j,k], '<>', slicesvals 28900 for iv in range(sN[i,j,k]): 28901 print iv, 'c:', sin[:,iv,i,j,k], 'p:', sgpa[iv,i,j,k], 'v:', \ 28902 varv[it,sin[0,iv,i,j,k],sin[1,iv,i,j,k]] 28903 print 'min max mean mean2 std median count _______' 28904 print vout[:,it,i,j,k] 28905 28857 28906 ist = 0 28858 28907 for statn in statns:
Note: See TracChangeset
for help on using the changeset viewer.