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.vopt.h90 in tags/nemo_dev_x3/NEMO/OPA_SRC/ZDF – NEMO

source: tags/nemo_dev_x3/NEMO/OPA_SRC/ZDF/zdf.matrixsolver.vopt.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: 2.2 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 3d arry zwt is a work space array
21!   zwy is used and then used as a work space array : its value is modified!
22!
23!   N.B. the starting vertical index (ikst) is equal to 1 except for
24!   the resolution of tke matrix where surface tke value is prescribed
25!   so that ikstrt=2.
26!!----------------------------------------------------------------------
27!!  OPA 8.5, LODYC-IPSL (2002)
28!!----------------------------------------------------------------------
29
30      ikstp1 = ikst + 1
31      ikenm2 = jpk - 2
32
33      DO jj = 2, jpjm1
34         DO ji = fs_2, fs_jpim1
35            zwt(ji,jj,ikst) = zwd(ji,jj,ikst)
36         END DO
37      END DO
38
39      DO jk = ikstp1, jpkm1
40         DO jj = 2, jpjm1
41            DO ji = fs_2, fs_jpim1
42               zwt(ji,jj,jk) = zwd(ji,jj,jk) - zwi(ji,jj,jk) * zws(ji,jj,jk-1) / zwt(ji,jj,jk-1)
43            END DO
44         END DO
45      END DO
46
47      DO jk = ikstp1, jpkm1
48         DO jj = 2, jpjm1
49            DO ji = fs_2, fs_jpim1
50               zwy(ji,jj,jk) = zwy(ji,jj,jk) - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) * zwy(ji,jj,jk-1)
51            END DO
52         END DO
53      END DO
54
55      DO jj = 2, jpjm1
56         DO ji = fs_2, fs_jpim1
57            zwx(ji,jj,jpkm1) = zwy(ji,jj,jpkm1) / zwt(ji,jj,jpkm1)
58         END DO
59      END DO
60
61      DO jk = ikenm2, ikst, -1
62         DO jj = 2, jpjm1
63            DO ji = fs_2, fs_jpim1
64               zwx(ji,jj,jk) = ( zwy(ji,jj,jk) - zws(ji,jj,jk) * zwx(ji,jj,jk+1) ) / zwt(ji,jj,jk)
65            END DO
66         END DO
67      END DO
Note: See TracBrowser for help on using the repository browser.