1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
ALLOCATE(EEEx(NbrT,nx2p1,ny2p1,nz2p1))
ALLOCATE(EEEy(NbrT,nx2p1,ny2p1,nz2p1))
ALLOCATE(EEEz(NbrT,nx2p1,ny2p1,nz2p1))
ALLOCATE(EEx(nx2p1,ny2p1,nz2p1))
ALLOCATE(EEy(nx2p1,ny2p1,nz2p1))
ALLOCATE(EEz(nx2p1,ny2p1,nz2p1))
DO l=1,nx2p1
DO m=1,ny2p1
DO n=1,nz2p1
EEx(l,n,m)=0
EEy(l,n,m)=0
EEz(l,n,m)=0
DO nn=1,NbrT
EEEx(nn,l,m,n)=0
EEEy(nn,l,m,n)=0
EEEz(nn,l,m,n)=0
ENDDO
ENDDO
ENDDO
ENDDO
debut=omp_get_wtime()
!$OMP PARALLEL DO PRIVATE(i1,j1,k1,km1,kp2,tabNijk,il,ux,jm,uy,iljm,
!$OMP& kn,uz) IF(NbrT.NE.1)
DO i=1,nx2
nn=omp_get_thread_num()+1
i1=i+1
DO j=1,ny2
j1=j+1
DO k=1,nz2
k1=k+1
km1=k-1
kp2=k+2
IF(tabNijk.GT.0.01)THEN
DO l=1,nx2p1
IF(partinx(l))THEN
IF((i-l).GE.0) THEN
il=i1-l
ux=tabNijk
ELSE
il=l-i
ux=-tabNijk
ENDIF
DO m=iborneminf(l),ibornemsup(l)
IF(partinxy(l,m))THEN
IF((j-m).GE.0) THEN
jm=j1-m
uy=tabNijk
ELSE
jm=m-j
uy=-tabNijk
ENDIF
iljm=il+jm
IF (iljm.NE.2) THEN
DO n=iborneninf(l,m),ibornensup(l,m)
IF(partinxyz(l,m,n))THEN
IF((k-n).GE.0) THEN
kn=k1-n
uz=tabNijk
ELSE
kn=n-k
uz=-tabNijk
ENDIF
IF ((kn.GE.1).AND.(kn.LE.nz2)) THEN
EEEx(nn,l,m,n)=EEEx(nn,l,m,n)+ux*TabEx(il,jm,kn)
EEEy(nn,l,m,n)=EEEy(nn,l,m,n)+uy*TabEy(il,jm,kn)
EEEz(nn,l,m,n)=EEEz(nn,l,m,n)+uz*TabEz(il,jm,kn)
ENDIF
ENDIF
ENDDO
ELSE
DO n=1,k
IF(partinxyz(l,m,n))THEN
kn=k1-n
IF ((kn.GE.1).AND.(kn.LE.nz2)) THEN
EEEx(nn,l,m,n)=EEEx(nn,l,m,n)+ux*TabEx(il,jm,kn)
EEEy(nn,l,m,n)=EEEy(nn,l,m,n)+uy*TabEy(il,jm,kn)
EEEz(nn,l,m,n)=EEEz(nn,l,m,n)+tabNijk*TabEz(il,jm,kn)
ENDIF
ENDIF
ENDDO
DO n=k1,nz2p1
IF(partinxyz(l,m,n))THEN
kn=n-k
IF ((kn.GE.1).AND.(kn.LE.nz2)) THEN
EEEx(nn,l,m,n)=EEEx(nn,l,m,n)+ux*TabEx(il,jm,kn)
EEEy(nn,l,m,n)=EEEy(nn,l,m,n)+uy*TabEy(il,jm,kn)
EEEz(nn,l,m,n)=EEEz(nn,l,m,n)-tabNijk*TabEz(il,jm,kn)
ENDIF
ENDIF
ENDDO
ENDIF
ENDIF
ENDDO
ENDIF
ENDDO
ENDIF
ENDDO
ENDDO
ENDDO
print *,omp_get_wtime()-debut
DO l=1,nx2p1
DO m=1,ny2p1
DO n=1,nz2p1
DO nn=1,NbrT
EEx(l,n,m)=EEx(l,m,n)+EEEx(nn,l,m,n)
EEy(l,n,m)=EEy(l,m,n)+EEEy(nn,l,m,n)
EEz(l,n,m)=EEz(l,m,n)+EEEz(nn,l,m,n)
ENDDO
ENDDO
ENDDO
ENDDO
DEALLOCATE(EEEx)
DEALLOCATE(EEEy)
DEALLOCATE(EEEz) |
Partager