[4] | 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 |
---|