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

source: trunk/NEMO/OPA_SRC/ZDF/zdf.matrixsolver.vopt.h90 @ 247

Last change on this file since 247 was 247, checked in by opalod, 19 years ago

CL : Add CVS Header and CeCILL licence information

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.3 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 9.0 , LOCEAN-IPSL (2005)
28!! $Header$
29!! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
30!!----------------------------------------------------------------------
31
32      ikstp1 = ikst + 1
33      ikenm2 = jpk - 2
34
35      DO jj = 2, jpjm1
36         DO ji = fs_2, fs_jpim1
37            zwt(ji,jj,ikst) = zwd(ji,jj,ikst)
38         END DO
39      END DO
40
41      DO jk = ikstp1, jpkm1
42         DO jj = 2, jpjm1
43            DO ji = fs_2, fs_jpim1
44               zwt(ji,jj,jk) = zwd(ji,jj,jk) - zwi(ji,jj,jk) * zws(ji,jj,jk-1) / zwt(ji,jj,jk-1)
45            END DO
46         END DO
47      END DO
48
49      DO jk = ikstp1, jpkm1
50         DO jj = 2, jpjm1
51            DO ji = fs_2, fs_jpim1
52               zwy(ji,jj,jk) = zwy(ji,jj,jk) - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) * zwy(ji,jj,jk-1)
53            END DO
54         END DO
55      END DO
56
57      DO jj = 2, jpjm1
58         DO ji = fs_2, fs_jpim1
59            zwx(ji,jj,jpkm1) = zwy(ji,jj,jpkm1) / zwt(ji,jj,jpkm1)
60         END DO
61      END DO
62
63      DO jk = ikenm2, ikst, -1
64         DO jj = 2, jpjm1
65            DO ji = fs_2, fs_jpim1
66               zwx(ji,jj,jk) = ( zwy(ji,jj,jk) - zws(ji,jj,jk) * zwx(ji,jj,jk+1) ) / zwt(ji,jj,jk)
67            END DO
68         END DO
69      END DO
Note: See TracBrowser for help on using the repository browser.