Skip to content

Commit 7f4e86f

Browse files
committed
further refactoring...
1 parent 43357f0 commit 7f4e86f

File tree

1 file changed

+28
-47
lines changed

1 file changed

+28
-47
lines changed

GEOS_Shared/surfacelayer.F90

Lines changed: 28 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)