1 | !> \file sealevel-out.f90 |
---|
2 | !! Module pour les sorties des variations du niveau de la mer |
---|
3 | !< |
---|
4 | |
---|
5 | !> SUBROUTINE: sealevel_out |
---|
6 | !! \author Vince |
---|
7 | !! \date 17 janvier 2001 |
---|
8 | !! @note Sorties des variations du niveau de la mer : nouveau calcul par rapport au niveau actuel |
---|
9 | !! @note Pour executer cette routine on fait appel aux conditions actuels contenues dans un fichier pl |
---|
10 | !! @note Used modules: |
---|
11 | !! @note - use module3D_phy |
---|
12 | !! @note - use param_phy_mod |
---|
13 | !! |
---|
14 | !< |
---|
15 | subroutine sealevel_out |
---|
16 | |
---|
17 | USE module3D_phy |
---|
18 | USE param_phy_mod |
---|
19 | implicit none |
---|
20 | |
---|
21 | ! declarations |
---|
22 | real :: seal2 |
---|
23 | real :: VOLF1,VOLF2,VOLG1,VOLG2,DX_DY |
---|
24 | real :: volsea ! difference entre la calotte au temps t et la calotte du fichier pl (etat actuel comme reference). la difference est exprimee en volume de glace. |
---|
25 | |
---|
26 | real :: V00,V10,V01,V3,V4,V01bis,V01ter |
---|
27 | integer :: NGR1,NGR2,N00,N11,N01,N10 |
---|
28 | |
---|
29 | ! parametres |
---|
30 | DX_DY=DX*DY |
---|
31 | seal2=0 ! niveau de la mer actuel |
---|
32 | |
---|
33 | ! l' ouverture et la lecture du fichier pl de l'etat actuel (reference) |
---|
34 | ! se fait dans inputfile lecture de M_sealev, B_sealev, H_sealev et S_sealev |
---|
35 | ! 'present1+k000.pl' ! nom du fichier etat actuel |
---|
36 | |
---|
37 | |
---|
38 | |
---|
39 | seal2=0 ! niveau de la mer actuel |
---|
40 | |
---|
41 | |
---|
42 | |
---|
43 | ! Mise a 0 des compteurs |
---|
44 | NGR1=0 |
---|
45 | NGR2=0 |
---|
46 | VOLF1=0. |
---|
47 | VOLF2=0. |
---|
48 | VOLG1=0. |
---|
49 | VOLG2=0. |
---|
50 | VOLSEA=0. |
---|
51 | V00=0. |
---|
52 | V10=0. |
---|
53 | V01=0. |
---|
54 | V3=0. |
---|
55 | V4=0. |
---|
56 | V01bis=0. |
---|
57 | V01ter=0. |
---|
58 | N11=0 |
---|
59 | N00=0 |
---|
60 | N01=0 |
---|
61 | N10=0 |
---|
62 | |
---|
63 | ! debut de la boucle sur les points de grille |
---|
64 | ! do k=1,np |
---|
65 | do j=1,ny |
---|
66 | do i=1,nx |
---|
67 | ! Diagnostics sur les valeurs au moment t |
---|
68 | if (MK(i,j).eq.0) then ! grounded |
---|
69 | NGR1=NGR1+1 |
---|
70 | VOLG1=VOLG1+H(i,j) |
---|
71 | |
---|
72 | ! calcul de la hauteur au dessus de la flottaison |
---|
73 | if (SEALEVEL-B(i,j).le.0.) then ! socle au dessus niveau des mers du moment |
---|
74 | VOLF1=VOLF1+H(i,j) |
---|
75 | ! on ajoute l'epaisseur de glace |
---|
76 | else ! socle en dessous du nivx des mers du moment |
---|
77 | VOLF1=VOLF1+H(i,j)-ROW/RO*(SEALEVEL-B(i,j)) |
---|
78 | ! on ajoute l'epaisseur au-dessus du nivx de la mer plus |
---|
79 | ! le surplus de volume occupe par la glace dans l'eau |
---|
80 | endif |
---|
81 | endif |
---|
82 | ! Diagnostics sur le fichier actuel |
---|
83 | ! read(112,*) S2,H2,B2,M2 |
---|
84 | if (M_sealev(i,j).eq.0) then ! grounded |
---|
85 | NGR2 = NGR2 + 1 |
---|
86 | VOLG2 = VOLG2 + H_sealev(i,j) |
---|
87 | |
---|
88 | ! calcul de la hauteur au dessus de la flottaison |
---|
89 | if (SEAL2-B_SEALEV(I,J).le.0.) then ! socle au dessus niveau des mers du moment |
---|
90 | VOLF2=VOLF2+H_SEALEV(I,J) |
---|
91 | else |
---|
92 | VOLF2=VOLF2+H_SEALEV(I,J)-ROW/RO*(SEAL2-B_SEALEV(I,J)) |
---|
93 | endif |
---|
94 | endif |
---|
95 | |
---|
96 | ! Tests croises |
---|
97 | V4=V4+H(i,j)-H_SEALEV(I,J) |
---|
98 | if ((MK(i,j).eq.1).and.(M_SEALEV(I,J).eq.1)) then ! flottant aux deux epoques |
---|
99 | VOLSEA=VOLSEA |
---|
100 | N11=N11+1 |
---|
101 | ! write(13,*) i,j,0. |
---|
102 | |
---|
103 | else if ((MK(i,j).eq.0).and.(M_SEALEV(I,J).eq.0)) then ! grounded aux deux epoques |
---|
104 | VOLSEA=VOLSEA+(H(i,j)-H_SEALEV(I,J)) |
---|
105 | V00=V00+H(i,j)-H_SEALEV(I,J) |
---|
106 | V3=V3+H(i,j)-H_SEALEV(I,J) |
---|
107 | N00=N00+1 |
---|
108 | ! write(13,*) i,j,H1-H_SEALEV(I,J) |
---|
109 | else if ((MK(i,j).eq.0).and.(M_SEALEV(I,J).eq.1)) then ! grounded passe,float present |
---|
110 | VOLSEA=VOLSEA+H(i,j)-ROW/RO*(SEAL2-B_SEALEV(I,J)) |
---|
111 | V01=V01+H(i,j)-ROW/RO*(SEAL2-B_SEALEV(I,J)) |
---|
112 | ! write(6,*) H1,H_SEALEV(I,J),B1,B_SEALEV(I,J),H1-ROW/RO*(SEAL2-B_SEALEV(I,J)) |
---|
113 | V01bis=V01bis+H(i,j) |
---|
114 | V01ter=V01ter+(SEAL2-B_SEALEV(I,J))*ROW/RO |
---|
115 | V3=V3+H(i,j) |
---|
116 | N01=N01+1 |
---|
117 | ! write(13,*) i,j,H1-ROW/RO*(SEAL2-B_SEALEV(I,J)) |
---|
118 | else if ((MK(i,j).eq.1).and.(M_SEALEV(I,J).eq.0)) then ! float passe, grounded present |
---|
119 | VOLSEA=VOLSEA-(H_SEALEV(I,J)-ROW/RO*(SEAL2-B_SEALEV(I,J))) |
---|
120 | V10=V10-(H_SEALEV(I,J)-ROW/RO*(SEAL2-B_SEALEV(I,J))) |
---|
121 | V3=V3-H_SEALEV(I,J) |
---|
122 | N10=N10+1 |
---|
123 | ! write(13,*) i,j,H_SEALEV(I,J)-ROW/RO*(SEAL2-B_SEALEV(I,J)) |
---|
124 | endif |
---|
125 | ! if (MK(i,j).eq.0) then |
---|
126 | ! write(14,*) i,j,H1-H_SEALEV(I,J) |
---|
127 | ! else |
---|
128 | ! write(14,*) i,j,0. |
---|
129 | ! endif |
---|
130 | |
---|
131 | end do |
---|
132 | end do ! fin de la boucle sur les points de grille |
---|
133 | |
---|
134 | |
---|
135 | |
---|
136 | |
---|
137 | ! sortie des resultats |
---|
138 | !write(num_sealevel,*) 'pas de temps' |
---|
139 | !write(num_sealevel,*) 'file1', sealevel |
---|
140 | !write(num_sealevel,*) NGR1, VOLG1*dx_dy,VOLF1*dx_dy |
---|
141 | !write(num_sealevel,*) |
---|
142 | |
---|
143 | |
---|
144 | !write(num_sealevel,*) 'file2', seal2 |
---|
145 | !write(num_sealevel,*) NGR2, VOLG2*dx_dy,VOLF2*dx_dy |
---|
146 | !write(num_sealevel,*) |
---|
147 | |
---|
148 | !write(num_sealevel,*) 'differences' |
---|
149 | !write(num_sealevel,*) (NGR1-NGR2)*dx_dy, (VOLG1-VOLG2)*dx_dy,(VOLF1-VOLF2)*dx_dy |
---|
150 | !write(num_sealevel,*) VOLSEA*dx_dy,V00*dx_dy,V01*dx_dy,V10*dx_dy,V3*dx_dy |
---|
151 | !write(num_sealevel,*) V4*dx_dy,V01bis*dx_dy,V01ter*dx_dy |
---|
152 | !write(num_sealevel,*) N11,N00,N01,N10 |
---|
153 | !write(num_sealevel,*) |
---|
154 | !write(num_sealevel,*) |
---|
155 | |
---|
156 | |
---|
157 | |
---|
158 | |
---|
159 | write(num_sealevel,112) time,(NGR1-NGR2)*dx_dy,(VOLG1-VOLG2)*dx_dy, & |
---|
160 | (VOLF1-VOLF2)*dx_dy,VOLSEA*dx_dy,V01ter*dx_dy |
---|
161 | 112 format(1x,f8.0,5(1x,e14.6)) |
---|
162 | |
---|
163 | |
---|
164 | end subroutine sealevel_out |
---|