source: branches/GRISLIv3/SOURCES/out_cptr_mod.f90 @ 449

Last change on this file since 449 was 449, checked in by aquiquet, 8 months ago

Cleaning branch: use only statement for netcdf modules

File size: 19.7 KB
Line 
1!> \file out_cptr_mod.f90
2!! Module avec les routines d'ecriture et de lecture de fichiers cptr
3!<
4
5!> \namespace out_cptr
6!! This module gathers routines to read and write cptr files
7!! \author Vincent Peyaud
8!! \date janvier 2006
9!!  @note  attention :  en ecriture fichier runname.cptr
10!!  @note               en lecture  fichier runname.CPTR
11!!  @note               il faut renommer le fichier !
12!<
13!----------------------------------------------------------
14
15
16!> subroutine: read_recovery
17
18!!Reprise d'un fichier compteur
19!! Used module:  - use module3D_phy
20!!               - use netcdf
21!!               - use io_netcdf_grisli
22!!               - use tracer_vars
23!!
24!
25!>
26
27subroutine read_recovery(icpt)           !---- reprise d'un fichier compteur -----
28
29  use module3D_phy, only: reprcptr,num_forc,time,S,H,B,Bsoc,ibase,bmelt,hwater,uxbar,uybar,T,ux,uy,hmx,hmy,&
30       sdx,sdy,uxflgz,uyflgz,flot,debug_3D
31  use geography, only: dx,dy,nx,ny,nz,nzm
32  use runparam, only: itracebug,tbegin,num_tracebug
33  use io_netcdf_grisli, only: ncdf_type,Read_ncdf_dim,Read_ncdf_var,lect_netcdf_type
34  use tracer_vars, only: xdep_out,ydep_out,tdep_out
35  implicit none
36
37  character(len=20)                  :: titre
38  integer                            :: nzzm
39  integer                            :: icpt  ! icompteur 1->  tout (topo, T, U)
40  !           2 -> tout sauf topo
41  !           3 -> tout sauf topo et eau basale
42
43
44  real,dimension(nx,ny)              :: bidon         !< sert à sauter les lectures de Ss,H,B,...
45
46  ! Variables specifiques pour les fichier .nc
47
48  real*8, dimension(:,:),   pointer  :: tab => null()         !< tableau 2d real ecrit dans le fichier
49  real*8, dimension(:,:,:), pointer  :: tab1  => null()       !< tableau 3d real
50  real*8, dimension(:,:,:), pointer  :: tab1T => null()       !< tableau 3d real pour la temperature
51  real*8, dimension(:),     pointer  :: liste_time => null()
52
53  integer :: ni,nzz,nxx,nyy
54  integer :: i,j
55  real,dimension(nx,ny) :: oldu
56
57  ! rappel de f90
58  ! reprcptr est un string (ici le nom du fichier recovery)
59  ! index (reprcptr,'.cptr')    renvoie :
60  !                 0, si 'cptr' n'est pas dans reprcptr
61  !                 la position de la premiere occurence de cptr sinon
62
63  if (ncdf_type.eq.0) call lect_netcdf_type         !< pour lire la valeur de netcdf_type (machine dependant)
64
65
66  ascii_nc:  if ((index(reprcptr,'.cptr').ne.0) .or.(index(reprcptr,'.CPTR').ne.0))  then   !reprise fichier cptr
67
68     if (itracebug.eq.1)  call tracebug(' Entree dans routine read_recovery : ascii')
69
70     open(num_forc,file=trim(reprcptr))
71     read(num_forc,*) time
72
73
74     ! temps de la reprise
75     !-----------------------
76     if (tbegin.gt.1.d9) then       !    si tbegin est tres grand , on reprend le temps du cptr
77        tbegin=time
78     else
79        time=tbegin
80     endif
81
82
83     read(num_forc,*) titre
84     read(num_forc,*) ni,nzz,nzzm,nxx,nyy
85     read(num_forc,*)
86
87
88     if ((nxx.ne.nx).or.(nyy.ne.ny).or.(nzz.ne.nz)   &
89          .or.(nzzm.ne.nzm)) write(6,*) 'attention', &
90          'les tailles de tableaux ne sont pas compatibles'
91
92     !     lecture des tableaux 2D
93     read(num_forc,*)
94     read(num_forc,*)
95
96     lect_topo:     if (icpt.eq.1) then                     ! lecture topo seulement si icompteur = 1 
97        read(num_forc,*) S
98        read(num_forc,*)
99
100        read(num_forc,*) H
101        read(num_forc,*)
102
103        read(num_forc,*) B
104        read(num_forc,*)
105
106        read(num_forc,*) Bsoc
107        read(num_forc,*)
108
109     else
110        read(num_forc,*) bidon
111        read(num_forc,*)
112
113        read(num_forc,*) bidon
114        read(num_forc,*)
115
116        read(num_forc,*) bidon
117        read(num_forc,*)
118
119        read(num_forc,*) bidon
120        read(num_forc,*)
121
122     end if lect_topo
123
124     ! lecture temperature dans tous les cas     
125     read(num_forc,*) Ibase
126     read(num_forc,*)
127
128     read(num_forc,*) bmelt
129     read(num_forc,*)
130
131     lect_Hwater: if  (icpt.ne.3) then                      ! pas de lecture Hwater si icompteur = 3 
132        read(num_forc,*) Hwater
133        read(num_forc,*)
134     else
135        read(num_forc,*) bidon
136        read(num_forc,*)
137        Hwater(:,:)=0.
138
139     end if lect_Hwater
140
141     ! lecture vitesses dans tous les cas.
142     read(num_forc,*) Uxbar
143     read(num_forc,*)
144
145     read(num_forc,*) Uybar
146
147
148     !     tableaux 3d
149
150     read(num_forc,*)
151     read(num_forc,*)
152
153     read(num_forc,*,end=22) T
15422   continue
155
156     read(num_forc,*,end=23)
157     read(num_forc,*,end=23)
158
159     read(num_forc,*,end=23) Ux
16023   continue
161
162     read(num_forc,*,end=24)
163     read(num_forc,*,end=24)
164
165     read(num_forc,*,end=24) Uy
16624   continue
167
168     ! aurel pour faire des cptr avec les traceurs :
169     read(num_forc,*,end=25)
170     read(num_forc,*,end=25)
171     read(num_forc,*,end=25) Xdep_out  !xdepk ou xdep ? a voir
17225   continue
173
174     read(num_forc,*,end=26)
175     read(num_forc,*,end=26)
176     read(num_forc,*,end=26) Ydep_out
17726   continue
178
179     read(num_forc,*,end=27)
180     read(num_forc,*,end=27)
181     read(num_forc,*,end=27) tdep_out
18227   continue
183     tdep_out(:,:,:)=tdep_out(:,:,:)+time
184
185     close(num_forc)
186
187  else if ((index(reprcptr,'.nc').ne.0)) then      !     Modif hassine pour la reprise d'un fichier .nc
188
189     if (itracebug.eq.1)  call tracebug(' Entree dans routine read_recovery : netcdf')
190
191
192     if (.not.associated(liste_time)) then
193        allocate(liste_time(1)) 
194     end if
195     if (.not.associated(tab)) then
196        allocate(tab(nx,ny),tab1(nx,ny,nz),tab1T(nx,ny,nz+nzm))
197     end if
198
199     call Read_ncdf_var('temps',TRIM(reprcptr),liste_time)
200
201     ! temps de la reprise
202     !-----------------------
203     if (tbegin.gt.1.d9) then       !    si tbegin est tres grand , on reprend le temps du .nc
204        tbegin=liste_time(1)
205        time = tbegin
206     else
207        time = tbegin
208     endif
209
210     if (itracebug.eq.1)   write(num_tracebug,*) tbegin, liste_time(1)
211
212
213     !        TBEGIN=liste_time(1)-liste_time(1)
214
215     call Read_ncdf_dim('x' ,TRIM(reprcptr),nxx)
216     call Read_ncdf_dim('y' ,TRIM(reprcptr),nyy)
217     call Read_ncdf_dim('z' ,TRIM(reprcptr),nzz)
218     call Read_ncdf_dim('zm',TRIM(reprcptr),nzzm)
219
220     if ((nxx.ne.nx).or.(nyy.ne.ny).or.(nzz.ne.nz)       &
221          .or.(nzzm-nzz.ne.nzm)) write(6,*) 'attention', &
222          'les tailles de tableaux ne sont pas compatibles'
223
224     !     lecture des tableaux 2D
225     ! -----------------------------
226
227     if (icpt.eq.1) then                             ! lecture topo seulement si icompteur = 1
228        call Read_ncdf_var('S',TRIM(reprcptr),tab)
229        S(:,:)=tab(:,:)
230        call Read_ncdf_var('H',TRIM(reprcptr),tab)
231        H(:,:)=tab(:,:)
232        call Read_ncdf_var('B',TRIM(reprcptr),tab)
233        B(:,:)=tab(:,:)
234        call Read_ncdf_var('BSOC',TRIM(reprcptr),tab)
235        Bsoc(:,:)=tab(:,:)
236     end if
237
238     ! lecture temperature dans tous les cas     
239     call Read_ncdf_var('IBASE',TRIM(reprcptr),tab)
240     Ibase(:,:)=tab(:,:)
241     call Read_ncdf_var('BMELT',TRIM(reprcptr),tab)
242     Bmelt(:,:)=tab(:,:)
243
244     if (icpt.ne.3) then                            ! pas de lecture Hwater si icompteur = 3
245        call Read_ncdf_var('HWATER',TRIM(reprcptr),tab)
246        Hwater(:,:)=tab(:,:)
247     else
248        Hwater(:,:)=0.
249     end if
250
251     ! lecture vitesses dans tous les cas.
252     call Read_ncdf_var('UXBAR',TRIM(reprcptr),tab)
253     UXBAR(:,:)=tab(:,:)
254     call Read_ncdf_var('UYBAR',TRIM(reprcptr),tab)
255     UYBAR(:,:)=tab(:,:)
256
257     do i=1,nx-1
258        do j=1,ny-1
259           oldu(i,j) = sqrt(((uxbar(i,j)+uxbar(i+1,j))/2)**2 &
260                + ((uybar(i,j)+uybar(i,j+1))/2.)**2)
261        end do
262     end do
263
264     !     tableaux 3D
265     ! -----------------------------
266
267     call Read_ncdf_var('T',TRIM(reprcptr),tab1T)
268     T(:,:,:)=tab1T(:,:,:)
269
270     call Read_ncdf_var('UX',TRIM(reprcptr),tab1)
271     Ux(:,:,:)=tab1(:,:,:)
272
273     call Read_ncdf_var('UY',TRIM(reprcptr),tab1)
274     Uy(:,:,:)=tab1(:,:,:)
275
276     if (itracebug.eq.1)  call tracebug('avant lectures variables traceur')
277
278
279     call Read_ncdf_var('XDEP',TRIM(reprcptr),tab1)  !aurel neem
280     Xdep_out(:,:,:)=tab1(:,:,:)
281
282     call Read_ncdf_var('YDEP',TRIM(reprcptr),tab1)
283     Ydep_out(:,:,:)=tab1(:,:,:)
284
285     call Read_ncdf_var('TDEP',TRIM(reprcptr),tab1)
286     Tdep_out(:,:,:)=tab1(:,:,:)+time
287
288  end if ascii_nc
289
290
291  do i=1,nx-1
292     do j=1,ny-1
293        oldu(i,j) = sqrt(((Uxbar(i,j)+Uxbar(i+1,j))/2)**2 &
294             + ((Uybar(i,j)+Uybar(i,j+1))/2.)**2)
295     end do
296  end do
297
298
299  !    moyenne de l'epaisseur et pentes
300  do j=2,ny
301     do i=2,nx
302        Hmy(i,j)=(H(i,j)+H(i,j-1))/2.
303        Hmx(i,j)=(H(i,j)+H(i-1,j))/2.
304        Sdx(i,j)=(S(i,j)-S(i-1,j))/dx
305        Sdy(i,j)=(S(i,j)-S(i,j-1))/dy
306     end do
307  end do
308
309  do i=2,nx
310     Hmx(i,1)=(H(i,1)+H(i-1,1))/2.
311  end do
312  do j=2,ny
313     Hmy(1,j)=(H(1,j)+H(1,j-1))/2.
314  end do
315
316  ! vitesse a la base
317  Uxflgz(:,:) = Ux(:,:,nz)
318  Uyflgz(:,:) = Uy(:,:,nz)
319
320  where (flot(:,:))
321     debug_3D(:,:,122) = T(:,:,nz)+273.15
322  elsewhere
323     debug_3D(:,:,120) = T(:,:,nz)+273.15
324  endwhere
325
326end subroutine read_recovery
327
328
329!> SUBROUTINE: read_no_recovery
330!!Pas de reprise d'un fichier compteur
331!>
332subroutine  read_no_recovery
333  use module3D_phy
334  implicit none
335  Real,Parameter :: Dzm=600        !< Grid Step In Mantle
336  !Prop Thermique
337  Real,Parameter ::  Cm=1.04e8 
338
339!!!pas reprise : il faut initier les temperatures ds le socle
340
341  !     temperature dans le socle lineaire avec le gradient geothermique
342  do k=nz+1,nz+nzm
343     do j=1,ny
344        do i=1,nx
345           T(i,j,k)=T(i,j,nz)-dzm*(k-nz)*ghf(i,j)/cm
346        end do
347     end do
348  end do
349
350
351end subroutine  read_no_recovery
352
353!----------------------------------------------------------
354
355!----------------------------------------------------------
356
357!> SUBROUTINE: out_recovery
358!! Sortie d'un fichier de reprise
359!! Attention : fichier en sortie .cptr ou fichier .nc
360!! used modules:   - use module3D_phy
361!!                 - use netcdf
362!!                 - use io_netcdf_grisli
363!!                 - use util_recovery
364!!                 - use tracer_vars
365!>
366
367subroutine out_recovery(isortie)
368
369  !   ---------------------------------------------------------------
370  !    SORTIE COMPTEUR
371  !   
372  !   
373  !     sortie qui stocke dans le fichier runname.cptr les variables
374  !     S, H, B, HDOT, BDOT, et T  plusieurs fois dans le programme
375  !     (chaque nouvelle sortie ecrase la precedente) =>
376  !     on peut faire repartir le programme a partir de ce fichier,
377  !     et donc du dernier pas de temps stocke
378  !
379  !     Maintenant, il y a deux formats de fichiers possibles :
380  !     ascii (isortie = 1) et netcdf (isortie = 2).
381  !   ---------------------------------------------------------------
382
383  use module3D_phy, only: num_file1,s,h,b,bsoc,ibase,bmelt,hwater,ux,uy,uxbar,uybar,t,time
384  use runparam, only: itracebug
385  use geography, only: nx,ny,nz,nzm,geoplace
386  use netcdf, only: nf90_64bit_offset,nf90_create,nf90_close,nf90_write
387  use io_netcdf_grisli, only: ncdf_type,write_ncdf_var
388  use util_recovery,only: logic_out,time_out,testout_recovery
389  use tracer_vars,only: xdep,ydep,tdep,xdep_out,ydep_out,tdep_out
390
391  implicit none
392
393  character(len=80) :: filin
394  integer ncid,status
395  real*8, dimension(:,:), pointer   :: tab => null()   !< tableau 2d real ecrit dans le fichier
396  real*8, dimension(:,:,:), pointer :: tab1 => null()  !< tableau 3d real
397  real*8, dimension(:,:,:), pointer :: tab1T => null() !< tableau 3d real pour la temperature
398  character(len=20),dimension(3)    :: dimnames2d      !< dimensions pour netcdf pour tableau 2d pour les noeud majeur
399  character(len=20),dimension(4)    :: dimnames3d      !< pour 3d troisieme dim est nz
400  character(len=20),dimension(4)    :: dimnames3dT     !< pour 3d troisieme dim est nz+nzm
401  !  integer                           :: nrecs=1         !< compteur pour les enregistrements temps des variables 
402  !  integer                           :: idef=0          !< pour savoir si la variable a ete definie ou non
403  integer                           :: isortie         !< pour le choix de type de fichier en sortie
404
405  if (itracebug.eq.1)  call tracebug(' Entree dans routine out_recovery')
406
407  call testout_recovery(filin)
408  if (itracebug.eq.1)  call tracebug(' Entree dans routine out_recovery 2')
409
410  if (logic_out) then
411     Select Case (Isortie)
412     Case (1)                                       ! sortie de type ascii 
413
414        filin=trim(filin)//'.cptr'
415        open(num_file1,file=trim(filin))
416
417        write(num_file1,*) time_out(1), '    TIME '
418        write(num_file1,*) geoplace
419        write(num_file1,*) nx*ny,nz,nzm,nx,ny 
420        write(num_file1,*)
421
422        !     ecriture des tableaux 2D
423        write(num_file1,*)' Tableaux 2D'
424        write(num_file1,*)' Surface '
425        write(num_file1,*) S
426
427        write(num_file1,*)' Epaisseur '
428        write(num_file1,*) H
429
430        write(num_file1,*)' Base glace '
431        write(num_file1,*) B
432
433        write(num_file1,*)' Socle '
434        write(num_file1,*) Bsoc
435
436        write(num_file1,*)' Ibase '
437        write(num_file1,*) Ibase
438
439        write(num_file1,*)' Bmelt '
440        write(num_file1,*) Bmelt
441
442        write(num_file1,*)' Hwater '
443        write(num_file1,*) Hwater
444
445        write(num_file1,*)' Uxbar '
446        write(num_file1,*) Uxbar
447
448        write(num_file1,*)' Uybar '
449        write(num_file1,*) Uybar
450
451        !     tableau 3D
452
453        write(num_file1,*)
454        write(num_file1,*) 'Temperature (3D y compris le socle)'
455        write(num_file1,*) T(:,:,:)
456        write(num_file1,*)
457
458        write(num_file1,*) 'vitesse selon x'
459        write(num_file1,*) Ux(:,:,:)
460        write(num_file1,*)
461
462        write(num_file1,*) 'vitesse selon y'
463        write(num_file1,*) Uy(:,:,:)
464
465        !aurel neem : traceurs dans le cptr
466
467        write(num_file1,*)
468        write(num_file1,*) 'origine de la glace en x'
469        write(num_file1,*) xdep(:,:,:)
470
471        write(num_file1,*)
472        write(num_file1,*) 'origine de la glace en y'
473        write(num_file1,*) ydep(:,:,:)
474
475        write(num_file1,*)
476        write(num_file1,*) 'age de la glace'
477        tab1(:,:,:) = tdep(:,:,:) - time
478        write(num_file1,*) tab1(:,:,:)            ! note: on decide d'ecrire le temps 'relatif'
479
480        close(num_file1)
481
482
483     Case (2)                                     ! sortie de type netcdf
484
485        if (.not.associated(tab)) then
486           allocate(tab(nx,ny),tab1(nx,ny,nz),tab1T(nx,ny,nz+nzm))
487        end if
488        filin=trim(filin)//'.nc'
489
490        ! creation du fichier
491        !------------------------
492
493        if (ncdf_type.eq.32) then
494           status  = nf90_create(TRIM(filin),NF90_WRITE,ncid)    ! en 32 bits
495        else if (ncdf_type.eq.64) then
496           status  = nf90_create(trim(filin),and(nf90_write,nf90_64bit_offset),ncid)   ! sur r2d2
497        else
498           write(6,*)'pb de lecture de netcdf_type dans out_cptr:', ncdf_type
499        endif
500
501        status  = nf90_close(ncid)                            ! fermeture
502
503
504        call initfile(nx,ny,nz,nzm,dimnames2d,dimnames3d,dimnames3dT,filin)   ! initialise le fichier nc
505
506        call write_ncdf_var('temps','time',trim(filin),time_out,'double')     ! ecrit le temps du snapshot
507
508        !       variables 2D
509
510        tab(:,:)= S(:,:)
511        call write_ncdf_var('S',dimnames2d,trim(filin),tab,'double')          ! ecrit S
512
513        tab(:,:)= H(:,:)
514        call write_ncdf_var('H',dimnames2d,trim(filin),tab,'double')         
515
516        tab(:,:)= B(:,:)
517        call write_ncdf_var('B',dimnames2d,trim(filin),tab,'double')
518
519        tab(:,:)= Bsoc(:,:)
520        call write_ncdf_var('BSOC',dimnames2d,trim(filin),tab,'double')
521
522        tab(:,:)= IBASE(:,:)
523        call write_ncdf_var('IBASE',dimnames2d,trim(filin),tab,'double')
524
525        tab(:,:)= Bmelt(:,:)
526        call write_ncdf_var('BMELT',dimnames2d,trim(filin),tab,'double')
527
528        tab(:,:)= Hwater(:,:)
529        call write_ncdf_var('HWATER',dimnames2d,trim(filin),tab,'double')
530
531        tab(:,:)= UXBAR(:,:)
532        call write_ncdf_var('UXBAR',dimnames2d,trim(filin),tab,'double')
533
534        tab(:,:)= UYBAR(:,:)
535        call write_ncdf_var('UYBAR',dimnames2d,trim(filin),tab,'double')
536
537        !       variables 3D
538
539        tab1T(:,:,:)= T(:,:,:)
540        call write_ncdf_var('T',dimnames3dT,trim(filin),tab1T,'double')       ! ecrit T
541
542        tab1(:,:,:)= UX(:,:,:)
543        call write_ncdf_var('UX',dimnames3d,trim(filin),tab1,'double')
544
545        tab1(:,:,:)= UY(:,:,:)
546        call write_ncdf_var('UY',dimnames3d,trim(filin),tab1,'double')
547
548        !       variables 3D  pour les traceurs (Aurel NEEM)
549        !       attention ce sont les tabelaux _out qui ont les bonnes dimensions.
550
551        tab1(:,:,:)=XDEP_out(:,:,:)
552        call write_ncdf_var('XDEP',dimnames3d,trim(filin),tab1,'double')  !aurel neem
553
554        tab1(:,:,:)=YDEP_out(:,:,:)
555        call write_ncdf_var('YDEP',dimnames3d,trim(filin),tab1,'double')
556
557        tab1(:,:,:)=TDEP_out(:,:,:) - time
558        call write_ncdf_var('TDEP',dimnames3d,trim(filin),tab1,'double')
559
560
561     End Select
562  End if
563end subroutine out_recovery
564
565!> subroutine initfile
566!! Initialise the netcdf file
567!! Used module:   - use netcdf
568!!                - use io_netcdf_grisli
569!! @param nxx                dimension along x
570!! @param nyy                dimension along y
571!! @param nzz                dimension along z
572!! @param nzmm               dimension along z for T
573!! @param fil_sortie         name of the file to initialise
574!! @param dimnames2d         dimensions for netcdf
575!>
576subroutine initfile(nxx,nyy,nzz,nzmm,&
577     dimnames2d,dimnames3d,dimnames3dT,file)
578
579  use io_netcdf_grisli, only: write_ncdf_dim
580  implicit none
581  integer,intent(in)             :: nxx               !< dimension along x
582  integer,intent(in)             :: nyy               !< dimension along y
583  integer,intent(in)             :: nzz               !< dimension along z
584  integer,intent(in)             :: nzmm              !< dimension along z in socle
585  character(len=20),dimension(3) :: dimnames2d        !< dimensions pour netcdf pour tableau 2d pour les noeud majeur
586  character(len=20),dimension(4) :: dimnames3d        !< pour 3d troisieme dim est nz
587  character(len=20),dimension(4) :: dimnames3dT       !< pour 3d troisieme dim est nz+nzm
588  character(len=*)               ::file               !< name of the file to init
589  ! initialisation
590  call write_ncdf_dim('x',trim(file),nxx)             !< dimensions des tableaux
591  call write_ncdf_dim('y',trim(file),nyy)
592  call write_ncdf_dim('z',trim(file),nzz)
593  call write_ncdf_dim('zm',trim(file),nzz+nzmm)
594  call write_ncdf_dim('time',trim(file),0)
595  dimnames2d(1)='x'
596  dimnames2d(2)='y'
597  dimnames2d(3)='time' 
598
599  dimnames3d(1)='x'
600  dimnames3d(2)='y'
601  dimnames3d(3)='z'
602  dimnames3d(4)='time' 
603
604  dimnames3dT(1)='x'
605  dimnames3dT(2)='y'
606  dimnames3dT(3)='zm'
607  dimnames3dT(4)='time' 
608
609end subroutine initfile
610
611
612!> SUBROUTINE: symetry_cptr
613!! Subroutine utilisee dans les experiences axysymetriques pour repartir d'un cptr dans lequel
614!! tous les champs sont axysmetriques ou symetriques par rapport a un axe
615!! Used module:      - use module3D_phy
616!! @param    iaxe    symetrie par rapport a iaxe
617!! @param    jaxe    symetrie par rapport a jaxe
618!>
619
620subroutine symetry_cptr(jaxe)
621  use module3D_phy
622  use tracer_vars
623  implicit none
624  integer :: jaxe
625  integer :: jsym
626
627  !symetrique par rapport à jaxe la référence est le bas. Pour l'instant seulement lui
628  jsym=0
629  do j=jaxe+1,ny
630     jsym=jsym+1
631
632     do i=1,nx
633        S(i,j)=S(i,jaxe-jsym)
634        H(i,j)=H(i,jaxe-jsym)
635        B(i,j)=B(i,jaxe-jsym)
636        Bsoc(i,j)=Bsoc(i,jaxe-jsym)
637        Ibase(i,j)=Ibase(i,jaxe-jsym)
638        Bmelt(i,j)=bmelt(i,jaxe-jsym)
639        hwater(i,j)=hwater(i,jaxe-jsym)
640        uxbar(i,j)=uxbar(i,jaxe-jsym)
641        uybar(i,j)=-uybar(i,jaxe-jsym+1)        ! attention different des autres
642        ! a cause des staggered grids
643
644        T(i,j,:)=T(i,jaxe-jsym,:)
645        ux(i,j,:)=ux(i,jaxe-jsym,:)
646        uy(i,j,:)=-uy(i,jaxe-jsym+1,:)          ! different des autres
647
648        XDEP(i,j,:)=XDEP(i,jaxe-jsym,:)
649        YDEP(i,j,:)=YDEP(i,jaxe-jsym,:)
650        TDEP(i,j,:)=TDEP(i,jaxe-jsym,:)
651
652     end do
653  end do
654  return
655end subroutine symetry_cptr
Note: See TracBrowser for help on using the repository browser.