/[MITgcm]/MITgcm/model/src/solve_tridiagonal.F
ViewVC logotype

Contents of /MITgcm/model/src/solve_tridiagonal.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.2 - (show annotations) (download)
Sun Dec 5 17:29:36 2004 UTC (19 years, 6 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58l_post, checkpoint57t_post, checkpoint57o_post, checkpoint58e_post, mitgcm_mapl_00, checkpoint58u_post, checkpoint58w_post, checkpoint57m_post, checkpoint57s_post, checkpoint57k_post, checkpoint57d_post, checkpoint57g_post, checkpoint60, checkpoint61, checkpoint62, checkpoint57b_post, checkpoint57c_pre, checkpoint58r_post, checkpoint57i_post, checkpoint57y_post, checkpoint57e_post, checkpoint58n_post, checkpoint58x_post, checkpoint57g_pre, checkpoint58t_post, checkpoint58h_post, checkpoint57y_pre, checkpoint57f_pre, checkpoint57a_post, checkpoint58q_post, checkpoint57v_post, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint58j_post, checkpoint59e, checkpoint59d, checkpoint59g, checkpoint59f, checkpoint59a, checkpoint59c, checkpoint59b, checkpoint59m, checkpoint59l, checkpoint59o, checkpoint59n, checkpoint59i, checkpoint59h, checkpoint59k, checkpoint59j, checkpoint57r_post, checkpoint59, checkpoint58, checkpoint57a_pre, checkpoint57, eckpoint57e_pre, checkpoint57h_done, checkpoint58f_post, checkpoint57x_post, checkpoint57n_post, checkpoint58d_post, checkpoint58c_post, checkpoint57w_post, checkpoint57p_post, checkpint57u_post, checkpoint57f_post, checkpoint58a_post, checkpoint58i_post, checkpoint57q_post, checkpoint58g_post, checkpoint58o_post, checkpoint57z_post, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62i, checkpoint62h, checkpoint57c_post, checkpoint58y_post, checkpoint58k_post, checkpoint58v_post, checkpoint58s_post, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint58p_post, checkpoint61a, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q, checkpoint57j_post, checkpoint61z, checkpoint61x, checkpoint61y, checkpoint58b_post, checkpoint57h_pre, checkpoint58m_post, checkpoint57l_post, checkpoint57h_post
Changes since 1.1: +3 -3 lines
fix comments

1 C $Header: /u/gcmpack/MITgcm/model/src/solve_tridiagonal.F,v 1.1 2004/01/03 00:41:55 jmc Exp $
2 C $Name: $
3
4 #include "CPP_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: SOLVE_TRIDIAGONAL
8 C !INTERFACE:
9 SUBROUTINE SOLVE_TRIDIAGONAL(
10 I iMin,iMax, jMin,jMax,
11 I a3d, b3d, c3d,
12 U y3d,
13 O errCode,
14 I bi, bj, myThid )
15 C !DESCRIPTION: \bv
16 C *==========================================================*
17 C | S/R SOLVE_TRIDIAGONAL
18 C | o Solve a tri-diagonal system A*X=Y (dimension Nr)
19 C *==========================================================*
20 C | o Used to solve implicitly vertical advection & diffusion
21 C *==========================================================*
22 C \ev
23
24 C !USES:
25 IMPLICIT NONE
26 C == Global data ==
27 #include "SIZE.h"
28 #include "EEPARAMS.h"
29
30 C !INPUT/OUTPUT PARAMETERS:
31 C == Routine Arguments ==
32 C a3d :: matrix lower diagnonal
33 C b3d :: matrix main diagnonal
34 C c3d :: matrix upper diagnonal
35 C y3d :: Input = Y vector ; Output = X = solution of A*X=Y
36 C errCode :: > 0 if singular matrix
37 INTEGER iMin,iMax,jMin,jMax
38 _RL a3d(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
39 _RL b3d(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
40 _RL c3d(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
41 _RL y3d(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nSx,nSy)
42 INTEGER errCode
43 INTEGER bi, bj, myThid
44
45 C !LOCAL VARIABLES:
46 C == Local variables ==
47 INTEGER i,j,k
48 _RL bet(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
49 _RL tmpvar
50 CEOP
51
52 errCode = 0
53
54 C-- Beginning of forward sweep (top level)
55 DO j=jMin,jMax
56 DO i=iMin,iMax
57 IF ( b3d(i,j,1).NE.0. _d 0 ) THEN
58 bet(i,j,1) = 1. _d 0 / b3d(i,j,1)
59 ELSE
60 bet(i,j,1) = 0. _d 0
61 errCode = 1
62 ENDIF
63 ENDDO
64 ENDDO
65
66 C-- Middle of forward sweep
67 DO k=2,Nr
68 DO j=jMin,jMax
69 DO i=iMin,iMax
70 tmpvar = b3d(i,j,k) - a3d(i,j,k)*c3d(i,j,k-1)*bet(i,j,k-1)
71 IF ( tmpvar .NE. 0. _d 0 ) THEN
72 bet(i,j,k) = 1. _d 0 / tmpvar
73 ELSE
74 bet(i,j,k) = 0. _d 0
75 errCode = 1
76 ENDIF
77 ENDDO
78 ENDDO
79 ENDDO
80
81 DO j=jMin,jMax
82 DO i=iMin,iMax
83 y3d(i,j,1,bi,bj) = y3d(i,j,1,bi,bj)*bet(i,j,1)
84 ENDDO
85 ENDDO
86 DO k=2,Nr
87 DO j=jMin,jMax
88 DO i=iMin,iMax
89 y3d(i,j,k,bi,bj) = ( y3d(i,j,k,bi,bj)
90 & - a3d(i,j,k)*y3d(i,j,k-1,bi,bj)
91 & )*bet(i,j,k)
92 ENDDO
93 ENDDO
94 ENDDO
95
96 C-- Backward sweep
97 CADJ loop = sequential
98 DO k=Nr-1,1,-1
99 DO j=jMin,jMax
100 DO i=iMin,iMax
101 y3d(i,j,k,bi,bj) = y3d(i,j,k,bi,bj)
102 & - c3d(i,j,k)*bet(i,j,k)*y3d(i,j,k+1,bi,bj)
103 ENDDO
104 ENDDO
105 ENDDO
106
107 RETURN
108 END

  ViewVC Help
Powered by ViewVC 1.1.22