1 |
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 |