New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
zdf.matrixsolver.h90 in tags/nemo_v3_2/nemo_v3_2/NEMO/OPA_SRC/ZDF – NEMO

source: tags/nemo_v3_2/nemo_v3_2/NEMO/OPA_SRC/ZDF/zdf.matrixsolver.h90 @ 1878

Last change on this file since 1878 was 1878, checked in by flavoni, 14 years ago

initial test for nemogcm

File size: 2.0 KB
Line 
1!!
2!!         ZDF.MATRIXSOLVER
3!!       ********************
4!!
5!! Matrix inversion
6!!----------------------------------------------------------------------
7!   solve m.x = y  where m is a tri diagonal matrix ( jpk*jpk )
8!
9!        ( zwd1 zws1   0    0    0  )( zwx1 ) ( zwy1 )
10!        ( zwi2 zwd2 zws2   0    0  )( zwx2 ) ( zwy2 )
11!        (  0   zwi3 zwd3 zws3   0  )( zwx3 )=( zwy3 )
12!        (        ...               )( ...  ) ( ...  )
13!        (  0    0    0   zwik zwdk )( zwxk ) ( zwyk )
14!
15!   m is decomposed in the product of an upper and lower triangular
16!   matrix
17!   The 3 diagonal terms are in 2d arrays: zwd, zws, zwi
18!   The second member is in 2d array zwy
19!   The solution is in 2d array zwx
20!   The 2d arry zwt and zwz are work space arrays
21!
22!   N.B. the starting vertical index (ikst) is equal to 1 except for
23!   the resolution of tke matrix where surface tke value is prescribed
24!   so that ikstrt=2.
25!!----------------------------------------------------------------------
26!!  OPA 9.0 , LOCEAN-IPSL (2005)
27!! $Id: zdf.matrixsolver.h90 1152 2008-06-26 14:11:13Z rblod $
28!! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
29!!----------------------------------------------------------------------
30
31      ikstp1 = ikst + 1
32      ikenm2 = jpk - 2
33      DO ji = 2, jpim1
34         zwt(ji,ikst) = zwd(ji,ikst)
35      END DO
36      DO jk = ikstp1, jpkm1
37         DO ji = 2, jpim1
38            zwt(ji,jk) = zwd(ji,jk) - zwi(ji,jk) * zws(ji,jk-1) / zwt(ji,jk-1)
39         END DO
40      END DO
41      DO ji = 2, jpim1
42         zwz(ji,ikst) = zwy(ji,ikst)
43      END DO
44      DO jk = ikstp1, jpkm1
45         DO ji = 2, jpim1
46            zwz(ji,jk) = zwy(ji,jk) - zwi(ji,jk) / zwt(ji,jk-1) * zwz(ji,jk-1)
47         END DO
48      END DO
49      DO ji = 2, jpim1
50         zwx(ji,jpkm1) = zwz(ji,jpkm1) / zwt(ji,jpkm1)
51      END DO
52      DO jk = ikenm2, ikst, -1
53         DO ji = 2, jpim1
54            zwx(ji,jk) =( zwz(ji,jk) - zws(ji,jk) * zwx(ji,jk+1) ) / zwt(ji,jk)
55         END DO
56      END DO
57     
Note: See TracBrowser for help on using the repository browser.