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.
surdetermine.F90 in branches/2011/dev_MERCATOR_2011_MERGE/NEMOGCM/NEMO/OPA_SRC/DIA – NEMO

source: branches/2011/dev_MERCATOR_2011_MERGE/NEMOGCM/NEMO/OPA_SRC/DIA/surdetermine.F90 @ 3047

Last change on this file since 3047 was 3046, checked in by cbricaud, 13 years ago

add changes from dev_r2787_MERCATOR2_tidalharm in dev_MERCATOR_2011_MERGE

File size: 3.8 KB
Line 
1MODULE surdetermine 
2
3   USE in_out_manager  ! I/O units
4
5   IMPLICIT NONE
6   PUBLIC
7   
8   INTEGER, PARAMETER :: jpincomax = 18
9   INTEGER, PARAMETER :: jpdimsparse = jpincomax*300*24
10
11   INTEGER, PUBLIC :: nsparse, ninco
12   REAL(wp), PUBLIC, DIMENSION(jpdimsparse) :: valuesparse
13   INTEGER , PUBLIC, DIMENSION(jpdimsparse) :: njsparse, nisparse
14
15   INTEGER, SAVE, DIMENSION(jpincomax) :: ipos1
16   REAL(wp), DIMENSION(jpincomax) :: tmp4, tmp7
17   REAL(wp), SAVE, DIMENSION(jpincomax,jpincomax) :: ztmp3, zpilier
18   REAL(wp), SAVE, DIMENSION(jpincomax) :: zpivot
19
20   !!---------------------------------------------------------------------------------
21   !!
22   !!---------------------------------------------------------------------------------
23
24CONTAINS
25
26      SUBROUTINE SUR_DETERMINE(init)
27 
28      INTEGER, INTENT(in) :: init
29
30      INTEGER  :: &
31         ji_sd, jj_sd, ji1_sd, ji2_sd, jk1_sd, jk2_sd
32      REAL(wp) :: zval1, zval2, zx1
33      REAL(wp), DIMENSION(jpincomax) :: ztmpx, zcol1, zcol2
34      INTEGER, DIMENSION(jpincomax) :: ipos2, ipivot     
35   !---------------------------------------------------------------------------------
36
37      IF (init==1) THEN
38        IF(nsparse .gt. jpdimsparse) STOP 'surdetermine erreur1'
39        IF(ninco .gt. jpincomax)THEN
40          IF (lwp) WRITE(numout,*)'ninco   =',ninco
41          IF (lwp) WRITE(numout,*)'jpincomax=',jpincomax
42          STOP 'DONC dans surdetermine erreur2'
43        END IF
44
45        ztmp3(:,:)=0.e0
46
47        DO jk1_sd=1,nsparse
48          DO jk2_sd=1,nsparse 
49            nisparse(jk2_sd)=nisparse(jk2_sd)
50            njsparse(jk2_sd)=njsparse(jk2_sd)
51            IF(nisparse(jk2_sd) .eq. nisparse(jk1_sd)) &
52            ztmp3(njsparse(jk1_sd),njsparse(jk2_sd))= &
53            ztmp3(njsparse(jk1_sd),njsparse(jk2_sd))  &
54           +valuesparse(jk1_sd)*valuesparse(jk2_sd)
55          END DO
56        END DO
57
58        DO jj_sd=1,ninco
59          ipos1(jj_sd)=jj_sd
60          ipos2(jj_sd)=jj_sd
61        ENDDO
62
63        DO ji_sd=1,ninco
64! recherche du plus grand pivot non nul
65          zval1=ABS(ztmp3(ji_sd,ji_sd))
66
67          ipivot(ji_sd)=ji_sd
68          DO jj_sd=ji_sd,ninco
69             zval2=ABS(ztmp3(ji_sd,jj_sd))
70             IF(zval2.GE.zval1) THEN
71              ipivot(ji_sd)=jj_sd
72              zval1=zval2
73             ENDIF
74          END DO
75
76          DO ji1_sd=1,ninco
77             zcol1(ji1_sd)=ztmp3(ji1_sd,ji_sd)
78             zcol2(ji1_sd)=ztmp3(ji1_sd,ipivot(ji_sd))
79             ztmp3(ji1_sd,ji_sd)=zcol2(ji1_sd)
80             ztmp3(ji1_sd,ipivot(ji_sd))=zcol1(ji1_sd)
81          END DO
82
83          ipos2(ji_sd)=ipos1(ipivot(ji_sd))
84          ipos2(ipivot(ji_sd))=ipos1(ji_sd)
85          ipos1(ji_sd)=ipos2(ji_sd)
86          ipos1(ipivot(ji_sd))=ipos2(ipivot(ji_sd))
87
88
89!-------------------------------
90          zpivot(ji_sd)=ztmp3(ji_sd,ji_sd)
91          DO jj_sd=1,ninco
92             ztmp3(ji_sd,jj_sd)=ztmp3(ji_sd,jj_sd)/zpivot(ji_sd)
93          END DO
94!-------------------------------
95
96!-------------------------------
97          DO ji2_sd=ji_sd+1,ninco
98             zpilier(ji2_sd,ji_sd)=ztmp3(ji2_sd,ji_sd)
99             DO jj_sd=1,ninco
100               ztmp3(ji2_sd,jj_sd)= &
101               ztmp3(ji2_sd,jj_sd)-ztmp3(ji_sd,jj_sd)*zpilier(ji2_sd,ji_sd)
102             END DO
103          END DO
104
105        END DO
106
107      ENDIF ! End init==1
108
109!
110      DO ji_sd=1,ninco
111        tmp4(ji_sd)=tmp4(ji_sd)/zpivot(ji_sd)
112        DO ji2_sd=ji_sd+1,ninco
113           tmp4(ji2_sd)=tmp4(ji2_sd)-tmp4(ji_sd)*zpilier(ji2_sd,ji_sd)
114        END DO
115      END DO
116
117!  resolution du systeme:
118      ztmpx(ninco)=tmp4(ninco)/ztmp3(ninco,ninco)
119      ji_sd=ninco
120      DO ji_sd=ninco-1,1,-1
121        zx1=0.
122        DO jj_sd=ji_sd+1,ninco
123          zx1=zx1+ztmpx(jj_sd)*ztmp3(ji_sd,jj_sd)
124        END DO
125        ztmpx(ji_sd)=tmp4(ji_sd)-zx1
126      END DO
127
128      DO jj_sd=1,ninco
129        tmp7(ipos1(jj_sd))=ztmpx(jj_sd)
130      END DO
131
132
133  END SUBROUTINE SUR_DETERMINE 
134
135END MODULE surdetermine
Note: See TracBrowser for help on using the repository browser.