Changeset 1185 in lmdz_wrf
- Timestamp:
- Oct 14, 2016, 4:07:59 PM (9 years ago)
- Location:
- trunk/tools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/module_ForInterpolate.F90
r1184 r1185 867 867 END SUBROUTINE LlInterpolateProjection 868 868 869 SUBROUTINE var2D_IntProj(var2Din, inlonv, inlatv, projlon, projlat, intkind, varout, idimx, idimy,&870 pdimx, pdimy)869 SUBROUTINE var2D_IntProj(var2Din, inlonv, inlatv, projlon, projlat, intkind, mask, varout, idimx, & 870 idimy, pdimx, pdimy) 871 871 ! Subroutine to interpolate a 2D variable 872 872 … … 875 875 IMPLICIT NONE 876 876 877 ! INTEGER, PARAMETER :: r_k = KIND(1.d0)878 877 INTEGER, INTENT(in) :: idimx, idimy, pdimx, pdimy 879 878 REAL(r_k), DIMENSION(pdimx,pdimy), INTENT(in) :: projlon, projlat 880 879 REAL(r_k), DIMENSION(idimx,idimy), INTENT(in) :: inlonv, inlatv 881 880 CHARACTER(LEN=50), INTENT(in) :: intkind 882 REAL(r_k), DIMENSION(pdimx,pdimy), INTENT(in) :: var2Din 881 REAL(r_k), DIMENSION(idimx,idimy), INTENT(in) :: var2Din 882 INTEGER, DIMENSION(idimx,idimy), INTENT(in) :: mask 883 883 REAL(r_k), DIMENSION(pdimx,pdimy), INTENT(out) :: varout 884 884 885 885 ! Local 886 INTEGER :: i, j, iv, ix, iy886 INTEGER :: i, j, k, iv, ix, iy 887 887 REAL(r_k) :: w 888 888 REAL(r_k), DIMENSION(3,16,pdimx,pdimy) :: outLlw … … 903 903 ! 3rd: weight for i-index, j-index to use for ponderation (0<1.) 904 904 ! var2Din: 2D variable to interpolate 905 ! mask: mask of the intpu values (1: good, 0: none) 905 906 ! varout: variable interpolated on the target projection 906 907 fname = 'var2D_IntProj' … … 913 914 DO i=1, pdimx 914 915 DO j=1, pdimy 915 varout(i,j) = 0. 916 DO iv=1, 4 917 ix = INT(outLlw(1,iv,i,j)) 918 iy = INT(outLlw(2,iv,i,j)) 919 w = outLlw(3,iv,i,j) 920 varout(i,j) = varout(i,j) + w*var2Din(ix,iy) 921 END DO 916 IF (outLlw(3,1,i,j) == -1.) THEN 917 varout(i,j) = fillVal64 918 ELSE 919 varout(i,j) = 0. 920 DO iv=1, 4 921 ix = INT(outLlw(1,iv,i,j)) 922 iy = INT(outLlw(2,iv,i,j)) 923 IF (mask(ix,iy) == 1) THEN 924 w = outLlw(3,iv,i,j) 925 varout(i,j) = varout(i,j) + w*var2Din(ix,iy) 926 END IF 927 END DO 928 END IF 922 929 END DO 923 930 END DO … … 927 934 ix = INT(outLlw(1,1,i,j)) 928 935 iy = INT(outLlw(2,1,i,j)) 929 varout(i,j) = var2Din(ix,iy) 936 IF ( (outLlw(3,1,i,j) == -1.) .OR. (mask(ix,iy) == 0) ) THEN 937 varout(i,j) = fillVal64 938 ELSE 939 varout(i,j) = var2Din(ix,iy)*outLlw(3,1,i,j) 940 END IF 930 941 END DO 931 942 END DO … … 933 944 934 945 END SUBROUTINE var2D_IntProj 946 935 947 936 948 SUBROUTINE var3D_IntProj(var3Din, inlonv, inlatv, projlon, projlat, intkind, mask, varout, idimx, & … … 994 1006 varout(i,j,k) = varout(i,j,k) + w*var3Din(ix,iy,k) 995 1007 END IF 996 ! IF (MOD(i+j+k,150) == 0) PRINT *,iv,':',ix,iy,w,'<>',var3Din(ix,iy,k),'-->',varout(i,j,k)997 1008 END DO 998 ! IF (MOD(i+j+k,150) == 0) PRINT *,'vout:',varout(i,j,k)999 1009 END DO 1000 1010 END IF … … 1019 1029 END SUBROUTINE var3D_IntProj 1020 1030 1021 SUBROUTINE var4D_IntProj(var4Din, inlonv, inlatv, projlon, projlat, intkind, varout, idimx, idimy,&1022 pdimx, pdimy, d3, d4)1031 SUBROUTINE var4D_IntProj(var4Din, inlonv, inlatv, projlon, projlat, intkind, mask, varout, idimx, & 1032 idimy, pdimx, pdimy, d3, d4) 1023 1033 ! Subroutine to interpolate a 4D variable 1024 1034 … … 1033 1043 CHARACTER(LEN=50), INTENT(in) :: intkind 1034 1044 REAL(r_k), DIMENSION(idimx,idimy,d3,d4), INTENT(in) :: var4Din 1045 INTEGER, DIMENSION(idimx,idimy,d3,d4), INTENT(in) :: mask 1035 1046 REAL(r_k), DIMENSION(pdimx,pdimy,d3,d4), INTENT(out) :: varout 1036 1047 … … 1055 1066 ! 3rd: weight for i-index, j-index to use for ponderation (0<1.) 1056 1067 ! var4Din: 4D variable to interpolate 1068 ! mask: mask of the intpu values (1: good, 0: none) 1057 1069 ! varout: variable interpolated on the target projection 1058 1070 fname = 'var4D_IntProj' … … 1065 1077 DO i=1, pdimx 1066 1078 DO j=1, pdimy 1067 DO k=1, d3 1068 DO l=1, d4 1069 varout(i,j,k,l) = 0. 1070 DO iv=1, 4 1071 ix = INT(outLlw(1,iv,i,j)) 1072 iy = INT(outLlw(2,iv,i,j)) 1073 w = outLlw(3,iv,i,j) 1074 varout(i,j,k,l) = varout(i,j,k,l) + w*var4Din(ix,iy,k,l) 1079 IF (ALL(outLlw(3,:,i,j) == -1.)) THEN 1080 varout(i,j,:,:) = fillVal64 1081 ELSE 1082 DO k=1, d3 1083 DO l=1, d4 1084 varout(i,j,k,l) = 0. 1085 DO iv=1, 4 1086 ix = INT(outLlw(1,iv,i,j)) 1087 iy = INT(outLlw(2,iv,i,j)) 1088 IF (mask(ix,iy,k,l) == 1) THEN 1089 w = outLlw(3,iv,i,j) 1090 varout(i,j,k,l) = varout(i,j,k,l) + w*var4Din(ix,iy,k,l) 1091 END IF 1092 END DO 1075 1093 END DO 1076 1094 END DO 1077 END DO1095 END IF 1078 1096 END DO 1079 1097 END DO … … 1083 1101 ix = INT(outLlw(1,1,i,j)) 1084 1102 iy = INT(outLlw(2,1,i,j)) 1085 DO k=1, d3 1086 DO l=1, d4 1087 varout(i,j,k,l) = var4Din(ix,iy,k,l) 1103 IF ( (outLlw(3,1,i,j) == -1.) .OR. (mask(ix,iy,1,1) == 0) ) THEN 1104 varout(i,j,:,:) = fillVal64 1105 ELSE 1106 DO k=1, d3 1107 DO l=1, d4 1108 varout(i,j,k,l) = var4Din(ix,iy,k,l)*outLlw(3,1,i,j) 1109 END DO 1088 1110 END DO 1089 END DO1111 END IF 1090 1112 END DO 1091 1113 END DO … … 1094 1116 END SUBROUTINE var4D_IntProj 1095 1117 1096 1097 SUBROUTINE var5D_IntProj(var5Din, inlonv, inlatv, projlon, projlat, intkind, varout, idimx, idimy, & 1098 pdimx, pdimy, d3, d4, d5) 1118 SUBROUTINE var5D_IntProj(var5Din, inlonv, inlatv, projlon, projlat, intkind, mask, varout, idimx, & 1119 idimy, pdimx, pdimy, d3, d4, d5) 1099 1120 ! Subroutine to interpolate a 5D variable 1100 1121 … … 1108 1129 REAL(r_k), DIMENSION(idimx,idimy), INTENT(in) :: inlonv, inlatv 1109 1130 CHARACTER(LEN=50), INTENT(in) :: intkind 1110 REAL(r_k), DIMENSION(pdimx,pdimy,d3,d4,d5), INTENT(in) :: var5Din 1111 REAL(r_k), DIMENSION(pdimx,pdimy,d3,d4,d5), INTENT(out):: varout 1131 REAL(r_k), DIMENSION(idimx,idimy,d3,d4,d5), INTENT(in) :: var5Din 1132 INTEGER, DIMENSION(idimx,idimy,d3,d4,d5), INTENT(in) :: mask 1133 REAL(r_k), DIMENSION(pdimx,pdimy,d3,d4,d5), INTENT(out) :: varout 1112 1134 1113 1135 ! Local … … 1131 1153 ! 3rd: weight for i-index, j-index to use for ponderation (0<1.) 1132 1154 ! var5Din: 5D variable to interpolate 1155 ! mask: mask of the intpu values (1: good, 0: none) 1133 1156 ! varout: variable interpolated on the target projection 1134 1157 fname = 'var5D_IntProj' … … 1141 1164 DO i=1, pdimx 1142 1165 DO j=1, pdimy 1143 DO k=1, d3 1144 DO l=1, d4 1145 DO m=1, d5 1146 varout(i,j,k,l,m) = 0. 1147 DO iv=1, 4 1148 ix = INT(outLlw(1,iv,i,j)) 1149 iy = INT(outLlw(2,iv,i,j)) 1150 w = outLlw(3,iv,i,j) 1151 varout(i,j,k,l,m) = varout(i,j,k,l,m) + w*var5Din(ix,iy,k,l,m) 1166 IF (ALL(outLlw(3,:,i,j) == -1.)) THEN 1167 varout(i,j,:,:,:) = fillVal64 1168 ELSE 1169 DO k=1, d3 1170 DO l=1, d4 1171 DO m=1, d5 1172 varout(i,j,k,l,m) = 0. 1173 DO iv=1, 4 1174 ix = INT(outLlw(1,iv,i,j)) 1175 iy = INT(outLlw(2,iv,i,j)) 1176 IF (mask(ix,iy,k,l,m) == 1) THEN 1177 w = outLlw(3,iv,i,j) 1178 varout(i,j,k,l,m) = varout(i,j,k,l,m) + w*var5Din(ix,iy,k,l,m) 1179 END IF 1180 END DO 1152 1181 END DO 1153 1182 END DO 1154 1183 END DO 1155 END DO1184 END IF 1156 1185 END DO 1157 1186 END DO … … 1161 1190 ix = INT(outLlw(1,1,i,j)) 1162 1191 iy = INT(outLlw(2,1,i,j)) 1163 DO k=1, d3 1164 DO l=1, d4 1165 DO m=1, d5 1166 varout(i,j,k,l,m) = var5Din(ix,iy,k,l,m) 1192 IF ( (outLlw(3,1,i,j) == -1.) .OR. (mask(ix,iy,1,1,1) == 0) ) THEN 1193 varout(i,j,:,:,:) = fillVal64 1194 ELSE 1195 DO k=1, d3 1196 DO l=1, d4 1197 DO m=1, d5 1198 varout(i,j,k,l,m) = var5Din(ix,iy,k,l,m)*outLlw(3,1,i,j) 1199 END DO 1167 1200 END DO 1168 1201 END DO 1169 END DO1202 END IF 1170 1203 END DO 1171 1204 END DO -
trunk/tools/nc_var_tools.py
r1184 r1185 16309 16309 varoutt = fin.module_forinterpolate.var2d_intproj(var2din=varint, \ 16310 16310 inlonv=ilont, inlatv=ilatt, projlon=rlont, projlat=rlatt, intkind=kind,\ 16311 idimx=idx, idimy=idy, pdimx=rdx, pdimy=rdy)16311 mask=inmaskt, idimx=idx, idimy=idy, pdimx=rdx, pdimy=rdy) 16312 16312 elif Nvarind == 3: 16313 16313 varoutt = fin.module_forinterpolate.var3d_intproj(var3din=varint, \ … … 16318 16318 varoutt = fin.module_forinterpolate.var4d_intproj(var4din=varint, \ 16319 16319 inlonv=ilont, inlatv=ilatt, projlon=rlont, projlat=rlatt, intkind=kind,\ 16320 idimx=idx, idimy=idy, pdimx=rdx, pdimy=rdy, d3=varin.shape[0],\16321 d 4=varin.shape[1])16320 mask=inmaskt, idimx=idx, idimy=idy, pdimx=rdx, pdimy=rdy, \ 16321 d3=varin.shape[1], d4=varin.shape[0]) 16322 16322 elif Nvarind == 5: 16323 16323 varoutt = fin.module_forinterpolate.var5d_intproj(var5din=varint, \ 16324 16324 inlonv=ilont, inlatv=ilatt, projlon=rlont, projlat=rlatt, intkind=kind,\ 16325 idimx=idx, idimy=idy, pdimx=rdx, pdimy=rdy, d3=varin.shape[0],\16326 d 4=varin.shape[1], d5=varin.shape[2])16325 mask=inmaskt, idimx=idx, idimy=idy, pdimx=rdx, pdimy=rdy, \ 16326 d3=varin.shape[2], d4=varin.shape[1], d5=varin.shape[0]) 16327 16327 else: 16328 16328 print errormsg
Note: See TracChangeset
for help on using the changeset viewer.