/[MITgcm]/MITgcm_contrib/dgoldberg/streamice/streamice_tridiag_solve.F
ViewVC logotype

Diff of /MITgcm_contrib/dgoldberg/streamice/streamice_tridiag_solve.F

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

revision 1.2 by dgoldberg, Fri May 31 17:33:03 2013 UTC revision 1.3 by dgoldberg, Wed Aug 27 19:29:14 2014 UTC
# Line 1  Line 1 
1    C $Header$
2    C $Name$
3    
4  #include "STREAMICE_OPTIONS.h"  #include "STREAMICE_OPTIONS.h"
5    
6  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7    
8  CBOP  CBOP
9    
10        SUBROUTINE STREAMICE_TRIDIAG_SOLVE(        SUBROUTINE STREAMICE_TRIDIAG_SOLVE(
11       U                               cg_Uin,     ! x-velocities       U                               cg_Uin,     ! x-velocities
12       U                               cg_Vin,     ! x-velocities       U                               cg_Vin,     ! x-velocities
13       U                               cg_Bu,      ! force in x dir       U                               cg_Bu,      ! force in x dir
# Line 12  CBOP Line 15  CBOP
15       I                               umask,       I                               umask,
16       I                               myThid )       I                               myThid )
17  C     /============================================================\  C     /============================================================\
18  C     | SUBROUTINE                                                 |    C     | SUBROUTINE                                                 |
19  C     | o                                                          |  C     | o                                                          |
20  C     |============================================================|  C     |============================================================|
21  C     |                                                            |  C     |                                                            |
# Line 40  C     \================================= Line 43  C     \=================================
43        _RL bet(1:Nx)        _RL bet(1:Nx)
44        _RL tmpvar        _RL tmpvar
45        INTEGER errCode        INTEGER errCode
46    
47    
48  !      CALL WRITE_FLD_XY_RL ("taud_tri","",cg_Bu,0,mythid)  !      CALL WRITE_FLD_XY_RL ("taud_tri","",cg_Bu,0,mythid)
49  !      CALL WRITE_FLD_XY_RL ("A_m1m1","",A_uu(:,:,:,:,-1,-1),0,mythid)  !      CALL WRITE_FLD_XY_RL ("A_m1m1","",A_uu(:,:,:,:,-1,-1),0,mythid)
# Line 54  C     \================================= Line 57  C     \=================================
57  !      CALL WRITE_FLD_XY_RL ("A_p1p1","",A_uu(:,:,:,:,1,1),0,mythid)  !      CALL WRITE_FLD_XY_RL ("A_p1p1","",A_uu(:,:,:,:,1,1),0,mythid)
58    
59    
60          
61        IF (nPx.gt.1 .or. nSx.gt.1) THEN        IF (nPx.gt.1 .or. nSx.gt.1) THEN
62         STOP 'must be serial for tridiag solve'         STOP 'must be serial for tridiag solve'
63        ENDIF        ENDIF
# Line 83  C     \================================= Line 86  C     \=================================
86          exit          exit
87         endif         endif
88        enddo        enddo
89          
90        IF(imax.eq.0) THEN        IF(imax.eq.0) THEN
91         imax=Nx         imax=Nx
92        ENDIF        ENDIF
   
93    
94        IF ( bMat(imin).NE.0. _d 0 ) THEN  
95          IF ( bMat(imin).NE.0. _d 0 ) THEN
96         bet(imin) = 1. _d 0 / bMat(imin)         bet(imin) = 1. _d 0 / bMat(imin)
97        ELSE        ELSE
98         bet(imin) = 0. _d 0         bet(imin) = 0. _d 0
99         errCode = 1         errCode = 1
100        ENDIF        ENDIF
101          
102        DO i=imin+1,imax        DO i=imin+1,imax
103         tmpvar = bmat(i) - amat(i)*cmat(i-1)*bet(i-1)         tmpvar = bmat(i) - amat(i)*cmat(i-1)*bet(i-1)
104         IF ( tmpvar .NE. 0. _d 0 ) THEN         IF ( tmpvar .NE. 0. _d 0 ) THEN
# Line 110  C     \================================= Line 113  C     \=================================
113        ymat(imin) = ymat(imin)*bet(imin)        ymat(imin) = ymat(imin)*bet(imin)
114    
115        DO i=imin+1,imax        DO i=imin+1,imax
116         ymat(i) = ( ymat(i)         ymat(i) = ( ymat(i)
117       &            - amat(i)*ymat(i-1)       &            - amat(i)*ymat(i-1)
118       &            )*bet(i)       &            )*bet(i)
119        ENDDO        ENDDO
120    
121    

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

  ViewVC Help
Powered by ViewVC 1.1.22