Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Gyacomo
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Antoine Cyril David Hoffmann
Gyacomo
Commits
690e5640
Commit
690e5640
authored
4 years ago
by
Antoine Cyril David Hoffmann
Browse files
Options
Downloads
Patches
Plain Diff
Broadcast from rank_p 0 to all other p processes for phi computation
parent
2799bb01
Loading
Loading
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/poisson.F90
+79
-33
79 additions, 33 deletions
src/poisson.F90
with
79 additions
and
33 deletions
src/poisson.F90
+
79
−
33
View file @
690e5640
...
...
@@ -11,57 +11,103 @@ SUBROUTINE poisson
USE
prec_const
IMPLICIT
NONE
INTEGER
::
ini
,
ine
INTEGER
::
ini
,
ine
,
i_
,
world_rank
,
world_size
,
root_bcast
REAL
(
dp
)
::
Kne
,
Kni
! sub kernel factor for recursive build
REAL
(
dp
)
::
alphaD
REAL
(
dp
)
::
sum_kernel2_e
,
sum_kernel2_i
! Store sum Kn^2
COMPLEX
(
dp
)
::
sum_kernel_mom_e
,
sum_kernel_mom_i
! Store sum Kn*Napn
REAL
(
dp
)
::
gammaD
COMPLEX
(
dp
)
::
gammaD_phi
INTEGER
::
count
!! mpi integer to broadcast the electric potential at the end
COMPLEX
(
dp
)
::
buffer
(
ikrs
:
ikre
,
ikzs
:
ikze
)
!
Execution time start
CALL
cpu_time
(
t0_poisson
)
!
! Poisson can be solved only for process containing ip=1
IF
(
(
ips_e
.EQ.
1
)
.AND.
(
ips_i
.EQ.
1
)
)
THEN
DO
ikr
=
ikrs
,
ikre
DO
ikz
=
ikzs
,
ikze
! Execution time start
CALL
cpu_time
(
t0_poisson
)
!!!!!!!!!!!!! Electrons sum(Kernel * Ne0n) (skm) and sum(Kernel**2) (sk2)
sum_kernel_mom_e
=
0._dp
sum_kernel2_e
=
0._dp
! loop over n only if the max polynomial degree
DO
ine
=
1
,
jmaxe
+1
! ine = n+1
Kne
=
kernel_e
(
ine
,
ikr
,
ikz
)
sum_kernel_mom_e
=
sum_kernel_mom_e
+
Kne
*
moments_e
(
1
,
ine
,
ikr
,
ikz
,
updatetlevel
)
sum_kernel2_e
=
sum_kernel2_e
+
Kne
**
2
! ... sum recursively ...
END
DO
DO
ikr
=
ikrs
,
ikre
DO
ikz
=
ikzs
,
ikze
!!!!
!!!!!!!!!!!!!
I
ons sum(Kernel * N
i
0n) (skm) and sum(Kernel**2) (sk2)
sum_kernel_mom_
i
=
0
sum_kernel2_
i
=
0
!!!!!!!!!!!!!
Electr
ons sum(Kernel * N
e
0n) (skm) and sum(Kernel**2) (sk2)
sum_kernel_mom_
e
=
0
._dp
sum_kernel2_
e
=
0._dp
! loop over n only if the max polynomial degree
DO
in
i
=
1
,
jmax
i
+1
Kn
i
=
kernel_
i
(
in
i
,
ikr
,
ikz
)
sum_kernel_mom_
i
=
sum_kernel_mom_
i
+
Kn
i
*
moments_
i
(
1
,
in
i
,
ikr
,
ikz
,
updatetlevel
)
sum_kernel2_
i
=
sum_kernel2_
i
+
Kn
i
**
2
! ... sum recursively ...
DO
in
e
=
1
,
jmax
e
+1
! ine = n
+1
Kn
e
=
kernel_
e
(
in
e
,
ikr
,
ikz
)
sum_kernel_mom_
e
=
sum_kernel_mom_
e
+
Kn
e
*
moments_
e
(
1
,
in
e
,
ikr
,
ikz
,
updatetlevel
)
sum_kernel2_
e
=
sum_kernel2_
e
+
Kn
e
**
2
! ... sum recursively ...
END
DO
!!!!!!!!!!!!!!! Assembling the poisson equation !!!!!!!!!!!!!!!!!!!!!!!!!!
alphaD
=
(
krarray
(
ikr
)
**
2
+
kzarray
(
ikz
)
**
2
)
*
lambdaD
**
2
gammaD
=
alphaD
+
qe2_taue
*
(
1._dp
-
sum_kernel2_e
)
&
! Called Poisson_ in MOLI
+
qi2_taui
*
(
1._dp
-
sum_kernel2_i
)
!!!!!!!!!!!!!!!!! Ions sum(Kernel * Ni0n) (skm) and sum(Kernel**2) (sk2)
sum_kernel_mom_i
=
0
sum_kernel2_i
=
0
! loop over n only if the max polynomial degree
DO
ini
=
1
,
jmaxi
+1
Kni
=
kernel_i
(
ini
,
ikr
,
ikz
)
sum_kernel_mom_i
=
sum_kernel_mom_i
+
Kni
*
moments_i
(
1
,
ini
,
ikr
,
ikz
,
updatetlevel
)
sum_kernel2_i
=
sum_kernel2_i
+
Kni
**
2
! ... sum recursively ...
END
DO
!!!!!!!!!!!!!!! Assembling the poisson equation !!!!!!!!!!!!!!!!!!!!!!!!!!
alphaD
=
(
krarray
(
ikr
)
**
2
+
kzarray
(
ikz
)
**
2
)
*
lambdaD
**
2
gammaD
=
alphaD
+
qe2_taue
*
(
1._dp
-
sum_kernel2_e
)
&
! Called Poisson_ in MOLI
+
qi2_taui
*
(
1._dp
-
sum_kernel2_i
)
gammaD_phi
=
q_e
*
sum_kernel_mom_e
+
q_i
*
sum_kernel_mom_i
gammaD_phi
=
q_e
*
sum_kernel_mom_e
+
q_i
*
sum_kernel_mom_i
phi
(
ikr
,
ikz
)
=
gammaD_phi
/
gammaD
phi
(
ikr
,
ikz
)
=
gammaD_phi
/
gammaD
END
DO
END
DO
END
DO
! Cancel origin singularity
IF
((
ikr_0
.GE.
ikrs
)
.AND.
(
ikr_0
.LE.
ikre
))
phi
(
ikr_0
,
ikz_0
)
=
0
! Cancel origin singularity
IF
((
ikr_0
.GE.
ikrs
)
.AND.
(
ikr_0
.LE.
ikre
))
phi
(
ikr_0
,
ikz_0
)
=
0
! Execution time end
CALL
cpu_time
(
t1_poisson
)
tc_poisson
=
tc_poisson
+
(
t1_poisson
-
t0_poisson
)
ENDIF
CALL
cpu_time
(
t0_comm
)
root_bcast
=
0
! Proc zero computes phi for every p
!!!!! This is a manual way to do MPI_BCAST !!!!!!!!!!!
CALL
MPI_COMM_RANK
(
commp
,
world_rank
,
ierr
)
CALL
MPI_COMM_SIZE
(
commp
,
world_size
,
ierr
)
! Execution time end
CALL
cpu_time
(
t1_poisson
)
tc_poisson
=
tc_poisson
+
(
t1_poisson
-
t0_poisson
)
IF
(
world_size
.GT.
1
)
THEN
!! Broadcast phi to the other processes on the same k range (communicator along p)
IF
(
world_rank
.EQ.
root_bcast
)
THEN
! Fill the buffer
DO
ikr
=
ikrs
,
ikre
DO
ikz
=
ikzs
,
ikze
buffer
(
ikr
,
ikz
)
=
phi
(
ikr
,
ikz
)
ENDDO
ENDDO
! Send it to all the other processes
DO
i_
=
0
,
num_procs_p
-1
IF
(
i_
.NE.
world_rank
)
&
CALL
MPI_SEND
(
buffer
,
local_nkr
*
nkz
,
MPI_DOUBLE_COMPLEX
,
i_
,
0
,
commp
,
ierr
)
ENDDO
ELSE
! Recieve buffer from root
CALL
MPI_RECV
(
buffer
,
local_nkr
*
nkz
,
MPI_DOUBLE_COMPLEX
,
root_bcast
,
0
,
commp
,
MPI_STATUS_IGNORE
,
ierr
)
! Write it in phi
DO
ikr
=
ikrs
,
ikre
DO
ikz
=
ikzs
,
ikze
phi
(
ikr
,
ikz
)
=
buffer
(
ikr
,
ikz
)
ENDDO
ENDDO
ENDIF
ENDIF
CALL
cpu_time
(
t1_comm
)
tc_comm
=
tc_comm
+
(
t1_comm
-
t0_comm
)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
END
SUBROUTINE
poisson
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment