Changeset 1180 in lmdz_wrf for trunk/tools
- Timestamp:
- Oct 12, 2016, 1:08:30 AM (9 years ago)
- Location:
- trunk/tools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/module_ForInterpolate.F90
r1178 r1180 739 739 REAL(r_k) :: mindiffLl, dist 740 740 REAL(r_k), DIMENSION(idimx,idimy) :: difflonlat 741 REAL(r_k), DIMENSION(idimx-1,idimy) :: difflon 742 REAL(r_k), DIMENSION(idimx,idimy-1) :: difflat 741 743 REAL(r_k), DIMENSION(2) :: extremelon, extremelat, ipos 742 744 INTEGER, DIMENSION(2) :: iLl … … 760 762 extremelon = (/ MINVAL(projlon), MAXVAL(projlon) /) 761 763 extremelat = (/ MINVAL(projlat), MAXVAL(projlat) /) 762 764 763 765 ! Using case outside loop to be more efficient 764 766 SELECT CASE(TRIM(intkind)) … … 815 817 mindiffLl = MINVAL(difflonlat) 816 818 ipos = index2DArrayR(difflonlat, idimx, idimy, mindiffLl) 817 outLlw(1:2,1,i,j) = ipos 819 outLlw(1,1,i,j) = REAL(ipos(1)) 820 outLlw(2,1,i,j) = REAL(ipos(2)) 818 821 outLlw(3,1,i,j) = 1. 819 ix = outLlw(1,1,i,j) 820 iy = outLlw(2,1,i,j) 821 PRINT *,i,j,projlon(i,j),projlat(i,j),':',mindiffLl,'!',outLlw(1:2,1,i,j),'|',inlonv(ix,iy), & 822 inlatv(ix,iy), '<>', MINVAL(inlonv), MINVAL(inlatv) 823 IF (i > 1) THEN 824 PRINT *,inlonv(1,1),inlatv(1,1),':',index2DArrayR(inlonv, idimx, idimy, MINVAL(inlonv)) 825 STOP 826 END IF 822 ix = INT(outLlw(1,1,i,j)) 823 iy = INT(outLlw(2,1,i,j)) 827 824 END DO 828 825 END DO … … 876 873 CASE('dis') 877 874 DO i=1, pdimx 878 DO j=1, pdim x875 DO j=1, pdimy 879 876 varout(i,j) = 0. 880 877 DO iv=1, 4 … … 888 885 CASE('npp') 889 886 DO i=1, pdimx 890 DO j=1, pdim x887 DO j=1, pdimy 891 888 ix = INT(outLlw(1,1,i,j)) 892 889 iy = INT(outLlw(2,1,i,j)) … … 943 940 CASE('dis') 944 941 DO i=1, pdimx 945 DO j=1, pdim x942 DO j=1, pdimy 946 943 DO k=1, d3 947 944 varout(i,j,k) = 0. … … 957 954 CASE('npp') 958 955 DO i=1, pdimx 959 DO j=1, pdimx 956 DO j=1, pdimy 957 ix = INT(outLlw(1,1,i,j)) 958 iy = INT(outLlw(2,1,i,j)) 960 959 DO k=1, d3 961 ix = INT(outLlw(1,1,i,j))962 iy = INT(outLlw(2,1,i,j))963 960 varout(i,j,k) = var3Din(ix,iy,k) 964 961 END DO … … 982 979 REAL(r_k), DIMENSION(idimx,idimy), INTENT(in) :: inlonv, inlatv 983 980 CHARACTER(LEN=50), INTENT(in) :: intkind 984 REAL(r_k), DIMENSION( pdimx,pdimy,d3,d4), INTENT(in) :: var4Din981 REAL(r_k), DIMENSION(idimx,idimy,d3,d4), INTENT(in) :: var4Din 985 982 REAL(r_k), DIMENSION(pdimx,pdimy,d3,d4), INTENT(out) :: varout 986 983 … … 1014 1011 CASE('dis') 1015 1012 DO i=1, pdimx 1016 DO j=1, pdim x1013 DO j=1, pdimy 1017 1014 DO k=1, d3 1018 1015 DO l=1, d4 … … 1030 1027 CASE('npp') 1031 1028 DO i=1, pdimx 1032 DO j=1, pdim x1029 DO j=1, pdimy 1033 1030 ix = INT(outLlw(1,1,i,j)) 1034 1031 iy = INT(outLlw(2,1,i,j)) … … 1090 1087 CASE('dis') 1091 1088 DO i=1, pdimx 1092 DO j=1, pdim x1089 DO j=1, pdimy 1093 1090 DO k=1, d3 1094 1091 DO l=1, d4 … … 1108 1105 CASE('npp') 1109 1106 DO i=1, pdimx 1110 DO j=1, pdim x1107 DO j=1, pdimy 1111 1108 ix = INT(outLlw(1,1,i,j)) 1112 1109 iy = INT(outLlw(2,1,i,j)) -
trunk/tools/nc_var_tools.py
r1178 r1180 15860 15860 olatvals0 = oprojlat[:] 15861 15861 15862 # ilonvals0 = np.arange(0.,360.,360./oinlon.shape[0]) 15863 # ilatvals0 = np.arange(-90.,90.,180./oinlat.shape[0]) 15864 # olonvals0 = np.arange(0.5,359.5,359./oprojlon.shape[0]) 15865 # olatvals0 = np.arange(-89.5,89.5,179./oprojlat.shape[0]) 15866 15862 15867 # Getting 2D longitudes and latitudes 15863 15868 ilonvals, ilatvals = gen.lonlat2D(ilonvals0, ilatvals0) … … 15905 15910 rminlon = np.min(rlonvals) 15906 15911 rmaxlon = np.max(rlonvals) 15912 iminlat = np.min(ilatvals) 15913 imaxlat = np.max(ilatvals) 15914 rminlat = np.min(rlatvals) 15915 rmaxlat = np.max(rlatvals) 15907 15916 15908 15917 if np.abs(imaxlon - rmaxlon) > 100.: … … 15913 15922 print ' shifting input longitudes...' 15914 15923 if rmaxlon > 180.: 15915 ilonvals = np.where(ilonvals < 0., ilonvals + 360., ilonvals)15924 ilonvals = np.where(ilonvals < 0., 360. + ilonvals, ilonvals) 15916 15925 else: 15917 15926 ilonvals = np.where(ilonvals > 180., ilonvals - 360., ilonvals) 15927 15928 flipy = False 15929 if np.abs(ilatvals[0,0] - rlatvals[0,0]) > 90.: 15930 print warnmsg 15931 print ' ' + fname + ': reshaping latitudes!' 15932 print ' input minimum lat:', ilatvals[0,0] 15933 print ' target minimum lat:', rlatvals[0,0] 15934 print ' flip input latitudes...' 15935 ilatvals = ilatvals[::-1,:] 15936 flipy = True 15918 15937 15919 15938 idx = ilonvals.shape[1] … … 15973 15992 print ' ' + fname + ": re-projecting '" + varn + "' ..." 15974 15993 ovarin = inf.variables[varn] 15975 varin = ovarin[:] 15994 if flipy: 15995 varin = ovarin[...,::-1,:] 15996 else: 15997 varin = ovarin[:] 15976 15998 15977 15999 Nvarind = len(varin.shape) … … 15986 16008 15987 16009 if Nvarind == 2: 15988 varout = fin.module_forinterpolate.var2d_intproj(var2din=varint,\16010 varoutt = fin.module_forinterpolate.var2d_intproj(var2din=varint, \ 15989 16011 inlonv=ilont, inlatv=ilatt, projlon=rlont, projlat=rlatt, intkind=kind,\ 15990 16012 idimx=idx, idimy=idy, pdimx=rdx, pdimy=rdy) 15991 16013 elif Nvarind == 3: 15992 varout = fin.module_forinterpolate.var3d_intproj(var3din=varint,\16014 varoutt = fin.module_forinterpolate.var3d_intproj(var3din=varint, \ 15993 16015 inlonv=ilont, inlatv=ilatt, projlon=rlont, projlat=rlatt, intkind=kind,\ 15994 16016 idimx=idx, idimy=idy, pdimx=rdx, pdimy=rdy, d3=varin.shape[0]) 15995 16017 elif Nvarind == 4: 15996 varout = fin.module_forinterpolate.var4d_intproj(var4din=varint,\16018 varoutt = fin.module_forinterpolate.var4d_intproj(var4din=varint, \ 15997 16019 inlonv=ilont, inlatv=ilatt, projlon=rlont, projlat=rlatt, intkind=kind,\ 15998 16020 idimx=idx, idimy=idy, pdimx=rdx, pdimy=rdy, d3=varin.shape[0], \ 15999 16021 d4=varin.shape[1]) 16000 16022 elif Nvarind == 5: 16001 varout = fin.module_forinterpolate.var5d_intproj(var5din=varint,\16023 varoutt = fin.module_forinterpolate.var5d_intproj(var5din=varint, \ 16002 16024 inlonv=ilont, inlatv=ilatt, projlon=rlont, projlat=rlatt, intkind=kind,\ 16003 16025 idimx=idx, idimy=idy, pdimx=rdx, pdimy=rdy, d3=varin.shape[0], \ … … 16007 16029 print ' ' + fname + ': rank:', Nvarind, 'for input data not ready !!' 16008 16030 quit(-1) 16009 16031 16032 # Recovering 'python' C-like space 16033 varout = varoutt.transpose() 16034 16010 16035 # Variable's dimensions and their related variables 16011 16036 vdims = list(ovarin.dimensions)
Note: See TracChangeset
for help on using the changeset viewer.