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_v3_2/nemo_v3_2/NEMO/OFF_SRC/ZDF – NEMO

source: tags/nemo_v3_2/nemo_v3_2/NEMO/OFF_SRC/ZDF/zdf.matrixsolver.vopt.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.4 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   !!   $Id: zdf.matrixsolver.vopt.h90 1152 2008-06-26 14:11:13Z rblod $
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.