@@ -1194,17 +1194,19 @@ SUBROUTINE LINADJ ( VRIB1,VRIB2,VWS1,VWS2,VZ1,VUSTAR,IWATER, &
11941194 integer VINT1(irun),VINT2(irun)
11951195 real vk,b2uhs(irun)
11961196 integer i
1197+ integer , allocatable :: w_indxs(:) ! indexes for iwater ==1
11971198!
11981199 _UNUSED_DUMMY(VWS2)
11991200 _UNUSED_DUMMY(vk)
12001201
12011202 B2UHS = BMDL * BMDL * USTH0S
12021203
1204+ w_indxs = pack ([(i, i= 1 , size (IWATER))], IWATER.EQ. 1 )
12031205! COMPUTE X0/PSIM, 1/Z0, G, G0, 1/(1-G0),
12041206! DEL LOG Z0, D LOG ZO / D USTAR
12051207!
1206- IF ( ( ITYPE.EQ. 1 ) .AND. LWATER ) THEN
1207- where (IWATER .EQ. 1 ) VX0PSIM = VAPSIM
1208+ IF ( ITYPE.EQ. 1 ) THEN
1209+ VX0PSIM(w_indxs) = VAPSIM(w_indxs)
12081210 ENDIF
12091211 IF ( ITYPE .GE. 3 ) THEN
12101212 VX0PSIM = VX0 * VAPSIM
@@ -1221,14 +1223,12 @@ SUBROUTINE LINADJ ( VRIB1,VRIB2,VWS1,VWS2,VZ1,VUSTAR,IWATER, &
12211223
12221224 VDZSEA = min ( VDZSEA, 0.2 * VZ1/ VAPSIM ) ! To prevent Divide by Zero as VG0 => 1.0
12231225!
1224- where ( IWATER.EQ. 1 )
1225- VAZ0 = 1 . / VZ1
1226- VG = VDZSEA * VAZ0
1227- VG0 = VX0PSIM * VG
1228- VR1MG0 = 1 . / ( 1 . - VG0 )
1229- VDZ0 = ( VZ2 - VZ1 ) * VR1MG0
1230- ENDwhere
1231- IF (ITYPE.GE. 3 ) where ( IWATER.EQ. 1 ) VDZ0 = VDZ0 * VAZ0
1226+ VAZ0(w_indxs) = 1 . / VZ1(w_indxs)
1227+ VG(w_indxs) = VDZSEA(w_indxs) * VAZ0(w_indxs)
1228+ VG0(w_indxs) = VX0PSIM(w_indxs) * VG(w_indxs)
1229+ VR1MG0(w_indxs) = 1 . / ( 1 . - VG0(w_indxs) )
1230+ VDZ0(w_indxs) = ( VZ2(w_indxs) - VZ1(w_indxs) ) * VR1MG0(w_indxs)
1231+ IF (ITYPE.GE. 3 ) VDZ0(w_indxs) = VDZ0(w_indxs) * VAZ0(w_indxs)
12321232 ENDIF
12331233!
12341234! COMPUTE NUM1,NUM2,NUM3, DEN
@@ -1250,15 +1250,11 @@ SUBROUTINE LINADJ ( VRIB1,VRIB2,VWS1,VWS2,VZ1,VUSTAR,IWATER, &
12501250 VDY = VY - VY0
12511251 VXNUM3 = - VPSIGB2
12521252!
1253- IF ( LWATER ) THEN
1254- where (IWATER.EQ. 1 )
1255- VDXPSIM = VDXPSIM * VR1MG0
1256- VXNUM3 = VXNUM3 + VG * ( VY0 - VPSIGB2)
1257- VXNUM2 = VY0 - VPSIGB2 - VX0PSIM * VPSIGB2
1258- VXNUM2 = (VXNUM2 * VAPSIHG) - 2 . * VX0PSIM
1259- VXNUM2 = VXNUM2 * VDZ0
1260- endwhere
1261- ENDIF
1253+ VDXPSIM(w_indxs) = VDXPSIM(w_indxs) * VR1MG0(w_indxs)
1254+ VXNUM3(w_indxs) = VXNUM3(w_indxs) + VG(w_indxs) * ( VY0(w_indxs) - VPSIGB2(w_indxs))
1255+ VXNUM2(w_indxs) = VY0(w_indxs) - VPSIGB2(w_indxs) - VX0PSIM(w_indxs) * VPSIGB2(w_indxs)
1256+ VXNUM2(w_indxs) = (VXNUM2(w_indxs) * VAPSIHG(w_indxs)) - 2 . * VX0PSIM(w_indxs)
1257+ VXNUM2(w_indxs) = VXNUM2(w_indxs) * VDZ0(w_indxs)
12621258!
12631259 VDEN = VDY + VDXPSIM * VXNUM3
12641260 VDEN = ( 1 . + VDEN * VAPSIHG ) - 2 . * VDXPSIM
@@ -1268,12 +1264,8 @@ SUBROUTINE LINADJ ( VRIB1,VRIB2,VWS1,VWS2,VZ1,VUSTAR,IWATER, &
12681264 VAWS1 = VR1MG0 / VWS1
12691265 VXNUM3 = VXNUM3 * VAPSIHG
12701266!
1271- IF ( LWATER ) THEN
1272- where (IWATER.EQ. 1 )
1273- VXNUM3 = VXNUM3 - 2 . * VG0
1274- VXNUM3 = VAWS1 * VXNUM3
1275- endwhere
1276- ENDIF
1267+ VXNUM3(w_indxs) = VXNUM3(w_indxs) - 2 . * VG0(w_indxs)
1268+ VXNUM3(w_indxs) = VAWS1(w_indxs) * VXNUM3(w_indxs)
12771269 ENDIF
12781270!
12791271! COMPUTE D LOG ZETA
@@ -1284,9 +1276,7 @@ SUBROUTINE LINADJ ( VRIB1,VRIB2,VWS1,VWS2,VZ1,VUSTAR,IWATER, &
12841276 VXNUM = VXNUM1 * VXNUM
12851277!
12861278 VDZETA1 = VXNUM
1287- IF (LWATER) then
1288- where (IWATER.EQ. 1 ) VXNUM = VXNUM + VXNUM2
1289- endif
1279+ VXNUM(w_indxs) = VXNUM(w_indxs) + VXNUM2(w_indxs)
12901280
12911281 VDEN = max (VDEN, 0.1 )
12921282!
@@ -1297,35 +1287,27 @@ SUBROUTINE LINADJ ( VRIB1,VRIB2,VWS1,VWS2,VZ1,VUSTAR,IWATER, &
12971287!
12981288! COMPUTE D LOG Z0
12991289!
1300- IF ( LWATER .AND. (ITYPE.GE. 3 ) )THEN
1301- where ( IWATER.EQ. 1 )
1302- VZCOEF2 = VG * VDXPSIM
1303- VDZ0 = VDZ0 - VZCOEF2 * VDZETA
1304- ENDwhere
1290+ IF ( ITYPE.GE. 3 )THEN
1291+ VZCOEF2(w_indxs) = VG(w_indxs) * VDXPSIM(w_indxs)
1292+ VDZ0(w_indxs) = VDZ0(w_indxs) - VZCOEF2(w_indxs) * VDZETA(w_indxs)
13051293 ENDIF
13061294!
1307- IF ( LWATER .AND. ( ITYPE.EQ. 5 ) ) THEN
1308- where (IWATER .EQ. 1 ) VZCOEF1 = VG * VAWS1
1295+ IF ( ITYPE.EQ. 5 ) THEN
1296+ VZCOEF1(w_indxs) = VG(w_indxs) * VAWS1(w_indxs)
13091297 ENDIF
13101298!
13111299! CALCULATE D PSIM AND D PSIH
13121300!
1313- IF ( (ITYPE.EQ. 1 ) .AND. LWATER ) THEN
1314- where (IWATER.EQ. 1 )
1315- VDPSIM = - VDZ0 * VAZ0
1316- VDPSIH = VDPSIM
1317- ENDwhere
1301+ IF ( ITYPE.EQ. 1 ) THEN
1302+ VDPSIM(w_indxs) = - VDZ0(w_indxs) * VAZ0(w_indxs)
1303+ VDPSIH(w_indxs) = VDPSIM(w_indxs)
13181304 ENDIF
13191305!
13201306 IF (ITYPE.GE. 3 ) THEN
13211307 VDPSIM = VDX * VDZETA
13221308 VDPSIH = VDY * VDZETA
1323- IF ( LWATER ) THEN
1324- where (IWATER.EQ. 1 )
1325- VDPSIM = VDPSIM - VX0 * VDZ0
1326- VDPSIH = VDPSIH - VY0 * VDZ0
1327- ENDwhere
1328- ENDIF
1309+ VDPSIM(w_indxs) = VDPSIM(w_indxs) - VX0(w_indxs) * VDZ0(w_indxs)
1310+ VDPSIH(w_indxs) = VDPSIH(w_indxs) - VY0(w_indxs) * VDZ0(w_indxs)
13291311 ENDIF
13301312!
13311313! PREVENT OVERCORRECTION OF PSIM OR PSIH FOR UNSTABLE CASE
@@ -1366,7 +1348,6 @@ SUBROUTINE LINADJ ( VRIB1,VRIB2,VWS1,VWS2,VZ1,VUSTAR,IWATER, &
13661348 where (IWATER.EQ. 1 ) VDZ0 = VDZ0 - VG * VDXPSIM * VDZETA1
13671349 endwhere
13681350 ENDIF
1369-
13701351!
13711352 end subroutine linadj
13721353! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0 commit comments