diff --git a/src/auxval.F90 b/src/auxval.F90 index 3dff0e00d591202c44023a12f24d05187485909e..577389d106409212b217fc3d7516f5945639b57d 100644 --- a/src/auxval.F90 +++ b/src/auxval.F90 @@ -4,6 +4,7 @@ subroutine auxval USE basic USE grid USE array + USE model USE fourier, ONLY: init_grid_distr_and_plans, alloc_local_1, alloc_local_2 use prec_const IMPLICIT NONE @@ -11,14 +12,18 @@ subroutine auxval INTEGER :: irows,irowe, irow, icol, i_ IF (my_id .EQ. 0) WRITE(*,*) '=== Set auxiliary values ===' - CALL init_grid_distr_and_plans(Nr,Nz) + IF (NON_LIN) THEN + CALL init_grid_distr_and_plans(Nr,Nz) + ELSE + CALL init_1Dgrid_distr + ENDIF - CALL set_krgrid ! MPI Distributed dimension + CALL set_pgrid + CALL set_jgrid + CALL set_krgrid ! MPI Distributed dimension CALL set_kzgrid - CALL set_pj - CALL memory ! Allocate memory for global arrays DO i_ = 0,num_procs-1 diff --git a/src/grid_mod.F90 b/src/grid_mod.F90 index 07f48202618583bc513e5640832a0fb247e934a0..f4e639138d049ad2fa0e1e73b6c64b6d66b27312 100644 --- a/src/grid_mod.F90 +++ b/src/grid_mod.F90 @@ -55,16 +55,28 @@ MODULE grid INTEGER, PUBLIC, PROTECTED :: ips_i,ipe_i, ijs_i,ije_i ! Public Functions - PUBLIC :: set_pj + PUBLIC :: init_1Dgrid_distr + PUBLIC :: set_pgrid, set_jgrid PUBLIC :: set_krgrid, set_kzgrid PUBLIC :: grid_readinputs, grid_outputinputs PUBLIC :: bare, bari CONTAINS - SUBROUTINE set_pj + SUBROUTINE init_1Dgrid_distr + + write(*,*) Nr + local_nkr = (Nr/2+1)/num_procs + write(*,*) local_nkr + local_nkr_offset = my_id*local_nkr + + if (my_id .EQ. num_procs-1) local_nkr = (Nr/2+1)-local_nkr_offset + + END SUBROUTINE init_1Dgrid_distr + + SUBROUTINE set_pgrid USE prec_const IMPLICIT NONE - INTEGER :: ip, ij + INTEGER :: ip ips_e = 1; ipe_e = pmaxe/(1+pskip) + 1 ips_i = 1; ipe_i = pmaxi/(1+pskip) + 1 @@ -73,6 +85,13 @@ CONTAINS DO ip = ips_e,ipe_e; parray_e(ip) = (ip-1); END DO DO ip = ips_i,ipe_i; parray_i(ip) = (ip-1); END DO + END SUBROUTINE set_pgrid + + SUBROUTINE set_jgrid + USE prec_const + IMPLICIT NONE + INTEGER :: ij + ijs_e = 1; ije_e = jmaxe + 1 ijs_i = 1; ije_i = jmaxi + 1 ALLOCATE(jarray_e(ijs_e:ije_e)) @@ -81,80 +100,81 @@ CONTAINS DO ij = ijs_i,ije_i; jarray_i(ij) = ij-1; END DO maxj = MAX(jmaxi, jmaxe) - END SUBROUTINE set_pj - + END SUBROUTINE set_jgrid - SUBROUTINE set_krgrid - USE prec_const - IMPLICIT NONE - INTEGER :: i_ - Nkr = Nr/2+1 ! Defined only on positive kr since fields are real - ! Start and END indices of grid - ikrs = local_nkr_offset + 1 - ikre = ikrs + local_nkr - 1 - - ! Grid spacings - IF (Lr .EQ. 0) THEN - deltakr = 1._dp + SUBROUTINE set_krgrid + USE prec_const + IMPLICIT NONE + INTEGER :: i_ + + Nkr = Nr/2+1 ! Defined only on positive kr since fields are real + ! Start and END indices of grid + ikrs = local_nkr_offset + 1 + ikre = ikrs + local_nkr - 1 + ALLOCATE(krarray(ikrs:ikre)) + + ! Grid spacings + IF (Lr .EQ. 0) THEN + deltakr = 1._dp + ELSE + deltakr = 2._dp*PI/Lr + ENDIF + + ! Discretized kr positions ordered as dk*(0 1 2 3) + DO ikr = ikrs,ikre + krarray(ikr) = REAL(ikr-1,dp) * deltakr + IF (krarray(ikr) .EQ. 0) ikr_0 = ikr + END DO + + ! Orszag 2/3 filter + two_third_krmax = 2._dp/3._dp*deltakr*Nkr + ALLOCATE(AA_r(ikrs:ikre)) + DO ikr = ikrs,ikre + IF ( (krarray(ikr) .LT. two_third_krmax) ) THEN + AA_r(ikr) = 1._dp; ELSE - deltakr = 2._dp*PI/Lr + AA_r(ikr) = 0._dp; ENDIF + END DO + END SUBROUTINE set_krgrid - ! Discretized kr positions ordered as dk*(0 1 2 3) - ALLOCATE(krarray(ikrs:ikre)) - DO ikr = ikrs,ikre - krarray(ikr) = REAL(ikr-1,dp) * deltakr - IF (krarray(ikr) .EQ. 0) ikr_0 = ikr - END DO - - ! Orszag 2/3 filter - two_third_krmax = 2._dp/3._dp*deltakr*Nkr - ALLOCATE(AA_r(ikrs:ikre)) - DO ikr = ikrs,ikre - IF ( (krarray(ikr) .LT. two_third_krmax) ) THEN - AA_r(ikr) = 1._dp; - ELSE - AA_r(ikr) = 0._dp; - ENDIF - END DO - END SUBROUTINE set_krgrid - - SUBROUTINE set_kzgrid - USE prec_const - IMPLICIT NONE - INTEGER :: i_ - - Nkz = Nz; - ! Start and END indices of grid - ikzs = 1 - ikze = Nkz - - ! Grid spacings - IF (Lz .EQ. 0) THEN - deltakz = 1._dp - ELSE - deltakz = 2._dp*PI/Lz - ENDIF - ! Discretized kz positions ordered as dk*(0 1 2 3 -2 -1) - ALLOCATE(kzarray(ikzs:ikze)) + SUBROUTINE set_kzgrid + USE prec_const + IMPLICIT NONE + INTEGER :: i_ + + Nkz = Nz; + ! Start and END indices of grid + ikzs = 1 + ikze = Nkz + ALLOCATE(kzarray(ikzs:ikze)) + + ! Grid spacings and discretized kz positions ordered as dk*(0 1 2 3 -2 -1) + IF (Lz .EQ. 0) THEN ! 1D linear case + deltakz = 1._dp + kzarray(1) = 0 + ikz_0 = 1 + ELSE + deltakz = 2._dp*PI/Lz DO ikz = ikzs,ikze kzarray(ikz) = deltakz*(MODULO(ikz-1,Nkz/2)-Nkz/2*FLOOR(2.*real(ikz-1)/real(Nkz))) if (ikz .EQ. Nz/2+1) kzarray(ikz) = -kzarray(ikz) IF (kzarray(ikz) .EQ. 0) ikz_0 = ikz END DO - - ! Orszag 2/3 filter - two_third_kzmax = 2._dp/3._dp*deltakz*(Nkz/2); - ALLOCATE(AA_z(ikzs:ikze)) - DO ikz = ikzs,ikze - IF ( (kzarray(ikz) .GT. -two_third_kzmax) .AND. (kzarray(ikz) .LT. two_third_kzmax) ) THEN - AA_z(ikz) = 1._dp; - ELSE - AA_z(ikz) = 0._dp; - ENDIF - END DO - END SUBROUTINE set_kzgrid + ENDIF + + ! Orszag 2/3 filter + two_third_kzmax = 2._dp/3._dp*deltakz*(Nkz/2); + ALLOCATE(AA_z(ikzs:ikze)) + DO ikz = ikzs,ikze + IF ( (kzarray(ikz) .GT. -two_third_kzmax) .AND. (kzarray(ikz) .LT. two_third_kzmax) ) THEN + AA_z(ikz) = 1._dp; + ELSE + AA_z(ikz) = 0._dp; + ENDIF + END DO + END SUBROUTINE set_kzgrid SUBROUTINE grid_readinputs ! Read the input parameters diff --git a/src/stepon.F90 b/src/stepon.F90 index 7a2b1438315b7032b0739133f95c4d2b6de9975d..07906739aca661ae73584ac61a81dedaa4981d2e 100644 --- a/src/stepon.F90 +++ b/src/stepon.F90 @@ -61,7 +61,7 @@ SUBROUTINE stepon ! Execution time start CALL cpu_time(t0_checkfield) - IF ( ikrs .EQ. 1 ) CALL enforce_symetry() ! Enforcing symmetry on kr = 0 + IF ( (ikrs .EQ. 1) .AND. (NON_LIN) ) CALL enforce_symetry() ! Enforcing symmetry on kr = 0 mlend=.FALSE. IF(.NOT.nlend) THEN