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_dev_x3/NEMO/OPA_SRC/ZDF – NEMO

source: tags/nemo_dev_x3/NEMO/OPA_SRC/ZDF/zdf.matrixsolver.h90 @ 105

Last change on this file since 105 was 105, checked in by cvs2svn, 20 years ago

This commit was manufactured by cvs2svn to create tag 'nemo_dev_x3'.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 1.8 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 8.5, LODYC-IPSL (2002)
27!!----------------------------------------------------------------------
28
29      ikstp1 = ikst + 1
30      ikenm2 = jpk - 2
31      DO ji = 2, jpim1
32         zwt(ji,ikst) = zwd(ji,ikst)
33      END DO
34      DO jk = ikstp1, jpkm1
35         DO ji = 2, jpim1
36            zwt(ji,jk) = zwd(ji,jk) - zwi(ji,jk) * zws(ji,jk-1) / zwt(ji,jk-1)
37         END DO
38      END DO
39      DO ji = 2, jpim1
40         zwz(ji,ikst) = zwy(ji,ikst)
41      END DO
42      DO jk = ikstp1, jpkm1
43         DO ji = 2, jpim1
44            zwz(ji,jk) = zwy(ji,jk) - zwi(ji,jk) / zwt(ji,jk-1) * zwz(ji,jk-1)
45         END DO
46      END DO
47      DO ji = 2, jpim1
48         zwx(ji,jpkm1) = zwz(ji,jpkm1) / zwt(ji,jpkm1)
49      END DO
50      DO jk = ikenm2, ikst, -1
51         DO ji = 2, jpim1
52            zwx(ji,jk) =( zwz(ji,jk) - zws(ji,jk) * zwx(ji,jk+1) ) / zwt(ji,jk)
53         END DO
54      END DO
55     
Note: See TracBrowser for help on using the repository browser.