1 |
guez |
166 |
SUBROUTINE filew(q, qtmp, imr, jnp, j1, j2, ipx, tiny) |
2 |
|
|
DIMENSION q(imr, *), qtmp(jnp, imr) |
3 |
|
|
|
4 |
|
|
ipx = 0 |
5 |
|
|
! Copy & swap direction for vectorization. |
6 |
|
|
DO i = 1, imr |
7 |
|
|
DO j = j1, j2 |
8 |
|
|
qtmp(j, i) = q(i, j) |
9 |
|
|
END DO |
10 |
|
|
END DO |
11 |
|
|
|
12 |
|
|
DO i = 2, imr - 1 |
13 |
|
|
DO j = j1, j2 |
14 |
|
|
IF (qtmp(j,i)<0.) THEN |
15 |
|
|
ipx = 1 |
16 |
|
|
! west |
17 |
|
|
d0 = max(0., qtmp(j,i-1)) |
18 |
|
|
d1 = min(-qtmp(j,i), d0) |
19 |
|
|
qtmp(j, i-1) = qtmp(j, i-1) - d1 |
20 |
|
|
qtmp(j, i) = qtmp(j, i) + d1 |
21 |
|
|
! east |
22 |
|
|
d0 = max(0., qtmp(j,i+1)) |
23 |
|
|
d2 = min(-qtmp(j,i), d0) |
24 |
|
|
qtmp(j, i+1) = qtmp(j, i+1) - d2 |
25 |
|
|
qtmp(j, i) = qtmp(j, i) + d2 + tiny |
26 |
|
|
END IF |
27 |
|
|
END DO |
28 |
|
|
END DO |
29 |
|
|
|
30 |
|
|
i = 1 |
31 |
|
|
DO j = j1, j2 |
32 |
|
|
IF (qtmp(j,i)<0.) THEN |
33 |
|
|
ipx = 1 |
34 |
|
|
! west |
35 |
|
|
d0 = max(0., qtmp(j,imr)) |
36 |
|
|
d1 = min(-qtmp(j,i), d0) |
37 |
|
|
qtmp(j, imr) = qtmp(j, imr) - d1 |
38 |
|
|
qtmp(j, i) = qtmp(j, i) + d1 |
39 |
|
|
! east |
40 |
|
|
d0 = max(0., qtmp(j,i+1)) |
41 |
|
|
d2 = min(-qtmp(j,i), d0) |
42 |
|
|
qtmp(j, i+1) = qtmp(j, i+1) - d2 |
43 |
|
|
|
44 |
|
|
qtmp(j, i) = qtmp(j, i) + d2 + tiny |
45 |
|
|
END IF |
46 |
|
|
END DO |
47 |
|
|
i = imr |
48 |
|
|
DO j = j1, j2 |
49 |
|
|
IF (qtmp(j,i)<0.) THEN |
50 |
|
|
ipx = 1 |
51 |
|
|
! west |
52 |
|
|
d0 = max(0., qtmp(j,i-1)) |
53 |
|
|
d1 = min(-qtmp(j,i), d0) |
54 |
|
|
qtmp(j, i-1) = qtmp(j, i-1) - d1 |
55 |
|
|
qtmp(j, i) = qtmp(j, i) + d1 |
56 |
|
|
! east |
57 |
|
|
d0 = max(0., qtmp(j,1)) |
58 |
|
|
d2 = min(-qtmp(j,i), d0) |
59 |
|
|
qtmp(j, 1) = qtmp(j, 1) - d2 |
60 |
|
|
|
61 |
|
|
qtmp(j, i) = qtmp(j, i) + d2 + tiny |
62 |
|
|
END IF |
63 |
|
|
END DO |
64 |
|
|
|
65 |
|
|
IF (ipx/=0) THEN |
66 |
|
|
DO j = j1, j2 |
67 |
|
|
DO i = 1, imr |
68 |
|
|
q(i, j) = qtmp(j, i) |
69 |
|
|
END DO |
70 |
|
|
END DO |
71 |
|
|
ELSE |
72 |
|
|
|
73 |
|
|
! Poles. |
74 |
|
|
IF (q(1,1)<0 .OR. q(1,jnp)<0.) ipx = 1 |
75 |
|
|
END IF |
76 |
|
|
RETURN |
77 |
|
|
END SUBROUTINE filew |