3       SUBROUTINE filtreg_p ( champ, ibeg, iend, nlat, nbniv, 
 
    4      &     ifiltre, iaire, griscal ,iter)
 
   53 #include "dimensions.h" 
   57       INTEGER ibeg,iend,nlat,nbniv,ifiltre,iter
 
   60       INTEGER jdfil1,jdfil2,jffil1,jffil2,jdfil,jffil
 
   62       REAL  champ( iip1,nlat,nbniv)
 
   65       INTEGER    hemisph, iaire
 
   67       REAL :: champ_fft(iip1,nlat,nbniv)
 
   68       REAL :: champ_in(iip1,nlat,nbniv)
 
   70       LOGICAL,
SAVE     :: first=.
true.
 
   73       REAL, 
DIMENSION(iip1,nlat,nbniv) :: champ_loc
 
   74       INTEGER :: ll_nb, nbniv_loc
 
   75       REAL, 
SAVE :: sdd12(
iim,4)
 
   78       INTEGER, 
PARAMETER :: type_sddu=1
 
   79       INTEGER, 
PARAMETER :: type_sddv=2
 
   80       INTEGER, 
PARAMETER :: type_unsddu=3
 
   81       INTEGER, 
PARAMETER :: type_unsddv=4
 
   83       INTEGER :: sdd1_type, sdd2_type
 
  101       IF(ifiltre.EQ.1.or.ifiltre.EQ.-1) 
 
  102      &     stop
'Pas de transformee simple dans cette version' 
  104       IF( iter.EQ. 2 )  
THEN 
  105          print *,
' Pas d iteration du filtre dans cette version !' 
  106      &        , 
' Utiliser old_filtreg et repasser !' 
  110       IF( ifiltre.EQ. -2 .AND..NOT.griscal )     
THEN 
  111          print *,
' Cette routine ne calcule le filtre inverse que ' 
  112      &        , 
' sur la grille des scalaires !' 
  116       IF( ifiltre.NE.2 .AND.ifiltre.NE. - 2 )  
THEN 
  117          print *,
' Probleme dans filtreg car ifiltre NE 2 et NE -2' 
  118      &        , 
' corriger et repasser !' 
  128          IF( nlat. ne. 
jjp1 )  
THEN 
  133             IF( iaire.EQ.1 )  
THEN 
  134                sdd1_type = type_sddv
 
  135                sdd2_type = type_unsddv
 
  137                sdd1_type = type_unsddv
 
  138                sdd2_type = type_sddv
 
  147          IF( nlat.NE.jjm )  
THEN 
  152             IF( iaire.EQ.1 )  
THEN 
  153                sdd1_type = type_sddu
 
  154                sdd2_type = type_unsddu
 
  156                sdd1_type = type_unsddu
 
  157                sdd2_type = type_sddu
 
  169          IF ( hemisph.EQ.1 )  
THEN 
  171             jdfil = max(jdfil1,ibeg)
 
  172             jffil = min(jffil1,iend)
 
  175             jdfil = max(jdfil2,ibeg)
 
  176             jffil = min(jffil2,iend)
 
  197                      champ_loc(i,j,ll_nb) = 
 
  198      &                    champ(i,j,l) * sdd12(i,sdd1_type)
 
  206             IF( hemisph.EQ.1 )      
THEN 
  208                IF( ifiltre.EQ.-2 )   
THEN 
  211                      CALL dgemm(
"N", 
"N", 
iim, nbniv_loc, 
iim, 1.0, 
 
  213      &                    champ_loc(1,j,1), iip1*nlat, 0.0,
 
  214      &                    champ_fft(1,j-jdfil+1,1), iip1*nlat)
 
  216                      champ_fft(:
iim,j-jdfil+1,:)
 
  221                ELSE IF ( griscal )     
THEN 
  224                      CALL dgemm(
"N", 
"N", 
iim, nbniv_loc, 
iim, 1.0, 
 
  226      &                    champ_loc(1,j,1), iip1*nlat, 0.0,
 
  227      &                    champ_fft(1,j-jdfil+1,1), iip1*nlat)
 
  229                      champ_fft(:
iim,j-jdfil+1,:)
 
  237                      CALL dgemm(
"N", 
"N", 
iim, nbniv_loc, 
iim, 1.0, 
 
  239      &                    champ_loc(1,j,1), iip1*nlat, 0.0, 
 
  240      &                    champ_fft(1,j-jdfil+1,1), iip1*nlat)
 
  242                      champ_fft(:
iim,j-jdfil+1,:)
 
  251                IF( ifiltre.EQ.-2 )   
THEN 
  254                      CALL dgemm(
"N", 
"N", 
iim, nbniv_loc, 
iim, 1.0, 
 
  256      &                    champ_loc(1,j,1), iip1*nlat, 0.0, 
 
  257      &                    champ_fft(1,j-jdfil+1,1), iip1*nlat)
 
  259                      champ_fft(:
iim,j-jdfil+1,:)
 
  261      &                            champ_loc(:
iim,j,:))
 
  265                ELSE IF ( griscal )     
THEN 
  269                      CALL dgemm(
"N", 
"N", 
iim, nbniv_loc, 
iim, 1.0, 
 
  271      &                    champ_loc(1,j,1), iip1*nlat, 0.0, 
 
  272      &                    champ_fft(1,j-jdfil+1,1), iip1*nlat)
 
  274                      champ_fft(:
iim,j-jdfil+1,:)
 
  276      &                            champ_loc(:
iim,j,:))
 
  284                      CALL dgemm(
"N", 
"N", 
iim, nbniv_loc, 
iim, 1.0, 
 
  286      &                    champ_loc(1,j,1), iip1*nlat, 0.0, 
 
  287      &                    champ_fft(1,j-jdfil+1,1), iip1*nlat)
 
  289                      champ_fft(:
iim,j-jdfil+1,:)
 
  291      &                            champ_loc(:
iim,j,:))
 
  299             IF( ifiltre.EQ.2 )  
THEN 
  312                         champ( i,j,l ) = (champ_loc(i,j,ll_nb) 
 
  313      &                       + champ_fft(i,j-jdfil+1,ll_nb))
 
  314      &                       * sdd12(i,sdd2_type)
 
  328                         champ( i,j,l ) = (champ_loc(i,j,ll_nb) 
 
  329      &                       - champ_fft(i,j-jdfil+1,ll_nb))
 
  330      &                       * sdd12(i,sdd2_type)
 
  341                   champ( iip1,j,l ) = champ( 1,j,l )
 
  356                      champ( i,j,l)= champ(i,j,l)*sdd12(i,sdd1_type)
 
  357                      champ_fft( i,j,l) = champ(i,j,l)
 
  363             IF (jdfil<=jffil) 
THEN 
  364                IF( ifiltre. eq. -2 )   
THEN 
  366                ELSE IF ( griscal )     
THEN 
  374             IF( ifiltre.EQ. 2 )  
THEN 
  379                         champ( i,j,l)=(champ(i,j,l)+champ_fft(i,j,l))
 
  380      &                       *sdd12(i,sdd2_type)
 
  391                         champ(i,j,l)=(champ(i,j,l)-champ_fft(i,j,l))
 
  392      &                       *sdd12(i,sdd2_type)
 
  403                   champ( iip1,j,l ) = champ( 1,j,l )
 
  425  1111 
FORMAT(//20
x,
'ERREUR dans le dimensionnement du tableau  CHAMP a  
  426      &     filtrer, sur la grille des scalaires'/)
 
  427  2222 
FORMAT(//20
x,
'ERREUR dans le dimensionnement du tableau CHAMP a fi 
  428      &     ltrer, sur la grille de V ou de Z'/)
 
!$Id!COMMON coefils sddu(iim)
 
!$Id!COMMON coefils jfiltsu
 
!$Id!COMMON coefils unsddu(iim)
 
subroutine filtre_u_fft(vect_inout, nlat, jj_begin, jj_end, nbniv)
 
real, dimension(:,:,:), allocatable matriceus
 
logical, save use_filtre_fft
 
real, dimension(:,:,:), allocatable matrinvs
 
subroutine filtreg_p(champ, ibeg, iend, nlat, nbniv, ifiltre, iaire, griscal, iter)
 
subroutine, public start_timer
 
subroutine filtre_v_fft(vect_inout, nlat, jj_begin, jj_end, nbniv)
 
!$Id!COMMON coefils jfiltsv
 
!$Id!COMMON coefils jfiltnu
 
subroutine, public stop_timer
 
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
 
!$Header!c c INCLUDE fxyprim h c c c Fonctions in line c c REAL fyprim REAL rj c c il faut la calculer avant d appeler ces fonctions c c c Fonctions a changer selon x(x) et y(y) choisis.c-----------------------------------------------------------------c c.....ici
 
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
 
!$Id!COMMON coefils sddv(iim)&&
 
!$Id!COMMON coefils unsddv(iim)
 
real, dimension(:,:,:), allocatable matrinvn
 
!$Id!COMMON coefils jfiltnv
 
subroutine, public init_timer
 
c c zjulian c cym CALL iim cym klev iim
 
real, dimension(:,:,:), allocatable matriceun
 
real, dimension(:,:,:), allocatable matricevn
 
real, dimension(:,:,:), allocatable matricevs
 
subroutine filtre_inv_fft(vect_inout, nlat, jj_begin, jj_end, nbniv)