Changeset 5106 for LMDZ6/branches/Amaury_dev/libf/dyn3dmem
- Timestamp:
- Jul 23, 2024, 10:21:18 PM (17 months ago)
- Location:
- LMDZ6/branches/Amaury_dev/libf/dyn3dmem
- Files:
-
- 31 edited
- 1 moved
-
bernoui_loc.f90 (modified) (1 diff)
-
bilan_dyn_loc.f90 (modified) (1 diff)
-
convmas1_loc.F90 (modified) (2 diffs)
-
convmas2_loc.F90 (modified) (1 diff)
-
convmas_loc.F90 (modified) (2 diffs)
-
covcont_loc.f90 (modified) (1 diff)
-
divergf_loc.f90 (modified) (1 diff)
-
divgrad2_loc.f90 (modified) (1 diff)
-
dteta1_loc.f90 (modified) (1 diff)
-
dudv1_loc.f90 (modified) (1 diff)
-
dudv2_loc.f90 (modified) (1 diff)
-
enercin_loc.F90 (modified) (1 diff)
-
exner_hyb_loc_m.F90 (modified) (1 diff)
-
exner_milieu_loc_m.F90 (modified) (2 diffs)
-
filtreg_p.F90 (modified) (2 diffs)
-
gcm.F90 (modified) (3 diffs)
-
geopot_loc.f90 (modified) (1 diff)
-
gradiv2_loc.f90 (modified) (1 diff)
-
iniacademic_loc.F90 (modified) (1 diff)
-
integrd_loc.f90 (modified) (1 diff)
-
laplacien_gam_loc.f90 (modified) (1 diff)
-
laplacien_loc.f90 (modified) (2 diffs)
-
laplacien_rot_loc.f90 (modified) (2 diffs)
-
laplacien_rotgam_loc.f90 (modified) (1 diff)
-
leapfrog_loc.F90 (modified) (1 diff)
-
lmdz_filtreg_p.F90 (moved) (moved from LMDZ6/branches/Amaury_dev/libf/dyn3dmem/mod_filtreg_p.F90) (3 diffs)
-
nxgrad_loc.f90 (modified) (1 diff)
-
nxgraro2_loc.f90 (modified) (1 diff)
-
rotat_nfil_loc.f90 (modified) (1 diff)
-
rotat_p.f90 (modified) (1 diff)
-
rotatf_loc.f90 (modified) (2 diffs)
-
tourpot_loc.F90 (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/bernoui_loc.f90
r5105 r5106 1 SUBROUTINE bernoui_loc (ngrid,nlay,pphi,pecin,pbern)1 SUBROUTINE bernoui_loc(ngrid,nlay,pphi,pecin,pbern) 2 2 USE parallel_lmdz 3 USE mod_filtreg_p3 USE lmdz_filtreg_p 4 4 IMPLICIT NONE 5 5 -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/bilan_dyn_loc.f90
r5105 r5106 2 2 ! $Id: bilan_dyn_p.F 1299 2010-01-20 14:27:21Z fairhead $ 3 3 4 SUBROUTINE bilan_dyn_loc (ntrac,dt_app,dt_cum, &4 SUBROUTINE bilan_dyn_loc(ntrac,dt_app,dt_cum, & 5 5 ps,masse,pk,flux_u,flux_v,teta,phi,ucov,vcov,trac) 6 6 -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/convmas1_loc.F90
r5099 r5106 1 SUBROUTINE convmas1_loc (pbaru, pbarv, convm)1 SUBROUTINE convmas1_loc(pbaru, pbarv, convm) 2 2 3 3 !------------------------------------------------------------------------------- … … 7 7 ! Equivalent to convmas_loc if convmas2_loc is called after. 8 8 USE parallel_lmdz 9 USE mod_filtreg_p9 USE lmdz_filtreg_p 10 10 IMPLICIT NONE 11 11 include "dimensions.h" -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/convmas2_loc.F90
r5099 r5106 1 SUBROUTINE convmas2_loc (convm)1 SUBROUTINE convmas2_loc(convm) 2 2 3 3 !------------------------------------------------------------------------------- -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/convmas_loc.F90
r5099 r5106 1 SUBROUTINE convmas_loc (pbaru, pbarv, convm)1 SUBROUTINE convmas_loc(pbaru, pbarv, convm) 2 2 3 3 !------------------------------------------------------------------------------- … … 6 6 ! Purpose: Compute mass flux convergence at p levels. 7 7 USE parallel_lmdz 8 USE mod_filtreg_p8 USE lmdz_filtreg_p 9 9 IMPLICIT NONE 10 10 include "dimensions.h" -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/covcont_loc.f90
r5105 r5106 1 SUBROUTINE covcont_loc (klevel,ucov, vcov, ucont, vcont )1 SUBROUTINE covcont_loc(klevel,ucov, vcov, ucont, vcont ) 2 2 USE parallel_lmdz 3 3 IMPLICIT NONE -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/divergf_loc.f90
r5105 r5106 9 9 ! ********************************************************************* 10 10 USE parallel_lmdz 11 USE mod_filtreg_p11 USE lmdz_filtreg_p 12 12 IMPLICIT NONE 13 13 ! -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/divgrad2_loc.f90
r5105 r5106 1 SUBROUTINE divgrad2_loc ( klevel, h, deltapres, lh, divgra_out )1 SUBROUTINE divgrad2_loc( klevel, h, deltapres, lh, divgra_out ) 2 2 ! 3 3 ! P. Le Van -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/dteta1_loc.f90
r5105 r5106 1 SUBROUTINE dteta1_loc ( teta, pbaru, pbarv, dteta)1 SUBROUTINE dteta1_loc( teta, pbaru, pbarv, dteta) 2 2 USE parallel_lmdz 3 3 USE write_field_p 4 USE mod_filtreg_p4 USE lmdz_filtreg_p 5 5 IMPLICIT NONE 6 6 -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/dudv1_loc.f90
r5105 r5106 1 SUBROUTINE dudv1_loc ( vorpot, pbaru, pbarv, du, dv )1 SUBROUTINE dudv1_loc( vorpot, pbaru, pbarv, du, dv ) 2 2 USE parallel_lmdz 3 3 IMPLICIT NONE -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/dudv2_loc.f90
r5105 r5106 1 SUBROUTINE dudv2_loc ( teta, pkf, bern, du, dv )1 SUBROUTINE dudv2_loc( teta, pkf, bern, du, dv ) 2 2 USE parallel_lmdz 3 3 IMPLICIT NONE -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/enercin_loc.F90
r5099 r5106 1 SUBROUTINE enercin_loc ( vcov, ucov, vcont, ucont, ecin )1 SUBROUTINE enercin_loc( vcov, ucov, vcont, ucont, ecin ) 2 2 3 3 !------------------------------------------------------------------------------- -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/exner_hyb_loc_m.F90
r5103 r5106 32 32 33 33 USE parallel_lmdz 34 USE mod_filtreg_p34 USE lmdz_filtreg_p 35 35 USE write_field_loc 36 36 USE comconst_mod, ONLY: cpp, kappa, r, jmp1 -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/exner_milieu_loc_m.F90
r5103 r5106 5 5 contains 6 6 7 SUBROUTINE exner_milieu_loc( ngrid, ps, p, pks, pk, pkf )7 SUBROUTINE exner_milieu_loc( ngrid, ps, p, pks, pk, pkf ) 8 8 9 9 ! Auteurs : F. Forget , Y. Wanherdrick … … 30 30 31 31 USE parallel_lmdz 32 USE mod_filtreg_p32 USE lmdz_filtreg_p 33 33 USE comconst_mod, ONLY: cpp, kappa, r, jmp1 34 34 USE comvert_mod, ONLY: preff -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/filtreg_p.F90
r5105 r5106 1 2 3 SUBROUTINE filtreg_p ( champ, ibeg, iend, nlat, nbniv, & 1 ! Amaury: on a ce fichier + lmdz_filtreg_p ! C'est totalement incompréhensible ;_; 2 ! A minima il faut un nom clair pour chaque 3 4 SUBROUTINE filtreg_p( champ, ibeg, iend, nlat, nbniv, & 4 5 ifiltre, iaire, griscal ,iter) 5 6 USE parallel_lmdz, ONLY: OMP_CHUNK 6 7 USE mod_filtre_fft 7 8 USE timer_filtre 8 9 USE filtreg_mod9 USE lmdz_coefils, ONLY: jfiltnu, jfiltnv, jfiltsu, jfiltsv, sddu, sddv, unsddu, unsddv, modfrstv, modfrstu 10 USE lmdz_filtreg, ONLY: matrinvn, matrinvs, matriceun, matriceus, matricevn, matricevs 10 11 11 12 IMPLICIT NONE … … 53 54 INCLUDE "dimensions.h" 54 55 INCLUDE "paramet.h" 55 INCLUDE "coefils.h" 56 ! 56 57 57 INTEGER :: ibeg,iend,nlat,nbniv,ifiltre,iter 58 58 INTEGER :: i,j,l,k -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/gcm.F90
r5103 r5106 11 11 USE mod_hallo 12 12 USE Bands 13 USE filtreg_mod13 USE lmdz_filtreg 14 14 USE control_mod 15 15 … … 24 24 dt,hour_ini,itaufin 25 25 USE mod_xios_dyn3dmem, ONLY: xios_dyn3dmem_init 26 USE lmdz_filtreg, ONLY: inifilr 26 27 27 28 IMPLICIT NONE … … 63 64 include "iniprint.h" 64 65 include "tracstoke.h" 65 66 66 67 67 REAL zdtvr -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/geopot_loc.f90
r5105 r5106 1 SUBROUTINE geopot_loc ( ngrid, teta, pk, pks, phis, phi )1 SUBROUTINE geopot_loc( ngrid, teta, pk, pks, phis, phi ) 2 2 USE parallel_lmdz 3 3 IMPLICIT NONE -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/gradiv2_loc.f90
r5105 r5106 17 17 USE Write_field_p 18 18 USE mod_hallo 19 USE mod_filtreg_p19 USE lmdz_filtreg_p 20 20 USE gradiv2_mod 21 21 IMPLICIT NONE -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/iniacademic_loc.F90
r5103 r5106 4 4 SUBROUTINE iniacademic_loc(vcov,ucov,teta,q,masse,ps,phis,time_0) 5 5 6 USE filtreg_mod, ONLY: inifilr6 USE lmdz_filtreg, ONLY: inifilr 7 7 USE infotrac, ONLY: nqtot, niso, iqIsoPha, tracers, getKey, isoName 8 8 USE control_mod, ONLY: day_step,planet_type -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/integrd_loc.f90
r5105 r5106 7 7 USE parallel_lmdz 8 8 USE control_mod 9 USE mod_filtreg_p9 USE lmdz_filtreg_p 10 10 USE write_field_loc 11 11 USE write_field -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/laplacien_gam_loc.f90
r5105 r5106 1 SUBROUTINE laplacien_gam_loc ( klevel, cuvsga, cvusga, unsaigam, &1 SUBROUTINE laplacien_gam_loc( klevel, cuvsga, cvusga, unsaigam, & 2 2 unsapolnga, unsapolsga, teta, divgra ) 3 3 -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/laplacien_loc.f90
r5105 r5106 1 SUBROUTINE laplacien_loc ( klevel, teta, divgra )1 SUBROUTINE laplacien_loc( klevel, teta, divgra ) 2 2 ! 3 3 ! P. Le Van … … 10 10 ! 11 11 USE parallel_lmdz 12 USE mod_filtreg_p12 USE lmdz_filtreg_p 13 13 IMPLICIT NONE 14 14 ! -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/laplacien_rot_loc.f90
r5105 r5106 1 SUBROUTINE laplacien_rot_loc ( klevel, rotin, rotout,ghx,ghy )1 SUBROUTINE laplacien_rot_loc( klevel, rotin, rotout,ghx,ghy ) 2 2 ! 3 3 ! P. Le Van … … 11 11 ! 12 12 USE parallel_lmdz 13 USE mod_filtreg_p13 USE lmdz_filtreg_p 14 14 IMPLICIT NONE 15 15 ! -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/laplacien_rotgam_loc.f90
r5105 r5106 1 SUBROUTINE laplacien_rotgam_loc ( klevel, rotin, rotout )1 SUBROUTINE laplacien_rotgam_loc( klevel, rotin, rotout ) 2 2 ! 3 3 ! P. Le Van -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/leapfrog_loc.F90
r5105 r5106 17 17 USE getparam 18 18 USE control_mod 19 USE mod_filtreg_p19 USE lmdz_filtreg_p 20 20 USE write_field_loc 21 21 USE allocate_field_mod -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/lmdz_filtreg_p.F90
r5105 r5106 1 MODULE mod_filtreg_p 1 MODULE lmdz_filtreg_p 2 USE lmdz_filtreg, ONLY: matrinvn, matrinvs, matriceun, matriceus, matricevn, matricevs 3 4 IMPLICIT NONE; PRIVATE 5 PUBLIC filtreg_p 2 6 3 7 CONTAINS 4 8 5 SUBROUTINE filtreg_p ( champ,jjb,jje, ibeg, iend, nlat, nbniv, &6 ifiltre, iaire, griscal ,iter)9 SUBROUTINE filtreg_p(champ, jjb, jje, ibeg, iend, nlat, nbniv, & 10 ifiltre, iaire, griscal, iter) 7 11 USE parallel_lmdz, ONLY: OMP_CHUNK 8 12 USE mod_filtre_fft_loc, ONLY: use_filtre_fft, filtre_u_fft, & 9 filtre_v_fft, filtre_inv_fft13 filtre_v_fft, filtre_inv_fft 10 14 USE timer_filtre, ONLY: init_timer, start_timer, stop_timer 11 12 USE filtreg_mod, ONLY: matrinvn, matrinvs, matriceun, matriceus, & 13 matricevn, matricevs 14 15 IMPLICIT NONE 15 USE lmdz_coefils, ONLY: jfiltnu, jfiltnv, jfiltsu, jfiltsv, sddu, sddv, unsddu, unsddv, modfrstv, modfrstu 16 16 17 17 !======================================================================= … … 57 57 INCLUDE "dimensions.h" 58 58 INCLUDE "paramet.h" 59 INCLUDE "coefils.h" 60 ! 61 INTEGER,INTENT(IN) :: jjb,jje,ibeg,iend,nlat,nbniv,ifiltre,iter 62 INTEGER,INTENT(IN) :: iaire 63 LOGICAL,INTENT(IN) :: griscal 64 REAL,INTENT(INOUT) :: champ( iip1,jjb:jje,nbniv) 65 66 INTEGER :: i,j,l,k 67 INTEGER :: iim2,immjm 68 INTEGER :: jdfil1,jdfil2,jffil1,jffil2,jdfil,jffil 59 ! 60 INTEGER, INTENT(IN) :: jjb, jje, ibeg, iend, nlat, nbniv, ifiltre, iter 61 INTEGER, INTENT(IN) :: iaire 62 LOGICAL, INTENT(IN) :: griscal 63 REAL, INTENT(INOUT) :: champ(iip1, jjb:jje, nbniv) 64 65 INTEGER :: i, j, l, k 66 INTEGER :: iim2, immjm 67 INTEGER :: jdfil1, jdfil2, jffil1, jffil2, jdfil, jffil 69 68 INTEGER :: hemisph 70 REAL :: champ_fft(iip1, jjb:jje,nbniv)71 ! REAL :: champ_in(iip1,jjb:jje,nbniv)72 73 LOGICAL, SAVE :: first=.TRUE.74 !$OMP THREADPRIVATE(first)75 76 REAL, DIMENSION(iip1, jjb:jje,nbniv) :: champ_loc69 REAL :: champ_fft(iip1, jjb:jje, nbniv) 70 ! REAL :: champ_in(iip1,jjb:jje,nbniv) 71 72 LOGICAL, SAVE :: first = .TRUE. 73 !$OMP THREADPRIVATE(first) 74 75 REAL, DIMENSION(iip1, jjb:jje, nbniv) :: champ_loc 77 76 INTEGER :: ll_nb, nbniv_loc 78 REAL, SAVE :: sdd12(iim, 4)79 !$OMP THREADPRIVATE(sdd12)80 81 INTEGER, PARAMETER :: type_sddu =182 INTEGER, PARAMETER :: type_sddv =283 INTEGER, PARAMETER :: type_unsddu =384 INTEGER, PARAMETER :: type_unsddv =477 REAL, SAVE :: sdd12(iim, 4) 78 !$OMP THREADPRIVATE(sdd12) 79 80 INTEGER, PARAMETER :: type_sddu = 1 81 INTEGER, PARAMETER :: type_sddv = 2 82 INTEGER, PARAMETER :: type_unsddu = 3 83 INTEGER, PARAMETER :: type_unsddv = 4 85 84 86 85 INTEGER :: sdd1_type, sdd2_type 87 CHARACTER (LEN =132) :: abort_message86 CHARACTER (LEN = 132) :: abort_message 88 87 89 88 IF (first) THEN 90 sdd12(1:iim,type_sddu) = sddu(1:iim)91 sdd12(1:iim,type_sddv) = sddv(1:iim)92 sdd12(1:iim,type_unsddu) = unsddu(1:iim)93 sdd12(1:iim,type_unsddv) = unsddv(1:iim)94 95 CALL Init_timer96 first=.FALSE.89 sdd12(1:iim, type_sddu) = sddu(1:iim) 90 sdd12(1:iim, type_sddv) = sddv(1:iim) 91 sdd12(1:iim, type_unsddu) = unsddu(1:iim) 92 sdd12(1:iim, type_unsddv) = unsddv(1:iim) 93 94 CALL Init_timer 95 first = .FALSE. 97 96 ENDIF 98 97 99 !$OMP MASTER98 !$OMP MASTER 100 99 CALL start_timer 101 !$OMP END MASTER100 !$OMP END MASTER 102 101 103 102 !-------------------------------------------------------c 104 103 105 104 IF(ifiltre==1.or.ifiltre==-1) & 106 CALL abort_gcm("mod_filtreg_p",'Pas de transformee&107 &simple dans cette version',1)108 109 IF( iter== 2) THEN110 PRINT *,' Pas d iteration du filtre dans cette version !'&111 &, ' Utiliser old_filtreg et repasser !'112 CALL abort_gcm("mod_filtreg_p","stopped",1)105 CALL abort_gcm("lmdz_filtreg_p", 'Pas de transformee& 106 &simple dans cette version', 1) 107 108 IF(iter== 2) THEN 109 PRINT *, ' Pas d iteration du filtre dans cette version !'& 110 &, ' Utiliser old_filtreg et repasser !' 111 CALL abort_gcm("lmdz_filtreg_p", "stopped", 1) 113 112 ENDIF 114 113 115 IF( ifiltre== -2 .AND..NOT.griscal) THEN116 PRINT *,' Cette routine ne calcule le filtre inverse que ' &117 , ' sur la grille des scalaires !'118 CALL abort_gcm("mod_filtreg_p","stopped",1)114 IF(ifiltre== -2 .AND..NOT.griscal) THEN 115 PRINT *, ' Cette routine ne calcule le filtre inverse que ' & 116 , ' sur la grille des scalaires !' 117 CALL abort_gcm("lmdz_filtreg_p", "stopped", 1) 119 118 ENDIF 120 119 121 IF( ifiltre/=2 .AND.ifiltre/= - 2) THEN122 PRINT *,' Probleme dans filtreg car ifiltre NE 2 et NE -2' &123 , ' corriger et repasser !'124 CALL abort_gcm("mod_filtreg_p","stopped",1)120 IF(ifiltre/=2 .AND.ifiltre/= - 2) THEN 121 PRINT *, ' Probleme dans filtreg car ifiltre NE 2 et NE -2' & 122 , ' corriger et repasser !' 123 CALL abort_gcm("lmdz_filtreg_p", "stopped", 1) 125 124 ENDIF 126 125 ! 127 126 128 iim2 = iim * iim 129 immjm = iim * jjm 130 ! 131 ! 132 IF( griscal ) THEN 133 IF( nlat /= jjp1 ) THEN 134 CALL abort_gcm("mod_filtreg_p"," nlat. NE. jjp1",1) 135 ELSE 136 ! 137 IF( iaire==1 ) THEN 138 sdd1_type = type_sddv 139 sdd2_type = type_unsddv 127 iim2 = iim * iim 128 immjm = iim * jjm 129 ! 130 ! 131 IF(griscal) THEN 132 IF(nlat /= jjp1) THEN 133 CALL abort_gcm("lmdz_filtreg_p", " nlat. NE. jjp1", 1) 134 ELSE 135 ! 136 IF(iaire==1) THEN 137 sdd1_type = type_sddv 138 sdd2_type = type_unsddv 139 ELSE 140 sdd1_type = type_unsddv 141 sdd2_type = type_sddv 142 ENDIF 143 ! 144 jdfil1 = 2 145 jffil1 = jfiltnu 146 jdfil2 = jfiltsu 147 jffil2 = jjm 148 ENDIF 149 ELSE 150 IF(nlat/=jjm) THEN 151 CALL abort_gcm("lmdz_filtreg_p", " nlat. NE. jjm", 1) 152 ELSE 153 ! 154 IF(iaire==1) THEN 155 sdd1_type = type_sddu 156 sdd2_type = type_unsddu 157 ELSE 158 sdd1_type = type_unsddu 159 sdd2_type = type_sddu 160 ENDIF 161 ! 162 jdfil1 = 1 163 jffil1 = jfiltnv 164 jdfil2 = jfiltsv 165 jffil2 = jjm 166 ENDIF 167 ENDIF 168 ! 169 DO hemisph = 1, 2 170 ! 171 IF (hemisph==1) THEN 172 !ym 173 jdfil = max(jdfil1, ibeg) 174 jffil = min(jffil1, iend) 175 ELSE 176 !ym 177 jdfil = max(jdfil2, ibeg) 178 jffil = min(jffil2, iend) 179 ENDIF 180 181 182 !ccccccccccccccccccccccccccccccccccccccccccc 183 ! Utilisation du filtre classique 184 !ccccccccccccccccccccccccccccccccccccccccccc 185 186 IF (.NOT. use_filtre_fft) THEN 187 188 ! !---------------------------------! 189 ! ! Agregation des niveau verticaux ! 190 ! ! uniquement necessaire pour une ! 191 ! ! execution OpenMP ! 192 ! !---------------------------------! 193 ll_nb = 0 194 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 195 DO l = 1, nbniv 196 ll_nb = ll_nb + 1 197 DO j = jdfil, jffil 198 DO i = 1, iim 199 champ_loc(i, j, ll_nb) = & 200 champ(i, j, l) * sdd12(i, sdd1_type) 201 ENDDO 202 ENDDO 203 ENDDO 204 !$OMP END DO NOWAIT 205 206 nbniv_loc = ll_nb 207 208 IF(hemisph==1) THEN 209 210 IF(ifiltre==-2) THEN 211 DO j = jdfil, jffil 212 #ifdef BLAS 213 CALL SGEMM("N", "N", iim, nbniv_loc, iim, 1.0, & 214 matrinvn(1,1,j), iim, & 215 champ_loc(1,j,1), iip1*(jje-jjb+1), 0.0, & 216 champ_fft(1,j,1), iip1*(jje-jjb+1)) 217 #else 218 champ_fft(1:iim, j, 1:nbniv_loc) = & 219 matmul(matrinvn(1:iim, 1:iim, j), & 220 champ_loc(1:iim, j, 1:nbniv_loc)) 221 #endif 222 ENDDO 223 224 ELSE IF (griscal) THEN 225 DO j = jdfil, jffil 226 #ifdef BLAS 227 CALL SGEMM("N", "N", iim, nbniv_loc, iim, 1.0, & 228 matriceun(1,1,j), iim, & 229 champ_loc(1,j,1), iip1*(jje-jjb+1), 0.0, & 230 champ_fft(1,j,1), iip1*(jje-jjb+1)) 231 #else 232 champ_fft(1:iim, j, 1:nbniv_loc) = & 233 matmul(matriceun(1:iim, 1:iim, j), & 234 champ_loc(1:iim, j, 1:nbniv_loc)) 235 #endif 236 ENDDO 237 140 238 ELSE 141 sdd1_type = type_unsddv 142 sdd2_type = type_sddv 239 DO j = jdfil, jffil 240 #ifdef BLAS 241 CALL SGEMM("N", "N", iim, nbniv_loc, iim, 1.0, & 242 matricevn(1,1,j), iim, & 243 champ_loc(1,j,1), iip1*(jje-jjb+1), 0.0, & 244 champ_fft(1,j,1), iip1*(jje-jjb+1)) 245 #else 246 champ_fft(1:iim, j, 1:nbniv_loc) = & 247 matmul(matricevn(1:iim, 1:iim, j), & 248 champ_loc(1:iim, j, 1:nbniv_loc)) 249 #endif 250 ENDDO 251 143 252 ENDIF 144 ! 145 jdfil1 = 2 146 jffil1 = jfiltnu 147 jdfil2 = jfiltsu 148 jffil2 = jjm 149 ENDIF 150 ELSE 151 IF( nlat/=jjm ) THEN 152 CALL abort_gcm("mod_filtreg_p"," nlat. NE. jjm",1) 153 ELSE 154 ! 155 IF( iaire==1 ) THEN 156 sdd1_type = type_sddu 157 sdd2_type = type_unsddu 253 254 ELSE 255 256 IF(ifiltre==-2) THEN 257 DO j = jdfil, jffil 258 #ifdef BLAS 259 CALL SGEMM("N", "N", iim, nbniv_loc, iim, 1.0, & 260 matrinvs(1,1,j-jfiltsu+1), iim, & 261 champ_loc(1,j,1), iip1*(jje-jjb+1), 0.0, & 262 champ_fft(1,j,1), iip1*(jje-jjb+1)) 263 #else 264 champ_fft(1:iim, j, 1:nbniv_loc) = & 265 matmul(matrinvs(1:iim, 1:iim, j - jfiltsu + 1), & 266 champ_loc(1:iim, j, 1:nbniv_loc)) 267 #endif 268 ENDDO 269 270 ELSE IF (griscal) THEN 271 272 DO j = jdfil, jffil 273 #ifdef BLAS 274 CALL SGEMM("N", "N", iim, nbniv_loc, iim, 1.0, & 275 matriceus(1,1,j-jfiltsu+1), iim, & 276 champ_loc(1,j,1), iip1*(jje-jjb+1), 0.0, & 277 champ_fft(1,j,1), iip1*(jje-jjb+1)) 278 #else 279 champ_fft(1:iim, j, 1:nbniv_loc) = & 280 matmul(matriceus(1:iim, 1:iim, j - jfiltsu + 1), & 281 champ_loc(1:iim, j, 1:nbniv_loc)) 282 #endif 283 ENDDO 284 158 285 ELSE 159 sdd1_type = type_unsddu 160 sdd2_type = type_sddu 286 287 DO j = jdfil, jffil 288 #ifdef BLAS 289 CALL SGEMM("N", "N", iim, nbniv_loc, iim, 1.0, & 290 matricevs(1,1,j-jfiltsv+1), iim, & 291 champ_loc(1,j,1), iip1*(jje-jjb+1), 0.0, & 292 champ_fft(1,j,1), iip1*(jje-jjb+1)) 293 #else 294 champ_fft(1:iim, j, 1:nbniv_loc) = & 295 matmul(matricevs(1:iim, 1:iim, j - jfiltsv + 1), & 296 champ_loc(1:iim, j, 1:nbniv_loc)) 297 #endif 298 ENDDO 299 161 300 ENDIF 162 ! 163 jdfil1 = 1 164 jffil1 = jfiltnv 165 jdfil2 = jfiltsv 166 jffil2 = jjm 167 ENDIF 168 ENDIF 169 ! 170 DO hemisph = 1, 2 171 ! 172 IF ( hemisph==1 ) THEN 173 !ym 174 jdfil = max(jdfil1,ibeg) 175 jffil = min(jffil1,iend) 176 ELSE 177 !ym 178 jdfil = max(jdfil2,ibeg) 179 jffil = min(jffil2,iend) 180 ENDIF 181 182 183 !ccccccccccccccccccccccccccccccccccccccccccc 184 ! Utilisation du filtre classique 185 !ccccccccccccccccccccccccccccccccccccccccccc 186 187 IF (.NOT. use_filtre_fft) THEN 188 189 ! !---------------------------------! 190 ! ! Agregation des niveau verticaux ! 191 ! ! uniquement necessaire pour une ! 192 ! ! execution OpenMP ! 193 ! !---------------------------------! 301 302 ENDIF 303 ! c 304 IF(ifiltre==2) THEN 305 306 ! !-------------------------------------! 307 ! ! Dés-agregation des niveau verticaux ! 308 ! ! uniquement necessaire pour une ! 309 ! ! execution OpenMP ! 310 ! !-------------------------------------! 194 311 ll_nb = 0 195 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)312 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 196 313 DO l = 1, nbniv 197 ll_nb = ll_nb+1 198 DO j = jdfil,jffil 199 DO i = 1, iim 200 champ_loc(i,j,ll_nb) = & 201 champ(i,j,l) * sdd12(i,sdd1_type) 202 ENDDO 203 ENDDO 204 ENDDO 205 !$OMP END DO NOWAIT 206 207 nbniv_loc = ll_nb 208 209 IF( hemisph==1 ) THEN 210 211 IF( ifiltre==-2 ) THEN 212 DO j = jdfil,jffil 213 #ifdef BLAS 214 CALL SGEMM("N", "N", iim, nbniv_loc, iim, 1.0, & 215 matrinvn(1,1,j), iim, & 216 champ_loc(1,j,1), iip1*(jje-jjb+1), 0.0, & 217 champ_fft(1,j,1), iip1*(jje-jjb+1)) 218 #else 219 champ_fft(1:iim,j,1:nbniv_loc)= & 220 matmul(matrinvn(1:iim,1:iim,j), & 221 champ_loc(1:iim,j,1:nbniv_loc)) 222 #endif 223 ENDDO 224 225 ELSE IF ( griscal ) THEN 226 DO j = jdfil,jffil 227 #ifdef BLAS 228 CALL SGEMM("N", "N", iim, nbniv_loc, iim, 1.0, & 229 matriceun(1,1,j), iim, & 230 champ_loc(1,j,1), iip1*(jje-jjb+1), 0.0, & 231 champ_fft(1,j,1), iip1*(jje-jjb+1)) 232 #else 233 champ_fft(1:iim,j,1:nbniv_loc)= & 234 matmul(matriceun(1:iim,1:iim,j), & 235 champ_loc(1:iim,j,1:nbniv_loc)) 236 #endif 237 ENDDO 238 239 ELSE 240 DO j = jdfil,jffil 241 #ifdef BLAS 242 CALL SGEMM("N", "N", iim, nbniv_loc, iim, 1.0, & 243 matricevn(1,1,j), iim, & 244 champ_loc(1,j,1), iip1*(jje-jjb+1), 0.0, & 245 champ_fft(1,j,1), iip1*(jje-jjb+1)) 246 #else 247 champ_fft(1:iim,j,1:nbniv_loc)= & 248 matmul(matricevn(1:iim,1:iim,j), & 249 champ_loc(1:iim,j,1:nbniv_loc)) 250 #endif 251 ENDDO 252 253 ENDIF 254 314 ll_nb = ll_nb + 1 315 DO j = jdfil, jffil 316 DO i = 1, iim 317 champ(i, j, l) = (champ_loc(i, j, ll_nb) & 318 + champ_fft(i, j, ll_nb)) & 319 * sdd12(i, sdd2_type) 320 ENDDO 321 ENDDO 322 ENDDO 323 !$OMP END DO NOWAIT 324 325 ELSE 326 327 ll_nb = 0 328 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 329 DO l = 1, nbniv 330 ll_nb = ll_nb + 1 331 DO j = jdfil, jffil 332 DO i = 1, iim 333 champ(i, j, l) = (champ_loc(i, j, ll_nb) & 334 - champ_fft(i, j, ll_nb)) & 335 * sdd12(i, sdd2_type) 336 ENDDO 337 ENDDO 338 ENDDO 339 !$OMP END DO NOWAIT 340 341 ENDIF 342 343 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 344 DO l = 1, nbniv 345 DO j = jdfil, jffil 346 ! ! add redundant longitude 347 champ(iip1, j, l) = champ(1, j, l) 348 ENDDO 349 ENDDO 350 !$OMP END DO NOWAIT 351 352 !cccccccccccccccccccccccccccccccccccccccccccc 353 ! Utilisation du filtre FFT 354 !cccccccccccccccccccccccccccccccccccccccccccc 355 356 ELSE 357 358 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 359 DO l = 1, nbniv 360 DO j = jdfil, jffil 361 DO i = 1, iim 362 champ(i, j, l) = champ(i, j, l) * sdd12(i, sdd1_type) 363 champ_fft(i, j, l) = champ(i, j, l) 364 ENDDO 365 ENDDO 366 ENDDO 367 !$OMP END DO NOWAIT 368 369 IF (jdfil<=jffil) THEN 370 IF(ifiltre == -2) THEN 371 CALL Filtre_inv_fft(champ_fft, jjb, jje, jdfil, jffil, nbniv) 372 ELSE IF (griscal) THEN 373 CALL Filtre_u_fft(champ_fft, jjb, jje, jdfil, jffil, nbniv) 255 374 ELSE 256 257 IF( ifiltre==-2 ) THEN 258 DO j = jdfil,jffil 259 #ifdef BLAS 260 CALL SGEMM("N", "N", iim, nbniv_loc, iim, 1.0, & 261 matrinvs(1,1,j-jfiltsu+1), iim, & 262 champ_loc(1,j,1), iip1*(jje-jjb+1), 0.0, & 263 champ_fft(1,j,1), iip1*(jje-jjb+1)) 264 #else 265 champ_fft(1:iim,j,1:nbniv_loc)= & 266 matmul(matrinvs(1:iim,1:iim,j-jfiltsu+1), & 267 champ_loc(1:iim,j,1:nbniv_loc)) 268 #endif 269 ENDDO 270 271 ELSE IF ( griscal ) THEN 272 273 DO j = jdfil,jffil 274 #ifdef BLAS 275 CALL SGEMM("N", "N", iim, nbniv_loc, iim, 1.0, & 276 matriceus(1,1,j-jfiltsu+1), iim, & 277 champ_loc(1,j,1), iip1*(jje-jjb+1), 0.0, & 278 champ_fft(1,j,1), iip1*(jje-jjb+1)) 279 #else 280 champ_fft(1:iim,j,1:nbniv_loc)= & 281 matmul(matriceus(1:iim,1:iim,j-jfiltsu+1), & 282 champ_loc(1:iim,j,1:nbniv_loc)) 283 #endif 284 ENDDO 285 286 ELSE 287 288 DO j = jdfil,jffil 289 #ifdef BLAS 290 CALL SGEMM("N", "N", iim, nbniv_loc, iim, 1.0, & 291 matricevs(1,1,j-jfiltsv+1), iim, & 292 champ_loc(1,j,1), iip1*(jje-jjb+1), 0.0, & 293 champ_fft(1,j,1), iip1*(jje-jjb+1)) 294 #else 295 champ_fft(1:iim,j,1:nbniv_loc)= & 296 matmul(matricevs(1:iim,1:iim,j-jfiltsv+1), & 297 champ_loc(1:iim,j,1:nbniv_loc)) 298 #endif 299 ENDDO 300 301 ENDIF 302 375 CALL Filtre_v_fft(champ_fft, jjb, jje, jdfil, jffil, nbniv) 303 376 ENDIF 304 ! c 305 IF( ifiltre==2 ) THEN 306 307 ! !-------------------------------------! 308 ! ! Dés-agregation des niveau verticaux ! 309 ! ! uniquement necessaire pour une ! 310 ! ! execution OpenMP ! 311 ! !-------------------------------------! 312 ll_nb = 0 313 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 314 DO l = 1, nbniv 315 ll_nb = ll_nb + 1 316 DO j = jdfil,jffil 317 DO i = 1, iim 318 champ( i,j,l ) = (champ_loc(i,j,ll_nb) & 319 + champ_fft(i,j,ll_nb)) & 320 * sdd12(i,sdd2_type) 321 ENDDO 322 ENDDO 323 ENDDO 324 !$OMP END DO NOWAIT 325 326 ELSE 327 328 ll_nb = 0 329 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 330 DO l = 1, nbniv 331 ll_nb = ll_nb + 1 332 DO j = jdfil,jffil 333 DO i = 1, iim 334 champ( i,j,l ) = (champ_loc(i,j,ll_nb) & 335 - champ_fft(i,j,ll_nb)) & 336 * sdd12(i,sdd2_type) 337 ENDDO 338 ENDDO 339 ENDDO 340 !$OMP END DO NOWAIT 341 342 ENDIF 343 344 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 377 ENDIF 378 379 IF(ifiltre== 2) THEN 380 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 345 381 DO l = 1, nbniv 346 DO j = jdfil,jffil 347 ! ! add redundant longitude 348 champ( iip1,j,l ) = champ( 1,j,l ) 349 ENDDO 350 ENDDO 351 !$OMP END DO NOWAIT 352 353 !cccccccccccccccccccccccccccccccccccccccccccc 354 ! Utilisation du filtre FFT 355 !cccccccccccccccccccccccccccccccccccccccccccc 356 357 ELSE 358 359 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 360 DO l=1,nbniv 361 DO j=jdfil,jffil 362 DO i = 1, iim 363 champ( i,j,l)= champ(i,j,l)*sdd12(i,sdd1_type) 364 champ_fft( i,j,l) = champ(i,j,l) 365 ENDDO 366 ENDDO 367 ENDDO 368 !$OMP END DO NOWAIT 369 370 IF (jdfil<=jffil) THEN 371 IF( ifiltre == -2 ) THEN 372 CALL Filtre_inv_fft(champ_fft,jjb,jje,jdfil,jffil,nbniv) 373 ELSE IF ( griscal ) THEN 374 CALL Filtre_u_fft(champ_fft,jjb,jje,jdfil,jffil,nbniv) 375 ELSE 376 CALL Filtre_v_fft(champ_fft,jjb,jje,jdfil,jffil,nbniv) 377 ENDIF 378 ENDIF 379 380 381 IF( ifiltre== 2 ) THEN 382 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 383 DO l=1,nbniv 384 DO j=jdfil,jffil 385 DO i = 1, iim 386 champ( i,j,l)=(champ(i,j,l)+champ_fft(i,j,l)) & 387 *sdd12(i,sdd2_type) 388 ENDDO 389 ENDDO 390 ENDDO 391 !$OMP END DO NOWAIT 392 ELSE 393 394 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 395 DO l=1,nbniv 396 DO j=jdfil,jffil 397 DO i = 1, iim 398 champ(i,j,l)=(champ(i,j,l)-champ_fft(i,j,l)) & 399 *sdd12(i,sdd2_type) 400 ENDDO 401 ENDDO 402 ENDDO 403 !$OMP END DO NOWAIT 404 ENDIF 405 ! 406 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 407 DO l=1,nbniv 408 DO j=jdfil,jffil 409 ! champ_FFT( iip1,j,l ) = champ_FFT( 1,j,l ) 410 ! ! add redundant longitude 411 champ( iip1,j,l ) = champ( 1,j,l ) 412 ENDDO 413 ENDDO 414 !$OMP END DO NOWAIT 415 ENDIF 416 ! Fin de la zone de filtrage 417 382 DO j = jdfil, jffil 383 DO i = 1, iim 384 champ(i, j, l) = (champ(i, j, l) + champ_fft(i, j, l)) & 385 * sdd12(i, sdd2_type) 386 ENDDO 387 ENDDO 388 ENDDO 389 !$OMP END DO NOWAIT 390 ELSE 391 392 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 393 DO l = 1, nbniv 394 DO j = jdfil, jffil 395 DO i = 1, iim 396 champ(i, j, l) = (champ(i, j, l) - champ_fft(i, j, l)) & 397 * sdd12(i, sdd2_type) 398 ENDDO 399 ENDDO 400 ENDDO 401 !$OMP END DO NOWAIT 402 ENDIF 403 ! 404 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 405 DO l = 1, nbniv 406 DO j = jdfil, jffil 407 ! champ_FFT( iip1,j,l ) = champ_FFT( 1,j,l ) 408 ! ! add redundant longitude 409 champ(iip1, j, l) = champ(1, j, l) 410 ENDDO 411 ENDDO 412 !$OMP END DO NOWAIT 413 ENDIF 414 ! Fin de la zone de filtrage 418 415 419 416 ENDDO 420 417 421 ! DO j=1,nlat422 423 ! PRINT *,"check FFT ----> Delta(",j,")=",418 ! DO j=1,nlat 419 420 ! PRINT *,"check FFT ----> Delta(",j,")=", 424 421 ! & sum(champ(:,j,:)-champ_fft(:,j,:))/sum(champ(:,j,:)), 425 422 ! & sum(champ(:,j,:)-champ_in(:,j,:))/sum(champ(:,j,:)) … … 430 427 431 428 ! 432 !$OMP MASTER429 !$OMP MASTER 433 430 CALL stop_timer 434 !$OMP END MASTER431 !$OMP END MASTER 435 432 436 433 END SUBROUTINE filtreg_p 437 END MODULE mod_filtreg_p438 434 END MODULE lmdz_filtreg_p 435 -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/nxgrad_loc.f90
r5105 r5106 1 SUBROUTINE nxgrad_loc (klevel, rot, x, y )1 SUBROUTINE nxgrad_loc(klevel, rot, x, y ) 2 2 ! 3 3 ! P. Le Van -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/nxgraro2_loc.f90
r5105 r5106 16 16 USE times 17 17 USE mod_hallo 18 USE mod_filtreg_p18 USE lmdz_filtreg_p 19 19 USE nxgraro2_mod 20 20 IMPLICIT NONE -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/rotat_nfil_loc.f90
r5105 r5106 1 SUBROUTINE rotat_nfil_loc (klevel, x, y, rot )1 SUBROUTINE rotat_nfil_loc(klevel, x, y, rot ) 2 2 ! 3 3 ! Auteur : P.Le Van -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/rotat_p.f90
r5105 r5106 1 SUBROUTINE rotat_p (klevel, x, y, rot )1 SUBROUTINE rotat_p(klevel, x, y, rot ) 2 2 ! 3 3 ! Auteur : P.Le Van -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/rotatf_loc.f90
r5105 r5106 1 SUBROUTINE rotatf_loc (klevel, x, y, rot )1 SUBROUTINE rotatf_loc(klevel, x, y, rot ) 2 2 ! 3 3 ! Auteur : P.Le Van … … 11 11 ! 12 12 USE parallel_lmdz 13 USE mod_filtreg_p13 USE lmdz_filtreg_p 14 14 IMPLICIT NONE 15 15 ! -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/tourpot_loc.F90
r5099 r5106 1 SUBROUTINE tourpot_loc ( vcov, ucov, massebxy, vorpot )1 SUBROUTINE tourpot_loc( vcov, ucov, massebxy, vorpot ) 2 2 3 3 !------------------------------------------------------------------------------- … … 6 6 ! Purpose: Compute potential vorticity. 7 7 USE parallel_lmdz 8 USE mod_filtreg_p8 USE lmdz_filtreg_p 9 9 IMPLICIT NONE 10 10 include "dimensions.h"
Note: See TracChangeset
for help on using the changeset viewer.
