Changeset 425 for branches/GRISLIv3
- Timestamp:
- 04/25/23 11:40:22 (15 months ago)
- Location:
- branches/GRISLIv3/SOURCES
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GRISLIv3/SOURCES/3D-physique-gen_mod.f90
r424 r425 72 72 !integer, dimension(NX,NY) :: LIGV !< numero de ligne de V dans remplidom 73 73 74 integer :: nombre_profils !< nombre de profils de la calotte75 74 integer :: itracer ! pour ecrire les recovery avec ou sans les tableaux traceurs 76 75 -
branches/GRISLIv3/SOURCES/out_profile_mod.f90
r65 r425 13 13 module out_profile 14 14 15 use module3D_phy 15 implicit none 16 integer,dimension(:,:),allocatable :: i_prof !< tableau contenant les coordonnees des points des profils, 17 !< ici i. la 2eme dimension pour les differents profils 18 !< allocation de i_prof et j_prof dans inputfile-vec 19 integer,dimension(:,:),allocatable :: j_prof !< tableau contenant les coordonnees des points des profils, 20 !< ici j. la 2eme dimension pour les differents profils 16 21 17 18 implicit none 19 integer,dimension(:,:),allocatable :: i_prof !< tableau contenant les coordonnees des points des profils, 20 !< ici i. la 2eme dimension pour les differents profils 21 !< allocation de i_prof et j_prof dans inputfile-vec 22 integer,dimension(:,:),allocatable :: j_prof !< tableau contenant les coordonnees des points des profils, 23 !< ici j. la 2eme dimension pour les differents profils 24 25 integer,dimension(:),allocatable :: nbr_pts_prof !< nombre de points dans les profils 26 integer :: nmax 27 integer :: num_geo 28 29 character (len=50),dimension(:),allocatable :: nom_profil !< nom des fichiers profils 30 character(len=30) :: nom_prof 31 character(len=80) :: filin 32 character(len=7) :: test_geon 22 integer :: nombre_profils !< nombre de profils de la calotte 23 integer,dimension(:),allocatable :: nbr_pts_prof !< nombre de points dans les profils 24 integer :: nmax 25 integer :: num_geo 26 27 character (len=50),dimension(:),allocatable :: nom_profil !< nom des fichiers profils 28 character(len=30) :: nom_prof 29 character(len=80) :: filin 30 character(len=7) :: test_geon 33 31 34 32 contains 35 !> SUBROUTINE: input_profile36 !! Lecture des coordonnees des points de grille ou passent les profils37 !! @note Lecture des fichiers contenant les points i j des profiles38 !>33 !> SUBROUTINE: input_profile 34 !! Lecture des coordonnees des points de grille ou passent les profils 35 !! @note Lecture des fichiers contenant les points i j des profiles 36 !> 39 37 subroutine input_profile 38 39 use module3D_phy, only: num_rep_42,num_file2 40 use geography, only: dirnameinp,geoplace 41 42 integer :: err 43 integer :: i, k 40 44 !====================================== La reponse est num_rep_42 =========== 41 45 write(num_rep_42,*) … … 127 131 128 132 end subroutine input_profile 129 !--------------------------------------------------------------------------------------- 130 !--------------------------------------------------------------------------------------- 131 !--------------------------------------------------------------------------------------- 132 !> SUBROUTINE: sortieprofile 133 !!Routine de sortie des resultats pour faire des profiles de la calotte 134 !!@note Pour l'utilise il est necessaire d'avoir des fichier contenant les traces 135 !! des profiles. 136 !> 137 138 subroutine sortieprofile 139 140 ! routine de sortie des resultats pour faire des profiles de la calotte 141 ! Pour l'utilise il est necessaire d'avoir des fichier contenant les traces 142 ! des profiles. 143 144 IMPLICIT NONE 145 146 integer :: numtime 147 !integer :: nmax 148 integer :: n 149 integer, dimension(:), allocatable :: nbr_ligne_prof 150 integer :: nbr_ligne_total 151 real :: dxkm , dykm ! resolution en kilometre 152 !integer, dimension(200) :: i_prof, j_prof 153 real, dimension(400) :: x_profil ! position en km sur le profil 154 real, dimension(400,21) :: z_profil ! position verticale en km 155 !character (len=52) :: dirname 156 character (len=40) :: dirname 157 !character (len=47) :: profile1 158 character (len=1) :: signe, unite, nt1 159 character (len=2) :: nt2 160 character (len=3) :: nt3 161 character (len=4) :: nt4 162 character (len=5) :: nt5 163 character (len=80) :: ffinal 164 real, dimension(nx,ny) :: smoinsb 165 166 167 !resolution spatiale 168 dxkm=dx/1000 169 dykm=dy/1000 170 171 ! allocation de nbr_ligne_prof 172 if (.not.allocated(nbr_ligne_prof)) THEN 173 allocate(nbr_ligne_prof(nombre_profils),stat=err) 174 if (err/=0) then 175 print *,"Erreur à l'allocation du tableau nbr_ligne_prof",err 176 stop 4 177 end if 178 end if 179 180 181 DIRNAME=TRIM(DIRNAMEOUT)!DIRNAMEOUT 182 183 184 185 ! pour changer de signe entre le passe et le futur 186 if (TIME.GT.0.) THEN 187 signe= '+' 188 else 189 signe= '-' 190 endif 191 192 193 if (int(mod(abs(TIME),1000.)).eq.0) then 194 ! temps multiple de 1000 195 unite='k' 196 NUMTIME=nint(abs(TIME/1000.)) 197 else if (int(mod(abs(TIME),100.)).eq.0) then 198 ! temps multiple de 100 199 unite='c' 200 NUMTIME=nint(abs(TIME/100.)) 201 else if (int(mod(abs(TIME),10.)).eq.0) then 202 ! temps multiple de 10 203 unite='d' 204 NUMTIME=nint(abs(TIME/10.)) 205 else 206 ! temps en annees 207 unite='a' 208 NUMTIME=nint(abs(TIME/1.)) 209 endif 210 211 921 format(i1) 212 922 format(i2) 213 923 format(i3) 214 924 format(i4) 215 925 format(i5) 216 217 218 if (NUMTIME.lt.10) then 219 write(nt1,921) NUMTIME 220 ffinal=TRIM(DIRNAME)//RUNNAME//signe//unite//'00'//nt1//'.prf' 221 else if ((NUMTIME.ge.10).and.(NUMTIME.lt.100)) then 222 write(nt2,922) NUMTIME 223 ffinal=TRIM(DIRNAME)//RUNNAME//signe//unite//'0'//nt2//'.prf' 224 else if ((NUMTIME.ge.100).and.(NUMTIME.lt.1000)) then 225 write(nt3,923) NUMTIME 226 ffinal=TRIM(DIRNAME)//RUNNAME//signe//unite//nt3//'.prf' 227 else if ((NUMTIME.ge.1000).and.(NUMTIME.lt.10000)) then 228 write(nt4,924) NUMTIME 229 ffinal=TRIM(DIRNAME)//RUNNAME//signe//unite//nt4//'.prf' 230 else if ((NUMTIME.ge.10000).and.(NUMTIME.lt.100000)) then 231 write(nt5,925) NUMTIME 232 ffinal=TRIM(DIRNAME)//RUNNAME//signe//unite//nt5//'.prf' 233 else 234 ffinal=TRIM(DIRNAME)//RUNNAME//signe//'out'//'.prf' 235 endif 236 237 open (num_file1,file=FFINAL) 238 239 nbr_ligne_prof(:)=nbr_pts_prof(:)*21+1 240 nbr_ligne_total=sum(nbr_ligne_prof) 241 242 write(num_file1,*) (nbr_ligne_prof(i),i=1,nombre_profils),nbr_ligne_total 243 244 ! boucle sur le nombre de profil a effectuer 245 Do i=1,nombre_profils 246 247 248 249 ! calcul de la position des points sur le profil en km 250 251 252 do k=1,nz 253 z_profil(1,k)=S(i_prof(i,1),j_prof(i,1))-((S(i_prof(i,1),j_prof(i,1)) - & 254 B(i_prof(i,1),j_prof(i,1)))*(k-1)/20) 255 enddo 256 257 258 x_profil(1)= 0 259 260 do n=2,nbr_pts_prof(i) 261 x_profil(n)= x_profil(n-1) + (((i_prof(i,n)-i_prof(i,n-1))*dxkm)**2 + & 262 ((j_prof(i,n)-j_prof(i,n-1))*dykm)**2)**0.5 263 SMOINSB(i_prof(i,n),j_prof(i,n))=S(i_prof(i,n),j_prof(i,n)) & 264 -B(i_prof(i,n),j_prof(i,n)) 265 do k=1,nz 266 z_profil(n,k)=S(i_prof(i,n),j_prof(i,n))- & 267 (SMOINSB(i_prof(i,n),j_prof(i,n))*(k-1)/20) 268 enddo 269 enddo 270 271 272 273 274 ! ecriture du fichier .prf 275 ! nombre de ligne du profil 276 ! i,j,n,k,x(km),z(km),T,Ux(i,j,1,nz),Ux(i+1,j,1,nz),Uy(i,j,1,nz),Uy(i,j+1,1,nz),UZR(i,j,nz),S,B,BSOC 277 ! i et j sont les coordonnees des points dans la grille du modele 278 ! n est le no du point horizontalement sur le profil. 1 2 3 4 ... 279 ! k est le no verticale sur le profil (de 1 a 21) 280 ! B est le fond de la glace 281 ! BSOC est le socle 282 283 284 write(num_file1,*) 'i j n k x(km) z(km) T Ux(i,j) Ux(i+1,j) Uy(i,j) Uy(i,j+1) UZR(i,j) S B BSOC' 285 286 do n=1,nbr_pts_prof(i) 287 do k=1,nz 288 write(num_file1,912) i_prof(i,n),j_prof(i,n),n,k,x_profil(n),z_profil(n,k), & 289 T(i_prof(i,n),j_prof(i,n),k),UX(i_prof(i,n),j_prof(i,n),k), & 290 UX(i_prof(i,n)+1,j_prof(i,n),k),UY(i_prof(i,n),j_prof(i,n),k), & 291 UY(i_prof(i,n),j_prof(i,n)+1,k),UZR(i_prof(i,n),j_prof(i,n),k), & 292 S(i_prof(i,n),j_prof(i,n)),B(i_prof(i,n),j_prof(i,n)),BSOC(i_prof(i,n),j_prof(i,n)) 293 enddo 294 enddo 295 296 enddo 297 close(num_file1) 133 !--------------------------------------------------------------------------------------- 134 !--------------------------------------------------------------------------------------- 135 !--------------------------------------------------------------------------------------- 136 !> SUBROUTINE: sortieprofile 137 !!Routine de sortie des resultats pour faire des profiles de la calotte 138 !!@note Pour l'utilise il est necessaire d'avoir des fichier contenant les traces 139 !! des profiles. 140 !> 141 142 ! routine de sortie des resultats pour faire des profiles de la calotte 143 ! Pour l'utilise il est necessaire d'avoir des fichier contenant les traces 144 ! des profiles. 145 subroutine sortieprofile 146 147 use module3D_phy, only:time,num_file1,S,B,T,ux,uy,uzr,Bsoc 148 use runparam, only: runname,dirnameout 149 use geography, only: dx,dy,nz,nx,ny 150 151 integer :: numtime 152 !integer :: nmax 153 integer :: n,err,i,k 154 integer, dimension(:), allocatable :: nbr_ligne_prof 155 integer :: nbr_ligne_total 156 real :: dxkm , dykm ! resolution en kilometre 157 !integer, dimension(200) :: i_prof, j_prof 158 real, dimension(400) :: x_profil ! position en km sur le profil 159 real, dimension(400,21) :: z_profil ! position verticale en km 160 !character (len=52) :: dirname 161 character (len=40) :: dirname 162 !character (len=47) :: profile1 163 character (len=1) :: signe, unite, nt1 164 character (len=2) :: nt2 165 character (len=3) :: nt3 166 character (len=4) :: nt4 167 character (len=5) :: nt5 168 character (len=80) :: ffinal 169 real, dimension(nx,ny) :: smoinsb 170 171 172 !resolution spatiale 173 dxkm=dx/1000 174 dykm=dy/1000 175 176 ! allocation de nbr_ligne_prof 177 if (.not.allocated(nbr_ligne_prof)) THEN 178 allocate(nbr_ligne_prof(nombre_profils),stat=err) 179 if (err/=0) then 180 print *,"Erreur à l'allocation du tableau nbr_ligne_prof",err 181 stop 4 182 end if 183 end if 184 185 186 DIRNAME=TRIM(DIRNAMEOUT)!DIRNAMEOUT 187 188 189 190 ! pour changer de signe entre le passe et le futur 191 if (TIME.GT.0.) THEN 192 signe= '+' 193 else 194 signe= '-' 195 endif 196 197 198 if (int(mod(abs(TIME),1000.)).eq.0) then 199 ! temps multiple de 1000 200 unite='k' 201 NUMTIME=nint(abs(TIME/1000.)) 202 else if (int(mod(abs(TIME),100.)).eq.0) then 203 ! temps multiple de 100 204 unite='c' 205 NUMTIME=nint(abs(TIME/100.)) 206 else if (int(mod(abs(TIME),10.)).eq.0) then 207 ! temps multiple de 10 208 unite='d' 209 NUMTIME=nint(abs(TIME/10.)) 210 else 211 ! temps en annees 212 unite='a' 213 NUMTIME=nint(abs(TIME/1.)) 214 endif 215 216 921 format(i1) 217 922 format(i2) 218 923 format(i3) 219 924 format(i4) 220 925 format(i5) 221 222 223 if (NUMTIME.lt.10) then 224 write(nt1,921) NUMTIME 225 ffinal=TRIM(DIRNAME)//RUNNAME//signe//unite//'00'//nt1//'.prf' 226 else if ((NUMTIME.ge.10).and.(NUMTIME.lt.100)) then 227 write(nt2,922) NUMTIME 228 ffinal=TRIM(DIRNAME)//RUNNAME//signe//unite//'0'//nt2//'.prf' 229 else if ((NUMTIME.ge.100).and.(NUMTIME.lt.1000)) then 230 write(nt3,923) NUMTIME 231 ffinal=TRIM(DIRNAME)//RUNNAME//signe//unite//nt3//'.prf' 232 else if ((NUMTIME.ge.1000).and.(NUMTIME.lt.10000)) then 233 write(nt4,924) NUMTIME 234 ffinal=TRIM(DIRNAME)//RUNNAME//signe//unite//nt4//'.prf' 235 else if ((NUMTIME.ge.10000).and.(NUMTIME.lt.100000)) then 236 write(nt5,925) NUMTIME 237 ffinal=TRIM(DIRNAME)//RUNNAME//signe//unite//nt5//'.prf' 238 else 239 ffinal=TRIM(DIRNAME)//RUNNAME//signe//'out'//'.prf' 240 endif 241 242 open (num_file1,file=FFINAL) 243 244 nbr_ligne_prof(:)=nbr_pts_prof(:)*21+1 245 nbr_ligne_total=sum(nbr_ligne_prof) 246 247 write(num_file1,*) (nbr_ligne_prof(i),i=1,nombre_profils),nbr_ligne_total 248 249 ! boucle sur le nombre de profil a effectuer 250 Do i=1,nombre_profils 251 252 253 254 ! calcul de la position des points sur le profil en km 255 256 257 do k=1,nz 258 z_profil(1,k)=S(i_prof(i,1),j_prof(i,1))-((S(i_prof(i,1),j_prof(i,1)) - & 259 B(i_prof(i,1),j_prof(i,1)))*(k-1)/20) 260 enddo 261 262 263 x_profil(1)= 0 264 265 do n=2,nbr_pts_prof(i) 266 x_profil(n)= x_profil(n-1) + (((i_prof(i,n)-i_prof(i,n-1))*dxkm)**2 + & 267 ((j_prof(i,n)-j_prof(i,n-1))*dykm)**2)**0.5 268 SMOINSB(i_prof(i,n),j_prof(i,n))=S(i_prof(i,n),j_prof(i,n)) & 269 -B(i_prof(i,n),j_prof(i,n)) 270 do k=1,nz 271 z_profil(n,k)=S(i_prof(i,n),j_prof(i,n))- & 272 (SMOINSB(i_prof(i,n),j_prof(i,n))*(k-1)/20) 273 enddo 274 enddo 275 276 277 278 279 ! ecriture du fichier .prf 280 ! nombre de ligne du profil 281 ! i,j,n,k,x(km),z(km),T,Ux(i,j,1,nz),Ux(i+1,j,1,nz),Uy(i,j,1,nz),Uy(i,j+1,1,nz),UZR(i,j,nz),S,B,BSOC 282 ! i et j sont les coordonnees des points dans la grille du modele 283 ! n est le no du point horizontalement sur le profil. 1 2 3 4 ... 284 ! k est le no verticale sur le profil (de 1 a 21) 285 ! B est le fond de la glace 286 ! BSOC est le socle 287 288 289 write(num_file1,*) 'i j n k x(km) z(km) T Ux(i,j) Ux(i+1,j) Uy(i,j) Uy(i,j+1) UZR(i,j) S B BSOC' 290 291 do n=1,nbr_pts_prof(i) 292 do k=1,nz 293 write(num_file1,912) i_prof(i,n),j_prof(i,n),n,k,x_profil(n),z_profil(n,k), & 294 T(i_prof(i,n),j_prof(i,n),k),UX(i_prof(i,n),j_prof(i,n),k), & 295 UX(i_prof(i,n)+1,j_prof(i,n),k),UY(i_prof(i,n),j_prof(i,n),k), & 296 UY(i_prof(i,n),j_prof(i,n)+1,k),UZR(i_prof(i,n),j_prof(i,n),k), & 297 S(i_prof(i,n),j_prof(i,n)),B(i_prof(i,n),j_prof(i,n)),BSOC(i_prof(i,n),j_prof(i,n)) 298 enddo 299 enddo 300 301 enddo 302 close(num_file1) 298 303 299 304 912 format(4(i3,1x),11(f8.2,1x)) 300 deallocate(nbr_ligne_prof,stat=err)301 if (err/=0) then302 print *,"Erreur à l'allocation du tableau nbr_ligne_prof",err303 stop 4304 end if305 306 end subroutine sortieprofile307 !---------------------------------------------------------------------------------------!308 !---------------------------------------------------------------------------------------!305 deallocate(nbr_ligne_prof,stat=err) 306 if (err/=0) then 307 print *,"Erreur à l'allocation du tableau nbr_ligne_prof",err 308 stop 4 309 end if 310 311 end subroutine sortieprofile 312 !---------------------------------------------------------------------------------------! 313 !---------------------------------------------------------------------------------------! 309 314 end module out_profile
Note: See TracChangeset
for help on using the changeset viewer.