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
130acad6
Commit
130acad6
authored
1 year ago
by
Antoine Cyril David Hoffmann
Browse files
Options
Downloads
Patches
Plain Diff
need of an xgrid array and local_nx
parent
8229e56c
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/grid_mod.F90
+45
-27
45 additions, 27 deletions
src/grid_mod.F90
with
45 additions
and
27 deletions
src/grid_mod.F90
+
45
−
27
View file @
130acad6
...
@@ -57,7 +57,8 @@ MODULE grid
...
@@ -57,7 +57,8 @@ MODULE grid
INTEGER
,
PUBLIC
,
PROTECTED
::
local_np
INTEGER
,
PUBLIC
,
PROTECTED
::
local_np
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nj
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nj
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nky
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nky
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nkx
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nkx
! = total_Nkx = Nx, not parallel
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nx
! = local_nx_ptr from FFTW (used only for Fourier)
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nz
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nz
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nkp
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nkp
INTEGER
,
PUBLIC
,
PROTECTED
::
ngp
,
ngj
,
ngx
,
ngy
,
ngz
! number of ghosts points
INTEGER
,
PUBLIC
,
PROTECTED
::
ngp
,
ngj
,
ngx
,
ngy
,
ngz
! number of ghosts points
...
@@ -68,10 +69,11 @@ MODULE grid
...
@@ -68,10 +69,11 @@ MODULE grid
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nj_offset
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nj_offset
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nky_offset
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nky_offset
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nkx_offset
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nkx_offset
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nx_offset
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nz_offset
INTEGER
,
PUBLIC
,
PROTECTED
::
local_nz_offset
! C-pointer type for FFTW3
! C-pointer type for FFTW3
integer
(
C_INTPTR_T
),
PUBLIC
,
PROTECTED
::
local_n
k
x_ptr
,
local_nky_ptr
integer
(
C_INTPTR_T
),
PUBLIC
,
PROTECTED
::
local_nx_ptr
,
local_nky_ptr
integer
(
C_INTPTR_T
),
PUBLIC
,
PROTECTED
::
local_n
k
x_ptr_offset
,
local_nky_ptr_offset
integer
(
C_INTPTR_T
),
PUBLIC
,
PROTECTED
::
local_nx_ptr_offset
,
local_nky_ptr_offset
! Grid spacing and limits
! Grid spacing and limits
REAL
(
xp
),
PUBLIC
,
PROTECTED
::
deltap
,
deltaz
,
inv_deltaz
,
inv_dkx
REAL
(
xp
),
PUBLIC
,
PROTECTED
::
deltap
,
deltaz
,
inv_deltaz
,
inv_dkx
REAL
(
xp
),
PUBLIC
,
PROTECTED
::
deltakx
,
deltaky
,
deltax
,
kx_max
,
ky_max
,
kx_min
,
ky_min
!, kp_max
REAL
(
xp
),
PUBLIC
,
PROTECTED
::
deltakx
,
deltaky
,
deltax
,
kx_max
,
ky_max
,
kx_min
,
ky_min
!, kp_max
...
@@ -198,7 +200,7 @@ CONTAINS
...
@@ -198,7 +200,7 @@ CONTAINS
!! Parallel distribution of kx ky grid
!! Parallel distribution of kx ky grid
IF
(
LINEARITY
.NE.
'linear'
)
THEN
! we let FFTW distribute if we use it
IF
(
LINEARITY
.NE.
'linear'
)
THEN
! we let FFTW distribute if we use it
IF
(
my_id
.EQ.
0
)
write
(
*
,
*
)
'FFTW3 y-grid distribution'
IF
(
my_id
.EQ.
0
)
write
(
*
,
*
)
'FFTW3 y-grid distribution'
CALL
init_grid_distr_and_plans
(
FFT2D
,
Nx
,
Ny
,
comm_ky
,
local_n
k
x_ptr
,
local_n
k
x_ptr_offset
,
local_nky_ptr
,
local_nky_ptr_offset
)
CALL
init_grid_distr_and_plans
(
FFT2D
,
Nx
,
Ny
,
comm_ky
,
local_nx_ptr
,
local_nx_ptr_offset
,
local_nky_ptr
,
local_nky_ptr_offset
)
ELSE
! otherwise we distribute equally
ELSE
! otherwise we distribute equally
IF
(
my_id
.EQ.
0
)
write
(
*
,
*
)
'Manual y-grid distribution'
IF
(
my_id
.EQ.
0
)
write
(
*
,
*
)
'Manual y-grid distribution'
! balanced distribution among the processes
! balanced distribution among the processes
...
@@ -207,30 +209,32 @@ CONTAINS
...
@@ -207,30 +209,32 @@ CONTAINS
local_nky_ptr_offset
=
ikys
-
1
local_nky_ptr_offset
=
ikys
-
1
ENDIF
ENDIF
!!----------------- BINORMAL KY INDICES (parallelized)
!!----------------- BINORMAL KY INDICES (parallelized)
Nky
=
Ny
/
2+1
! Defined only on positive kx since fields are real
Nky
=
Ny
/
2+1
! Defined only on positive kx since fields are real
total_nky
=
Nky
total_nky
=
Nky
Ngy
=
0
! no ghosts cells in ky
Ngy
=
0
! no ghosts cells in ky
ikys
=
local_nky_ptr_offset
+
1
ikys
=
local_nky_ptr_offset
+
1
ikye
=
ikys
+
local_nky_ptr
-
1
ikye
=
ikys
+
local_nky_ptr
-
1
local_nky
=
ikye
-
ikys
+
1
local_nky
=
ikye
-
ikys
+
1
local_nky_offset
=
local_nky_ptr_offset
local_nky_offset
=
local_nky_ptr_offset
ALLOCATE
(
kyarray_full
(
Nky
))
ALLOCATE
(
kyarray_full
(
Nky
))
ALLOCATE
(
kyarray
(
local_nky
))
ALLOCATE
(
kyarray
(
local_nky
))
ALLOCATE
(
ikyarray
(
local_n
ky
))
ALLOCATE
(
ikyarray
(
N
ky
))
ALLOCATE
(
inv_ikyarray
(
local_n
ky
))
ALLOCATE
(
inv_ikyarray
(
N
ky
))
ALLOCATE
(
AA_y
(
local_nky
))
ALLOCATE
(
AA_y
(
local_nky
))
!!---------------- RADIAL KX INDICES (not parallelized)
!!---------------- RADIAL KX INDICES (not parallelized)
Nkx
=
Nx
Nkx
=
Nx
total_nkx
=
Nx
total_nkx
=
Nx
ikxs
=
1
ikxs
=
1
ikxe
=
total_nkx
ikxe
=
total_nkx
local_nkx_ptr
=
ikxe
-
ikxs
+
1
local_nkx
=
ikxe
-
ikxs
+
1
local_nkx
=
ikxe
-
ikxs
+
1
local_nkx_offset
=
ikxs
-
1
local_nkx_offset
=
ikxs
-
1
ALLOCATE
(
kxarray_full
(
total_nkx
))
ALLOCATE
(
kxarray_full
(
total_nkx
))
ALLOCATE
(
kxarray
(
local_nky
,
local_Nkx
))
ALLOCATE
(
kxarray
(
local_nky
,
local_Nkx
))
ALLOCATE
(
xarray
(
total_nkx
))
ALLOCATE
(
AA_x
(
local_nkx
))
ALLOCATE
(
AA_x
(
local_nkx
))
!!---------------- RADIAL X GRID (only for Fourier routines)
local_nx
=
local_nx_ptr
local_nx_offset
=
local_nx_ptr_offset
ALLOCATE
(
xarray
(
Nx
))
!!---------------- PARALLEL Z GRID (parallelized)
!!---------------- PARALLEL Z GRID (parallelized)
total_nz
=
Nz
total_nz
=
Nz
IF
(
SG
)
THEN
IF
(
SG
)
THEN
...
@@ -299,6 +303,7 @@ CONTAINS
...
@@ -299,6 +303,7 @@ CONTAINS
CALL
set_jgrid
CALL
set_jgrid
CALL
set_kygrid
(
LINEARITY
,
N_HD
)
CALL
set_kygrid
(
LINEARITY
,
N_HD
)
CALL
set_kxgrid
(
shear
,
Npol
,
1._xp
,
LINEARITY
,
N_HD
)
! this will be redone after geometry if Cyq0_x0 .NE. 1
CALL
set_kxgrid
(
shear
,
Npol
,
1._xp
,
LINEARITY
,
N_HD
)
! this will be redone after geometry if Cyq0_x0 .NE. 1
CALL
set_xgrid
CALL
set_zgrid
(
Npol
)
CALL
set_zgrid
(
Npol
)
END
SUBROUTINE
set_grids
END
SUBROUTINE
set_grids
...
@@ -428,6 +433,13 @@ CONTAINS
...
@@ -428,6 +433,13 @@ CONTAINS
! Build the full grids on process 0 to diagnose it without comm
! Build the full grids on process 0 to diagnose it without comm
DO
iky
=
1
,
Nky
DO
iky
=
1
,
Nky
kyarray_full
(
iky
)
=
REAL
(
iky
-1
,
xp
)
*
deltaky
kyarray_full
(
iky
)
=
REAL
(
iky
-1
,
xp
)
*
deltaky
! full indices grid (for ExB NL factor)
ikyarray
(
iky
)
=
REAL
((
iky
)
-1
,
xp
)
IF
(
ikyarray
(
iky
)
.GT.
0
)
THEN
inv_ikyarray
(
iky
)
=
1._xp
/
ikyarray
(
iky
)
ELSE
inv_ikyarray
(
iky
)
=
0._xp
ENDIF
END
DO
END
DO
local_kymax
=
0._xp
local_kymax
=
0._xp
! Creating a grid ordered as dk*(0 1 2 3)
! Creating a grid ordered as dk*(0 1 2 3)
...
@@ -442,12 +454,6 @@ CONTAINS
...
@@ -442,12 +454,6 @@ CONTAINS
SINGLE_KY
=
.TRUE.
SINGLE_KY
=
.TRUE.
ELSE
ELSE
kyarray
(
iky
)
=
kyarray_full
(
iky
+
local_nky_offset
)
kyarray
(
iky
)
=
kyarray_full
(
iky
+
local_nky_offset
)
ikyarray
(
iky
)
=
REAL
((
iky
+
local_nky_offset
)
-1
,
xp
)
IF
(
ikyarray
(
iky
)
.GT.
0
)
THEN
inv_ikyarray
(
iky
)
=
1._xp
/
ikyarray
(
iky
)
ELSE
inv_ikyarray
(
iky
)
=
0._xp
ENDIF
ENDIF
ENDIF
! Finding kx=0
! Finding kx=0
IF
(
kyarray
(
iky
)
.EQ.
0
)
THEN
IF
(
kyarray
(
iky
)
.EQ.
0
)
THEN
...
@@ -503,13 +509,11 @@ CONTAINS
...
@@ -503,13 +509,11 @@ CONTAINS
ENDIF
ENDIF
deltakx
=
2._xp
*
PI
/
Lx
deltakx
=
2._xp
*
PI
/
Lx
inv_dkx
=
1._xp
/
deltakx
inv_dkx
=
1._xp
/
deltakx
deltax
=
Lx
/
REAL
(
Nx
,
xp
)
! periodic donc pas Lx/(Nx-1)
IF
(
MODULO
(
total_nkx
,
2
)
.EQ.
0
)
THEN
! Even number of kx (-2 -1 0 1 2 3)
IF
(
MODULO
(
total_nkx
,
2
)
.EQ.
0
)
THEN
! Even number of kx (-2 -1 0 1 2 3)
! Creating a grid ordered as dk*(0 1 2 3 -2 -1)
! Creating a grid ordered as dk*(0 1 2 3 -2 -1)
DO
ikx
=
1
,
total_nkx
DO
ikx
=
1
,
total_nkx
kxarray_full
(
ikx
)
=
deltakx
*
REAL
(
MODULO
(
ikx
-1
,
total_nkx
/
2
)
-
(
total_nkx
/
2
)
*
FLOOR
(
2.
*
real
(
ikx
-1
)/
real
(
total_nkx
)),
xp
)
kxarray_full
(
ikx
)
=
deltakx
*
REAL
(
MODULO
(
ikx
-1
,
total_nkx
/
2
)
-
(
total_nkx
/
2
)
*
FLOOR
(
2.
*
real
(
ikx
-1
)/
real
(
total_nkx
)),
xp
)
IF
(
ikx
.EQ.
total_nkx
/
2+1
)
kxarray_full
(
ikx
)
=
-
kxarray_full
(
ikx
)
IF
(
ikx
.EQ.
total_nkx
/
2+1
)
kxarray_full
(
ikx
)
=
-
kxarray_full
(
ikx
)
xarray
(
ikx
)
=
REAL
(
ikx
-1
,
xp
)
*
deltax
END
DO
END
DO
kx_max
=
MAXVAL
(
kxarray_full
)
!(total_nkx/2)*deltakx
kx_max
=
MAXVAL
(
kxarray_full
)
!(total_nkx/2)*deltakx
kx_min
=
MINVAL
(
kxarray_full
)
!-kx_max+deltakx
kx_min
=
MINVAL
(
kxarray_full
)
!-kx_max+deltakx
...
@@ -554,6 +558,20 @@ CONTAINS
...
@@ -554,6 +558,20 @@ CONTAINS
ENDIF
ENDIF
END
SUBROUTINE
set_kxgrid
END
SUBROUTINE
set_kxgrid
!----------- Radial x grid
! used only for the computation of the ExB shear NL factor
SUBROUTINE
set_xgrid
USE
prec_const
IMPLICIT
NONE
INTEGER
::
ix
deltax
=
Lx
/
REAL
(
Nx
,
xp
)
! periodic donc pas Lx/(Nx-1)
! full xgrid
DO
ix
=
1
,
Nx
xarray
(
ix
)
=
REAL
(
ix
-1
,
xp
)
*
deltax
ENDDO
END
SUBROUTINE
set_xgrid
!----------- Parallel z grid
SUBROUTINE
set_zgrid
(
Npol
)
SUBROUTINE
set_zgrid
(
Npol
)
USE
prec_const
USE
prec_const
IMPLICIT
NONE
IMPLICIT
NONE
...
...
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