source: trunk/SOURCES/out_cptr_mod.f90 @ 111

Last change on this file since 111 was 65, checked in by dumas, 8 years ago

Deleting unused variables and move old sources

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