Changeset 5120


Ignore:
Timestamp:
Jul 24, 2024, 7:06:44 PM (6 weeks ago)
Author:
abarral
Message:

enforce PRIVATE by default in several modules, expose PUBLIC as needed in filtrez/

Location:
LMDZ6/branches/Amaury_dev/libf
Files:
6 edited
3 moved

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Amaury_dev/libf/dyn3dmem/conf_gcm.F90

    r5118 r5120  
    77  USE IOIPSL
    88  USE misc_mod
    9   USE mod_filtre_fft, ONLY: use_filtre_fft
    10   USE mod_filtre_fft_loc, ONLY: use_filtre_fft_loc=>use_filtre_fft
     9  USE lmdz_filtre_fft, ONLY: use_filtre_fft
     10  USE lmdz_filtre_fft_loc, ONLY: use_filtre_fft_loc=>use_filtre_fft
    1111  USE mod_hallo, ONLY: use_mpi_alloc
    1212  USE infotrac, ONLY: type_trac
  • LMDZ6/branches/Amaury_dev/libf/dyn3dmem/filtreg_p.F90

    r5117 r5120  
    55        ifiltre, iaire, griscal ,iter)
    66  USE parallel_lmdz, ONLY: OMP_CHUNK
    7   USE mod_filtre_fft
    8   USE lmdz_timer_filtre
     7  USE lmdz_filtre_fft, ONLY: use_filtre_fft, filtre_u_fft, filtre_v_fft, filtre_inv_fft
     8  USE lmdz_timer_filtre, ONLY: init_timer, start_timer, stop_timer
    99  USE lmdz_coefils, ONLY: jfiltnu, jfiltnv, jfiltsu, jfiltsv, sddu, sddv, unsddu, unsddv, modfrstv, modfrstu
    1010  USE lmdz_filtreg, ONLY: matrinvn, matrinvs, matriceun, matriceus, matricevn, matricevs
  • LMDZ6/branches/Amaury_dev/libf/dyn3dmem/lmdz_filtreg_p.F90

    r5117 r5120  
    1010          ifiltre, iaire, griscal, iter)
    1111    USE parallel_lmdz, ONLY: OMP_CHUNK
    12     USE mod_filtre_fft_loc, ONLY: use_filtre_fft, filtre_u_fft, &
     12    USE lmdz_filtre_fft_loc, ONLY: use_filtre_fft, filtre_u_fft, &
    1313            filtre_v_fft, filtre_inv_fft
    1414    USE lmdz_timer_filtre, ONLY: init_timer, start_timer, stop_timer
  • LMDZ6/branches/Amaury_dev/libf/filtrez/lmdz_fft_wrapper.f90

    r5107 r5120  
    11MODULE lmdz_fft_wrapper
     2  IMPLICIT NONE; PRIVATE
     3  PUBLIC vsize, inc, init_fft, fft_forward, fft_backward
    24
    35  INTEGER,SAVE             :: vsize
     
    68CONTAINS
    79 
    8   SUBROUTINE Init_fft(iim,nb)
     10  SUBROUTINE init_fft(iim,nb)
    911  IMPLICIT NONE
    1012    INTEGER :: iim
     
    1315    print *, "wrapper fft : une FFT doit etre specifiee a l'aide d'une clee CPP, sinon utiliser le filtre classique"
    1416    stop 1
    15   END SUBROUTINE Init_fft
     17  END SUBROUTINE init_fft
    1618 
    1719 
  • LMDZ6/branches/Amaury_dev/libf/filtrez/lmdz_filtre_fft.F90

    r5119 r5120  
    22! $Id$
    33
    4 MODULE mod_filtre_fft
    5 
    6   LOGICAL,SAVE :: use_filtre_fft
    7   REAL,SAVE,ALLOCATABLE :: Filtre_u(:,:)
    8   REAL,SAVE,ALLOCATABLE :: Filtre_v(:,:)
    9   REAL,SAVE,ALLOCATABLE :: Filtre_inv(:,:)
     4MODULE lmdz_filtre_fft
     5  IMPLICIT NONE; PRIVATE
     6  PUBLIC use_filtre_fft, filtre_u, filtre_v, filtre_inv, init_filtre_fft, filtre_u_fft, &
     7          filtre_v_fft, filtre_inv_fft
     8
     9  LOGICAL :: use_filtre_fft
     10  REAL,ALLOCATABLE :: filtre_u(:,:)
     11  REAL,ALLOCATABLE :: filtre_v(:,:)
     12  REAL,ALLOCATABLE :: filtre_inv(:,:)
    1013
    1114CONTAINS
    1215 
    13   SUBROUTINE Init_filtre_fft(coeffu,modfrstu,jfiltnu,jfiltsu,coeffv,modfrstv,jfiltnv,jfiltsv)
     16  SUBROUTINE init_filtre_fft(coeffu,modfrstu,jfiltnu,jfiltsu,coeffv,modfrstv,jfiltnv,jfiltsv)
    1417    USE lmdz_fft
    1518    IMPLICIT NONE
     
    3740    ENDDO
    3841   
    39     ALLOCATE(Filtre_u(iim,jjm))
    40     ALLOCATE(Filtre_v(iim,jjm))
    41     ALLOCATE(Filtre_inv(iim,jjm))
     42    ALLOCATE(filtre_u(iim,jjm))
     43    ALLOCATE(filtre_v(iim,jjm))
     44    ALLOCATE(filtre_inv(iim,jjm))
    4245 
    4346   
     
    4548      DO i=1,iim
    4649        IF (index_vp(i) < modfrstu(j)) THEN
    47           Filtre_u(i,j)=0
    48         ELSE
    49           Filtre_u(i,j)=coeffu(index_vp(i),j)
     50          filtre_u(i,j)=0
     51        ELSE
     52          filtre_u(i,j)=coeffu(index_vp(i),j)
    5053        ENDIF
    5154      ENDDO
     
    5558      DO i=1,iim
    5659        IF (index_vp(i) < modfrstu(j)) THEN
    57           Filtre_u(i,j)=0
    58         ELSE
    59           Filtre_u(i,j)=coeffu(index_vp(i),j)
     60          filtre_u(i,j)=0
     61        ELSE
     62          filtre_u(i,j)=coeffu(index_vp(i),j)
    6063        ENDIF
    6164      ENDDO
     
    6568      DO i=1,iim
    6669        IF (index_vp(i) < modfrstv(j)) THEN
    67           Filtre_v(i,j)=0
    68         ELSE
    69           Filtre_v(i,j)=coeffv(index_vp(i),j)
     70          filtre_v(i,j)=0
     71        ELSE
     72          filtre_v(i,j)=coeffv(index_vp(i),j)
    7073        ENDIF
    7174      ENDDO
     
    7578      DO i=1,iim
    7679        IF (index_vp(i) < modfrstv(j)) THEN
    77           Filtre_v(i,j)=0
    78         ELSE
    79           Filtre_v(i,j)=coeffv(index_vp(i),j)
     80          filtre_v(i,j)=0
     81        ELSE
     82          filtre_v(i,j)=coeffv(index_vp(i),j)
    8083        ENDIF
    8184      ENDDO
     
    8588      DO i=1,iim
    8689        IF (index_vp(i) < modfrstu(j)) THEN
    87           Filtre_inv(i,j)=0
    88         ELSE
    89           Filtre_inv(i,j)=coeffu(index_vp(i),j)/(1.+coeffu(index_vp(i),j))
     90          filtre_inv(i,j)=0
     91        ELSE
     92          filtre_inv(i,j)=coeffu(index_vp(i),j)/(1.+coeffu(index_vp(i),j))
    9093        ENDIF
    9194      ENDDO
     
    9598      DO i=1,iim
    9699        IF (index_vp(i) < modfrstu(j)) THEN
    97           Filtre_inv(i,j)=0
    98         ELSE
    99           Filtre_inv(i,j)=coeffu(index_vp(i),j)/(1.+coeffu(index_vp(i),j))
     100          filtre_inv(i,j)=0
     101        ELSE
     102          filtre_inv(i,j)=coeffu(index_vp(i),j)/(1.+coeffu(index_vp(i),j))
    100103        ENDIF
    101104      ENDDO
     
    107110    WRITE (*,*)jfiltnu,jfiltsu,jfiltnv,jjm-jfiltsv
    108111    WRITE (*,*)MAX(jfiltnu-2,jjm-jfiltsu,jfiltnv-2,jjm-jfiltsv)+1
    109     CALL Init_FFT(iim,(llm+1)*(MAX(jfiltnu-2,jjm-jfiltsu,jfiltnv-2,jjm-jfiltsv)+1))
     112    CALL init_FFT(iim,(llm+1)*(MAX(jfiltnu-2,jjm-jfiltsu,jfiltnv-2,jjm-jfiltsv)+1))
    110113#else   
    111     CALL Init_FFT(iim,(jjm+1)*(llm+1))
     114    CALL init_FFT(iim,(jjm+1)*(llm+1))
    112115#endif       
    113116   
    114   END SUBROUTINE Init_filtre_fft
    115  
    116   SUBROUTINE Filtre_u_fft(vect_inout,nlat,jj_begin,jj_end,nbniv)
     117  END SUBROUTINE init_filtre_fft
     118 
     119  SUBROUTINE filtre_u_fft(vect_inout,nlat,jj_begin,jj_end,nbniv)
    117120    USE lmdz_fft
    118121#ifdef CPP_PARA
     
    152155      DO j=1,jj_end-jj_begin+1
    153156        DO i=1,iim/2+1
    154           TF_vect(i,j,l)=TF_vect(i,j,l)*Filtre_u(i,jj_begin+j-1)
     157          TF_vect(i,j,l)=TF_vect(i,j,l)*filtre_u(i,jj_begin+j-1)
    155158        ENDDO
    156159      ENDDO
     
    172175!$OMP END DO NOWAIT
    173176
    174   END SUBROUTINE Filtre_u_fft
    175  
    176 
    177   SUBROUTINE Filtre_v_fft(vect_inout,nlat,jj_begin,jj_end,nbniv)
     177  END SUBROUTINE filtre_u_fft
     178
     179  SUBROUTINE filtre_v_fft(vect_inout,nlat,jj_begin,jj_end,nbniv)
    178180    USE lmdz_fft
    179181#ifdef CPP_PARA
     
    214216      DO j=1,jj_end-jj_begin+1
    215217        DO i=1,iim/2+1
    216           TF_vect(i,j,l)=TF_vect(i,j,l)*Filtre_v(i,jj_begin+j-1)
     218          TF_vect(i,j,l)=TF_vect(i,j,l)*filtre_v(i,jj_begin+j-1)
    217219        ENDDO
    218220      ENDDO
     
    234236!$OMP END DO NOWAIT
    235237 
    236   END SUBROUTINE Filtre_v_fft
    237 
    238 
    239   SUBROUTINE Filtre_inv_fft(vect_inout,nlat,jj_begin,jj_end,nbniv)
     238  END SUBROUTINE filtre_v_fft
     239
     240  SUBROUTINE filtre_inv_fft(vect_inout,nlat,jj_begin,jj_end,nbniv)
    240241    USE lmdz_fft
    241242#ifdef CPP_PARA
     
    275276      DO j=1,jj_end-jj_begin+1
    276277        DO i=1,iim/2+1
    277           TF_vect(i,j,l)=TF_vect(i,j,l)*Filtre_inv(i,jj_begin+j-1)
     278          TF_vect(i,j,l)=TF_vect(i,j,l)*filtre_inv(i,jj_begin+j-1)
    278279        ENDDO
    279280      ENDDO
     
    294295!$OMP END DO NOWAIT
    295296
    296   END SUBROUTINE Filtre_inv_fft 
     297  END SUBROUTINE filtre_inv_fft 
    297298   
    298 END MODULE mod_filtre_fft
     299END MODULE lmdz_filtre_fft
    299300 
  • LMDZ6/branches/Amaury_dev/libf/filtrez/lmdz_filtre_fft_loc.f90

    r5119 r5120  
    1 MODULE mod_filtre_fft_loc
    2 
    3   LOGICAL,SAVE :: use_filtre_fft
    4   REAL,SAVE,ALLOCATABLE :: Filtre_u(:,:)
    5   REAL,SAVE,ALLOCATABLE :: Filtre_v(:,:)
    6   REAL,SAVE,ALLOCATABLE :: Filtre_inv(:,:)
     1MODULE lmdz_filtre_fft_loc
     2  IMPLICIT NONE; PRIVATE
     3  PUBLIC use_filtre_fft, filtre_u, filtre_v, filtre_inv, init_filtre_fft, filtre_u_fft, &
     4          filtre_v_fft, filtre_inv_fft
     5
     6  LOGICAL, SAVE :: use_filtre_fft
     7  REAL, SAVE, ALLOCATABLE :: Filtre_u(:, :)
     8  REAL, SAVE, ALLOCATABLE :: Filtre_v(:, :)
     9  REAL, SAVE, ALLOCATABLE :: Filtre_inv(:, :)
    710
    811CONTAINS
    9  
    10   SUBROUTINE Init_filtre_fft(coeffu,modfrstu,jfiltnu,jfiltsu,coeffv,modfrstv,jfiltnv,jfiltsv)
     12
     13  SUBROUTINE Init_filtre_fft(coeffu, modfrstu, jfiltnu, jfiltsu, coeffv, modfrstv, jfiltnv, jfiltsv)
    1114    USE lmdz_fft
    1215    IMPLICIT NONE
    1316    include 'dimensions.h'
    14     REAL,   INTENT(IN) :: coeffu(iim,jjm)
    15     INTEGER,INTENT(IN) :: modfrstu(jjm)
    16     INTEGER,INTENT(IN) :: jfiltnu
    17     INTEGER,INTENT(IN) :: jfiltsu
    18     REAL,   INTENT(IN) :: coeffv(iim,jjm)
    19     INTEGER,INTENT(IN) :: modfrstv(jjm)
    20     INTEGER,INTENT(IN) :: jfiltnv
    21     INTEGER,INTENT(IN) :: jfiltsv
    22    
    23     INTEGER            :: index_vp(iim)
    24     INTEGER            :: i,j
    25    
    26     index_vp(1)=1
    27     DO i=1,iim/2
    28       index_vp(i+1)=i*2
    29     ENDDO
    30    
    31     DO i=1,iim/2-1
    32       index_vp(iim/2+i+1)=iim-2*i+1
    33     ENDDO
    34    
    35     ALLOCATE(Filtre_u(iim,jjm))
    36     ALLOCATE(Filtre_v(iim,jjm))
    37     ALLOCATE(Filtre_inv(iim,jjm))
    38  
    39    
    40     DO j=2,jfiltnu
    41       DO i=1,iim
     17    REAL, INTENT(IN) :: coeffu(iim, jjm)
     18    INTEGER, INTENT(IN) :: modfrstu(jjm)
     19    INTEGER, INTENT(IN) :: jfiltnu
     20    INTEGER, INTENT(IN) :: jfiltsu
     21    REAL, INTENT(IN) :: coeffv(iim, jjm)
     22    INTEGER, INTENT(IN) :: modfrstv(jjm)
     23    INTEGER, INTENT(IN) :: jfiltnv
     24    INTEGER, INTENT(IN) :: jfiltsv
     25
     26    INTEGER :: index_vp(iim)
     27    INTEGER :: i, j
     28
     29    index_vp(1) = 1
     30    DO i = 1, iim / 2
     31      index_vp(i + 1) = i * 2
     32    ENDDO
     33
     34    DO i = 1, iim / 2 - 1
     35      index_vp(iim / 2 + i + 1) = iim - 2 * i + 1
     36    ENDDO
     37
     38    ALLOCATE(Filtre_u(iim, jjm))
     39    ALLOCATE(Filtre_v(iim, jjm))
     40    ALLOCATE(Filtre_inv(iim, jjm))
     41
     42    DO j = 2, jfiltnu
     43      DO i = 1, iim
    4244        IF (index_vp(i) < modfrstu(j)) THEN
    43           Filtre_u(i,j)=0
    44         ELSE
    45           Filtre_u(i,j)=coeffu(index_vp(i),j)
    46         ENDIF
    47       ENDDO
    48     ENDDO
    49    
    50     DO j=jfiltsu,jjm
    51       DO i=1,iim
     45          Filtre_u(i, j) = 0
     46        ELSE
     47          Filtre_u(i, j) = coeffu(index_vp(i), j)
     48        ENDIF
     49      ENDDO
     50    ENDDO
     51
     52    DO j = jfiltsu, jjm
     53      DO i = 1, iim
    5254        IF (index_vp(i) < modfrstu(j)) THEN
    53           Filtre_u(i,j)=0
    54         ELSE
    55           Filtre_u(i,j)=coeffu(index_vp(i),j)
    56         ENDIF
    57       ENDDO
    58     ENDDO
    59  
    60     DO j=1,jfiltnv
    61       DO i=1,iim
     55          Filtre_u(i, j) = 0
     56        ELSE
     57          Filtre_u(i, j) = coeffu(index_vp(i), j)
     58        ENDIF
     59      ENDDO
     60    ENDDO
     61
     62    DO j = 1, jfiltnv
     63      DO i = 1, iim
    6264        IF (index_vp(i) < modfrstv(j)) THEN
    63           Filtre_v(i,j)=0
    64         ELSE
    65           Filtre_v(i,j)=coeffv(index_vp(i),j)
    66         ENDIF
    67       ENDDO
    68     ENDDO
    69    
    70     DO j=jfiltsv,jjm
    71       DO i=1,iim
     65          Filtre_v(i, j) = 0
     66        ELSE
     67          Filtre_v(i, j) = coeffv(index_vp(i), j)
     68        ENDIF
     69      ENDDO
     70    ENDDO
     71
     72    DO j = jfiltsv, jjm
     73      DO i = 1, iim
    7274        IF (index_vp(i) < modfrstv(j)) THEN
    73           Filtre_v(i,j)=0
    74         ELSE
    75           Filtre_v(i,j)=coeffv(index_vp(i),j)
    76         ENDIF
    77       ENDDO
    78     ENDDO
    79          
    80     DO j=2,jfiltnu
    81       DO i=1,iim
     75          Filtre_v(i, j) = 0
     76        ELSE
     77          Filtre_v(i, j) = coeffv(index_vp(i), j)
     78        ENDIF
     79      ENDDO
     80    ENDDO
     81
     82    DO j = 2, jfiltnu
     83      DO i = 1, iim
    8284        IF (index_vp(i) < modfrstu(j)) THEN
    83           Filtre_inv(i,j)=0
    84         ELSE
    85           Filtre_inv(i,j)=coeffu(index_vp(i),j)/(1.+coeffu(index_vp(i),j))
    86         ENDIF
    87       ENDDO
    88     ENDDO
    89 
    90     DO j=jfiltsu,jjm
    91       DO i=1,iim
     85          Filtre_inv(i, j) = 0
     86        ELSE
     87          Filtre_inv(i, j) = coeffu(index_vp(i), j) / (1. + coeffu(index_vp(i), j))
     88        ENDIF
     89      ENDDO
     90    ENDDO
     91
     92    DO j = jfiltsu, jjm
     93      DO i = 1, iim
    9294        IF (index_vp(i) < modfrstu(j)) THEN
    93           Filtre_inv(i,j)=0
    94         ELSE
    95           Filtre_inv(i,j)=coeffu(index_vp(i),j)/(1.+coeffu(index_vp(i),j))
    96         ENDIF
    97       ENDDO
    98     ENDDO
    99    
    100    
    101 !    CALL Init_FFT(iim,(jjm+1)*(llm+1))
    102        
    103    
     95          Filtre_inv(i, j) = 0
     96        ELSE
     97          Filtre_inv(i, j) = coeffu(index_vp(i), j) / (1. + coeffu(index_vp(i), j))
     98        ENDIF
     99      ENDDO
     100    ENDDO
     101
     102
     103    !    CALL Init_FFT(iim,(jjm+1)*(llm+1))
     104
    104105  END SUBROUTINE Init_filtre_fft
    105  
    106   SUBROUTINE Filtre_u_fft(vect_inout,jjb,jje,jj_begin,jj_end,nbniv)
     106
     107  SUBROUTINE Filtre_u_fft(vect_inout, jjb, jje, jj_begin, jj_end, nbniv)
    107108    USE lmdz_fft
    108109#ifdef CPP_PARA
     
    111112    IMPLICIT NONE
    112113    include 'dimensions.h'
    113     INTEGER,INTENT(IN) :: jjb
    114     INTEGER,INTENT(IN) :: jje
    115     INTEGER,INTENT(IN) :: jj_begin
    116     INTEGER,INTENT(IN) :: jj_end
    117     INTEGER,INTENT(IN) :: nbniv
    118     REAL,INTENT(INOUT) :: vect_inout(iim+1,jjb:jje,nbniv)
    119 
    120     REAL               :: vect(iim+inc,jj_end-jj_begin+1,nbniv)
    121     COMPLEX            :: TF_vect(iim/2+1,jj_end-jj_begin+1,nbniv)
    122     INTEGER            :: nb_vect
    123     INTEGER :: i,j,l
     114    INTEGER, INTENT(IN) :: jjb
     115    INTEGER, INTENT(IN) :: jje
     116    INTEGER, INTENT(IN) :: jj_begin
     117    INTEGER, INTENT(IN) :: jj_end
     118    INTEGER, INTENT(IN) :: nbniv
     119    REAL, INTENT(INOUT) :: vect_inout(iim + 1, jjb:jje, nbniv)
     120
     121    REAL :: vect(iim + inc, jj_end - jj_begin + 1, nbniv)
     122    COMPLEX :: TF_vect(iim / 2 + 1, jj_end - jj_begin + 1, nbniv)
     123    INTEGER :: nb_vect
     124    INTEGER :: i, j, l
    124125    INTEGER :: ll_nb
    125 !    REAL               :: vect_tmp(iim+inc,jj_end-jj_begin+1,nbniv)
    126    
    127     ll_nb=0
    128 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    129     DO l=1,nbniv
    130       ll_nb=ll_nb+1
    131       DO j=1,jj_end-jj_begin+1
    132         DO i=1,iim+1
    133           vect(i,j,ll_nb)=vect_inout(i,j+jj_begin-1,l)
    134         ENDDO
    135       ENDDO
    136     ENDDO
    137 !$OMP END DO NOWAIT
    138 
    139     nb_vect=(jj_end-jj_begin+1)*ll_nb
    140 
    141 !    vect_tmp=vect
    142 
    143     CALL FFT_forward(vect,TF_vect,nb_vect)
    144 
    145 !    CALL FFT_forward(vect,TF_vect_test,nb_vect)
    146 !      PRINT *,"XXXXXXXXXXXXX Filtre_u_FFT xxxxxxxxxxxx"
    147 !      DO j=1,jj_end-jj_begin+1
    148 !      DO i=1,iim/2+1
    149 !         PRINT *,"====",i,j,"----->",TF_vect_test(i,j,1)
    150 !       ENDDO
    151 !      ENDDO
    152 
    153     DO l=1,ll_nb
    154       DO j=1,jj_end-jj_begin+1
    155         DO i=1,iim/2+1
    156           TF_vect(i,j,l)=TF_vect(i,j,l)*Filtre_u(i,jj_begin+j-1)
    157         ENDDO
    158       ENDDO
    159     ENDDO
    160        
    161     CALL FFT_backward(TF_vect,vect,nb_vect)
    162 !    CALL FFT_backward(TF_vect_test,vect_test,nb_vect)
    163          
    164 !      PRINT *,"XXXXXXXXXXXXX Filtre_u_FFT xxxxxxxxxxxx"
    165 !      DO j=1,jj_end-jj_begin+1
    166 !         DO i=1,iim
    167 !           PRINT *,"====",i,j,"----->",vect_test(i,j,1)
    168 !         ENDDO
    169 !      ENDDO
    170 
    171     ll_nb=0
    172 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    173     DO l=1,nbniv
    174       ll_nb=ll_nb+1
    175       DO j=1,jj_end-jj_begin+1
    176         DO i=1,iim+1
    177           vect_inout(i,j+jj_begin-1,l)=vect(i,j,ll_nb)
    178         ENDDO
    179       ENDDO
    180     ENDDO
    181 !$OMP END DO NOWAIT
     126    !    REAL               :: vect_tmp(iim+inc,jj_end-jj_begin+1,nbniv)
     127
     128    ll_nb = 0
     129    !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     130    DO l = 1, nbniv
     131      ll_nb = ll_nb + 1
     132      DO j = 1, jj_end - jj_begin + 1
     133        DO i = 1, iim + 1
     134          vect(i, j, ll_nb) = vect_inout(i, j + jj_begin - 1, l)
     135        ENDDO
     136      ENDDO
     137    ENDDO
     138    !$OMP END DO NOWAIT
     139
     140    nb_vect = (jj_end - jj_begin + 1) * ll_nb
     141
     142    !    vect_tmp=vect
     143
     144    CALL FFT_forward(vect, TF_vect, nb_vect)
     145
     146    !    CALL FFT_forward(vect,TF_vect_test,nb_vect)
     147    !      PRINT *,"XXXXXXXXXXXXX Filtre_u_FFT xxxxxxxxxxxx"
     148    !      DO j=1,jj_end-jj_begin+1
     149    !      DO i=1,iim/2+1
     150    !         PRINT *,"====",i,j,"----->",TF_vect_test(i,j,1)
     151    !       ENDDO
     152    !      ENDDO
     153
     154    DO l = 1, ll_nb
     155      DO j = 1, jj_end - jj_begin + 1
     156        DO i = 1, iim / 2 + 1
     157          TF_vect(i, j, l) = TF_vect(i, j, l) * Filtre_u(i, jj_begin + j - 1)
     158        ENDDO
     159      ENDDO
     160    ENDDO
     161
     162    CALL FFT_backward(TF_vect, vect, nb_vect)
     163    !    CALL FFT_backward(TF_vect_test,vect_test,nb_vect)
     164
     165    !      PRINT *,"XXXXXXXXXXXXX Filtre_u_FFT xxxxxxxxxxxx"
     166    !      DO j=1,jj_end-jj_begin+1
     167    !         DO i=1,iim
     168    !           PRINT *,"====",i,j,"----->",vect_test(i,j,1)
     169    !         ENDDO
     170    !      ENDDO
     171
     172    ll_nb = 0
     173    !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     174    DO l = 1, nbniv
     175      ll_nb = ll_nb + 1
     176      DO j = 1, jj_end - jj_begin + 1
     177        DO i = 1, iim + 1
     178          vect_inout(i, j + jj_begin - 1, l) = vect(i, j, ll_nb)
     179        ENDDO
     180      ENDDO
     181    ENDDO
     182    !$OMP END DO NOWAIT
    182183
    183184  END SUBROUTINE Filtre_u_fft
    184  
    185 
    186   SUBROUTINE Filtre_v_fft(vect_inout,jjb,jje,jj_begin,jj_end,nbniv)
     185
     186
     187  SUBROUTINE Filtre_v_fft(vect_inout, jjb, jje, jj_begin, jj_end, nbniv)
    187188    USE lmdz_fft
    188189#ifdef CPP_PARA
     
    191192    IMPLICIT NONE
    192193    INCLUDE 'dimensions.h'
    193     INTEGER,INTENT(IN) :: jjb
    194     INTEGER,INTENT(IN) :: jje
    195     INTEGER,INTENT(IN) :: jj_begin
    196     INTEGER,INTENT(IN) :: jj_end
    197     INTEGER,INTENT(IN) :: nbniv
    198     REAL,INTENT(INOUT) :: vect_inout(iim+1,jjb:jje,nbniv)
    199 
    200     REAL               :: vect(iim+inc,jj_end-jj_begin+1,nbniv)
    201     COMPLEX            :: TF_vect(iim/2+1,jj_end-jj_begin+1,nbniv)
    202     INTEGER            :: nb_vect
    203     INTEGER :: i,j,l
     194    INTEGER, INTENT(IN) :: jjb
     195    INTEGER, INTENT(IN) :: jje
     196    INTEGER, INTENT(IN) :: jj_begin
     197    INTEGER, INTENT(IN) :: jj_end
     198    INTEGER, INTENT(IN) :: nbniv
     199    REAL, INTENT(INOUT) :: vect_inout(iim + 1, jjb:jje, nbniv)
     200
     201    REAL :: vect(iim + inc, jj_end - jj_begin + 1, nbniv)
     202    COMPLEX :: TF_vect(iim / 2 + 1, jj_end - jj_begin + 1, nbniv)
     203    INTEGER :: nb_vect
     204    INTEGER :: i, j, l
    204205    INTEGER :: ll_nb
    205    
    206     ll_nb=0
    207 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    208     DO l=1,nbniv
    209       ll_nb=ll_nb+1
    210       DO j=1,jj_end-jj_begin+1
    211         DO i=1,iim+1
    212           vect(i,j,ll_nb)=vect_inout(i,j+jj_begin-1,l)
    213         ENDDO
    214       ENDDO
    215     ENDDO
    216 !$OMP END DO NOWAIT
    217 
    218    
    219     nb_vect=(jj_end-jj_begin+1)*ll_nb
    220 
    221     CALL FFT_forward(vect,TF_vect,nb_vect)
    222  
    223     DO l=1,ll_nb
    224       DO j=1,jj_end-jj_begin+1
    225         DO i=1,iim/2+1
    226           TF_vect(i,j,l)=TF_vect(i,j,l)*Filtre_v(i,jj_begin+j-1)
    227         ENDDO
    228       ENDDO
    229     ENDDO
    230  
    231     CALL FFT_backward(TF_vect,vect,nb_vect)
    232    
    233    
    234     ll_nb=0
    235 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    236     DO l=1,nbniv
    237       ll_nb=ll_nb+1
    238       DO j=1,jj_end-jj_begin+1
    239         DO i=1,iim+1
    240           vect_inout(i,j+jj_begin-1,l)=vect(i,j,ll_nb)
    241         ENDDO
    242       ENDDO
    243     ENDDO
    244 !$OMP END DO NOWAIT
    245  
     206
     207    ll_nb = 0
     208    !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     209    DO l = 1, nbniv
     210      ll_nb = ll_nb + 1
     211      DO j = 1, jj_end - jj_begin + 1
     212        DO i = 1, iim + 1
     213          vect(i, j, ll_nb) = vect_inout(i, j + jj_begin - 1, l)
     214        ENDDO
     215      ENDDO
     216    ENDDO
     217    !$OMP END DO NOWAIT
     218
     219    nb_vect = (jj_end - jj_begin + 1) * ll_nb
     220
     221    CALL FFT_forward(vect, TF_vect, nb_vect)
     222
     223    DO l = 1, ll_nb
     224      DO j = 1, jj_end - jj_begin + 1
     225        DO i = 1, iim / 2 + 1
     226          TF_vect(i, j, l) = TF_vect(i, j, l) * Filtre_v(i, jj_begin + j - 1)
     227        ENDDO
     228      ENDDO
     229    ENDDO
     230
     231    CALL FFT_backward(TF_vect, vect, nb_vect)
     232
     233    ll_nb = 0
     234    !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     235    DO l = 1, nbniv
     236      ll_nb = ll_nb + 1
     237      DO j = 1, jj_end - jj_begin + 1
     238        DO i = 1, iim + 1
     239          vect_inout(i, j + jj_begin - 1, l) = vect(i, j, ll_nb)
     240        ENDDO
     241      ENDDO
     242    ENDDO
     243    !$OMP END DO NOWAIT
     244
    246245  END SUBROUTINE Filtre_v_fft
    247246
    248247
    249   SUBROUTINE Filtre_inv_fft(vect_inout,jjb,jje,jj_begin,jj_end,nbniv)
     248  SUBROUTINE Filtre_inv_fft(vect_inout, jjb, jje, jj_begin, jj_end, nbniv)
    250249    USE lmdz_fft
    251250#ifdef CPP_PARA
     
    254253    IMPLICIT NONE
    255254    INCLUDE 'dimensions.h'
    256     INTEGER,INTENT(IN) :: jjb
    257     INTEGER,INTENT(IN) :: jje
    258     INTEGER,INTENT(IN) :: jj_begin
    259     INTEGER,INTENT(IN) :: jj_end
    260     INTEGER,INTENT(IN) :: nbniv
    261     REAL,INTENT(INOUT) :: vect_inout(iim+1,jjb:jje,nbniv)
    262 
    263     REAL               :: vect(iim+inc,jj_end-jj_begin+1,nbniv)
    264     COMPLEX            :: TF_vect(iim/2+1,jj_end-jj_begin+1,nbniv)
    265     INTEGER            :: nb_vect
    266     INTEGER :: i,j,l
     255    INTEGER, INTENT(IN) :: jjb
     256    INTEGER, INTENT(IN) :: jje
     257    INTEGER, INTENT(IN) :: jj_begin
     258    INTEGER, INTENT(IN) :: jj_end
     259    INTEGER, INTENT(IN) :: nbniv
     260    REAL, INTENT(INOUT) :: vect_inout(iim + 1, jjb:jje, nbniv)
     261
     262    REAL :: vect(iim + inc, jj_end - jj_begin + 1, nbniv)
     263    COMPLEX :: TF_vect(iim / 2 + 1, jj_end - jj_begin + 1, nbniv)
     264    INTEGER :: nb_vect
     265    INTEGER :: i, j, l
    267266    INTEGER :: ll_nb
    268    
    269     ll_nb=0
    270 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    271     DO l=1,nbniv
    272       ll_nb=ll_nb+1
    273       DO j=1,jj_end-jj_begin+1
    274         DO i=1,iim+1
    275           vect(i,j,ll_nb)=vect_inout(i,j+jj_begin-1,l)
    276         ENDDO
    277       ENDDO
    278     ENDDO
    279 !$OMP END DO NOWAIT
    280 
    281     nb_vect=(jj_end-jj_begin+1)*ll_nb
    282 
    283     CALL FFT_forward(vect,TF_vect,nb_vect)
    284  
    285     DO l=1,ll_nb
    286       DO j=1,jj_end-jj_begin+1
    287         DO i=1,iim/2+1
    288           TF_vect(i,j,l)=TF_vect(i,j,l)*Filtre_inv(i,jj_begin+j-1)
    289         ENDDO
    290       ENDDO
    291     ENDDO
    292  
    293     CALL FFT_backward(TF_vect,vect,nb_vect)
    294 
    295     ll_nb=0
    296 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    297     DO l=1,nbniv
    298       ll_nb=ll_nb+1
    299       DO j=1,jj_end-jj_begin+1
    300         DO i=1,iim+1
    301           vect_inout(i,j+jj_begin-1,l)=vect(i,j,ll_nb)
    302         ENDDO
    303       ENDDO
    304     ENDDO
    305 !$OMP END DO NOWAIT
    306 
    307   END SUBROUTINE Filtre_inv_fft 
    308  
    309  
    310 !  SUBROUTINE get_ll_index(nbniv,ll_index,ll_nb)
    311 !  IMPLICIT NONE
    312 !    INTEGER,INTENT(IN)  :: nbniv
    313 !    INTEGER,INTENT(OUT) :: ll_index(nbniv)
    314 !    INTEGER,INTENT(OUT) :: ll_nb
    315 
    316 !    INTEGER :: l,ll_begin, ll_end
    317 !   INTEGER :: omp_rank,omp_size
    318 !   INTEGER :: OMP_GET_NUM_THREADS
    319 !   INTEGER :: omp_chunk
    320 !   EXTERNAL OMP_GET_NUM_THREADS
    321 !   INTEGER :: OMP_GET_THREAD_NUM
    322 !   EXTERNAL OMP_GET_THREAD_NUM
    323 
    324 
    325 !   omp_size=OMP_GET_NUM_THREADS()
    326 !   omp_rank=OMP_GET_THREAD_NUM()   
    327 !   omp_chunk=nbniv/omp_size+min(1,MOD(nbniv,omp_size))
    328 
    329 !   ll_begin=omp_rank*OMP_CHUNK+1
    330 !   ll_nb=0
    331 !   DO WHILE (ll_begin<=nbniv)
    332 !     ll_end=min(ll_begin+OMP_CHUNK-1,nbniv)
    333 !     DO l=ll_begin,ll_end
    334 !       ll_nb=ll_nb+1
    335 !       ll_index(ll_nb)=l
    336 !     ENDDO
    337 !     ll_begin=ll_begin+omp_size*OMP_CHUNK
    338 !   ENDDO
    339 
    340 !  END SUBROUTINE get_ll_index
    341    
    342 END MODULE mod_filtre_fft_loc
     267
     268    ll_nb = 0
     269    !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     270    DO l = 1, nbniv
     271      ll_nb = ll_nb + 1
     272      DO j = 1, jj_end - jj_begin + 1
     273        DO i = 1, iim + 1
     274          vect(i, j, ll_nb) = vect_inout(i, j + jj_begin - 1, l)
     275        ENDDO
     276      ENDDO
     277    ENDDO
     278    !$OMP END DO NOWAIT
     279
     280    nb_vect = (jj_end - jj_begin + 1) * ll_nb
     281
     282    CALL FFT_forward(vect, TF_vect, nb_vect)
     283
     284    DO l = 1, ll_nb
     285      DO j = 1, jj_end - jj_begin + 1
     286        DO i = 1, iim / 2 + 1
     287          TF_vect(i, j, l) = TF_vect(i, j, l) * Filtre_inv(i, jj_begin + j - 1)
     288        ENDDO
     289      ENDDO
     290    ENDDO
     291
     292    CALL FFT_backward(TF_vect, vect, nb_vect)
     293
     294    ll_nb = 0
     295    !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     296    DO l = 1, nbniv
     297      ll_nb = ll_nb + 1
     298      DO j = 1, jj_end - jj_begin + 1
     299        DO i = 1, iim + 1
     300          vect_inout(i, j + jj_begin - 1, l) = vect(i, j, ll_nb)
     301        ENDDO
     302      ENDDO
     303    ENDDO
     304    !$OMP END DO NOWAIT
     305
     306  END SUBROUTINE Filtre_inv_fft
     307
     308
     309  !  SUBROUTINE get_ll_index(nbniv,ll_index,ll_nb)
     310  !  IMPLICIT NONE
     311  !    INTEGER,INTENT(IN)  :: nbniv
     312  !    INTEGER,INTENT(OUT) :: ll_index(nbniv)
     313  !    INTEGER,INTENT(OUT) :: ll_nb
     314
     315  !    INTEGER :: l,ll_begin, ll_end
     316  !   INTEGER :: omp_rank,omp_size
     317  !   INTEGER :: OMP_GET_NUM_THREADS
     318  !   INTEGER :: omp_chunk
     319  !   EXTERNAL OMP_GET_NUM_THREADS
     320  !   INTEGER :: OMP_GET_THREAD_NUM
     321  !   EXTERNAL OMP_GET_THREAD_NUM
     322
     323
     324  !   omp_size=OMP_GET_NUM_THREADS()
     325  !   omp_rank=OMP_GET_THREAD_NUM()
     326  !   omp_chunk=nbniv/omp_size+min(1,MOD(nbniv,omp_size))
     327
     328  !   ll_begin=omp_rank*OMP_CHUNK+1
     329  !   ll_nb=0
     330  !   DO WHILE (ll_begin<=nbniv)
     331  !     ll_end=min(ll_begin+OMP_CHUNK-1,nbniv)
     332  !     DO l=ll_begin,ll_end
     333  !       ll_nb=ll_nb+1
     334  !       ll_index(ll_nb)=l
     335  !     ENDDO
     336  !     ll_begin=ll_begin+omp_size*OMP_CHUNK
     337  !   ENDDO
     338
     339  !  END SUBROUTINE get_ll_index
     340
     341END MODULE lmdz_filtre_fft_loc
    343342 
  • LMDZ6/branches/Amaury_dev/libf/filtrez/lmdz_filtreg.F90

    r5117 r5120  
    579579  SUBROUTINE inifilr
    580580#ifdef CPP_PARA
    581   USE mod_filtre_fft, ONLY: use_filtre_fft,Init_filtre_fft
    582   USE mod_filtre_fft_loc, ONLY: Init_filtre_fft_loc=>Init_filtre_fft    !
     581  USE lmdz_filtre_fft, ONLY: use_filtre_fft,Init_filtre_fft
     582  USE lmdz_filtre_fft_loc, ONLY: Init_filtre_fft_loc=>Init_filtre_fft    !
    583583#endif
    584584    USE serre_mod, ONLY: alphax
  • LMDZ6/branches/Amaury_dev/libf/filtrez/lmdz_timer_filtre.f90

    r5107 r5120  
    22  IMPLICIT NONE
    33  PRIVATE
    4   REAL :: time
    5   REAL :: Last_time
    6   PUBLIC :: Init_timer, start_timer, stop_timer, Print_filtre_timer
     4  PUBLIC :: init_timer, start_timer, stop_timer, print_filtre_timer
     5
     6  REAL :: time, last_time
    77CONTAINS
    88
    9   SUBROUTINE Init_timer
     9  SUBROUTINE init_timer
    1010    time = 0
    1111    Last_time = 0
    12   END SUBROUTINE Init_timer
     12  END SUBROUTINE init_timer
    1313
    14   SUBROUTINE Start_timer
     14  SUBROUTINE start_timer
    1515
    1616    CALL cpu_time(last_time)
     
    2323
    2424    CALL cpu_time(t)
    25     Time = Time + t - last_time
     25    time = time + t - last_time
    2626
    2727  END SUBROUTINE stop_timer
    2828
    29   SUBROUTINE Print_filtre_timer
    30     PRINT *, "Temps CPU passe dans le filtre :", Time
    31   END SUBROUTINE  Print_filtre_timer
     29  SUBROUTINE print_filtre_timer
     30    PRINT *, "Temps CPU passe dans le filtre :", time
     31  END SUBROUTINE  print_filtre_timer
    3232
    3333END MODULE lmdz_timer_filtre
  • LMDZ6/branches/Amaury_dev/libf/misc/lmdz_ssum_scopy.f90

    r5119 r5120  
    1 ! TO MOVE SOMEWHERE ELSE !! (Amaury - 07/2024)
    2 ! Move with other vector/math functions
    31! Those are old legacy CRAY replacement functions, that are now used in several parts of the code.
    42
Note: See TracChangeset for help on using the changeset viewer.