source: trunk/SOURCES/surface-0.3.f90 @ 23

Last change on this file since 23 was 4, checked in by dumas, 10 years ago

initial import GRISLI trunk

File size: 3.1 KB
Line 
1!> \file surface-0.3.f90
2!! Calcule de l'altitude de la surface tous les DTT (pas de temps)
3!<
4
5!> SUBROUTINE:  SURFACE()
6!! \author Christophe Dumas
7!! \date Mai 2000
8!! @note  Routine qui calcul l'altitude de la surface tous les DTT (pas de temps)
9!! @note  Iterations jusqu'a stabilisation de la surface.
10!! @note  Les changements d'altitude de la surface sont limites a 1 m a chaque
11!! iteration.
12!! @note Used modules:
13!! @note    - use module3D_phy
14!! @note    - use RELAXATION_MOD
15!!
16!<
17
18
19!  *****************************************************************
20!
21!
22!
23!                Christophe Dumas, Mai 2000
24!
25!   routine qui calcul l'altitude de la surface tous les DTT (pas de temps)
26!   iterations jusqu'a stabilisation de la surface.
27!   les changements d'altitude de la surface sont limites a 1 m a chaque
28!   iteration.
29!
30!  *****************************************************************
31
32subroutine SURFACE()
33
34       USE module3D_phy
35
36  USE RELAXATION_MOD ! module contenant la routine relaxation
37                     ! avec interface explicite
38
39  IMPLICIT NONE
40
41  INTEGER :: ntour 
42  INTEGER :: compteur_limitation !< compteur du nbr de points ou on a limite
43  INTEGER :: NXlocal,NYlocal !< pour pouvoir passer NX et NY en parametre a la routine relaxation
44  REAL :: dtsdx
45  REAL :: difH
46  REAL,dimension(NX,NY) :: vieuxH,vieuxH1 !< ancienne valeur de H
47  REAL :: SURNET !< permet le calcul de l'altitude de la surface qd la glace flotte
48
49! initialisation des variables
50!------------------------------
51  NXlocal=NX
52  NYlocal=NY
53  ntour=0
54  DT= DTT
55  dtsdx= dt/dx
56  compteur_limitation= 51
57
58! Copie de H sur vieuxH
59! --------------------
60
61
62  vieuxH(:,:)= H(:,:)
63  vieuxH1(:,:)=H(:,:)
64  write(6,*) H(70,60)
65! resolution de l'equation de relaxation avec le pas de temps DTT
66
67
68!  DO WHILE ((compteur_limitation.GT.50))
69  DO WHILE ((compteur_limitation.GT.50).AND.(ntour.LT.20))
70
71  compteur_limitation = 0
72  ntour = ntour + 1
73
74
75  CALL RELAXATION(NXlocal,NYlocal,MK,MARINE,FLOT,DTT,DX,vieuxH,BM,BMELT,UXBAR,UYBAR,H,HDOT)
76
77
78
79! pour empecher de partir vers des valeurs trop elevees on limite a 1 m les variations
80  write(6,*) H(70,60)
81  do i=1,NX
82     do j=1,NY
83        difH= H(i,j) - vieuxH1(i,j)
84
85        IF ((ABS(difH)).GT.1.) THEN
86           compteur_limitation = compteur_limitation + 1
87           IF (difH.GT.0.) THEN
88              H(I,J)= vieuxH1(I,J) + 1.
89           ELSE
90              H(I,J)= vieuxH1(I,J) - 1.
91           ENDIF
92        ENDIF
93     enddo
94  enddo
95  write(6,*) H(70,60)
96  H(:,:)=MAX(H(:,:),1.)
97  vieuxH1(:,:)=H(:,:)
98
99
100!*************************************
101! passage par diffusiv et Neffect pour avoir les vitesses diagnostiques
102  call Neffect()
103  call DIFFUSIV()
104
105
106  do i=1,nx
107     do j=1,ny
108        IF (.NOT.FLOT(I,J)) then
109           S(I,J)=BSOC(I,J)+H(I,J)
110        ELSE
111           SURNET = H(I,J) * (1.-RO/ROW)
112           S(I,J) = SURNET + SEALEVEL
113           B(I,J) = S(I,J) - H(I,J)
114        END IF
115     end do
116  end do
117
118
119
120debug_3D(:,:,87)=S(:,:)-debug_3D(:,:,88)
121
122  ENDDO
123
124
125  TIME= TIME + DTT
126  ISYNCHRO=1
127
128  write(6,*) 'nbr d iterations dans surface', ntour
129 
130END SUBROUTINE SURFACE
Note: See TracBrowser for help on using the repository browser.