diff --git a/GKCoulomb/Tljpmf/fort.90 b/GKCoulomb/Tljpmf/fort.90 index d4f7e19..6608dd7 100644 --- a/GKCoulomb/Tljpmf/fort.90 +++ b/GKCoulomb/Tljpmf/fort.90 @@ -1,20 +1,16 @@ &BASIC -! Number of coefficient to be calculated. Should be equal to the number of -! lines contained in the Tljpmf_indices.csv file -NbOfCoeffs = 4536 - ! restart from previous calculation restart = .false. / &MODEL_PAR ! Component to compute coll_type = 'field' ! Define colliding species coll_ab = 'ie' mu = 0.0027 ! me/mi tau = 1 ! Te/Ti / diff --git a/GKCoulomb/Tljpmf/src/basic_mod.f90 b/GKCoulomb/Tljpmf/src/basic_mod.f90 index 9fb5a56..ca09fe9 100644 --- a/GKCoulomb/Tljpmf/src/basic_mod.f90 +++ b/GKCoulomb/Tljpmf/src/basic_mod.f90 @@ -1,309 +1,325 @@ MODULE basic ! Basic module USE prec_const USE FMZM IMPLICIT NONE ! ! input dimension ! integer :: mdim,pdim,fdim,jdim,ldim ! character*3 :: mdim_str,pdim_str,fdim_str,jdim_str,ldim_str ! restart flag logical :: restart ! List of logical file units INTEGER :: lu_in = 90 ! File duplicated from STDIN ! Output format KOUT CHARACTER(len=7) :: FMFRMT = 'F100.20' ! Range of NN T5 coefficient to compute INTEGER :: idxMAXs,idxMAXe ! ! ! NN T5 list ! Number of NBOFT5 to compute INTEGER :: NbOfCoeffs ! max and min indices per MPI process INTEGER :: lmin_l,jmin_l,pmin_l,mmin_l,fmin_l INTEGER :: lmax_l,jmax_l,pmax_l,mmax_l,fmax_l INTEGER :: tmin_l,tmax_l ! Number max of Ekrfab/ekab to compute INTEGER :: ERFMAX = 200 ! MPI Stuff ! MPI handles and variables INTEGER :: ierr ! flag for MPI error INTEGER :: nprocs ! number of processors INTEGER :: me =0 ! Rank of processor CHARACTER(6) :: me_str ! string containing Rank of MPI proc. ! Local idx INTEGER :: iNN_s_l,iNN_e_L INTEGER :: chksz INTEGER :: nbNN_l ! CPU TIME in s REAL(dp) :: start_time REAL(dp):: end_time REAL(dp) :: cpu_ellapsed_time ! ! MPI WALL TIME REAL(dp) :: starttime REAL(dp) :: endtime ! system clock INTEGER :: count_start,count_rate,count_stop REAL(dp) :: system_ellapsed_time INTEGER,PARAMETER :: T5len= 100 INTEGER,PARAMETER :: NNLKMPJlen = 14 INTERFACE allocate_array MODULE PROCEDURE allocate_array_dp1,allocate_array_dp2,allocate_array_dp3,allocate_array_dp4 MODULE PROCEDURE allocate_array_fm1,allocate_array_fm2,allocate_array_fm3,allocate_array_fm5 MODULE PROCEDURE allocate_array_dc1,allocate_array_dc2,allocate_array_dc3,allocate_array_dc4 MODULE PROCEDURE allocate_array_i1,allocate_array_i2,allocate_array_i3,allocate_array_i4 MODULE PROCEDURE allocate_array_l1,allocate_array_l2,allocate_array_l3,allocate_array_l4 MODULE PROCEDURE allocate_array_str5 END INTERFACE allocate_array CONTAINS !================================================================================ SUBROUTINE basic_data ! Read basic data from input file use prec_const IMPLICIT NONE + + !locs. vars. + INTEGER :: buff_, NN, ENDOF, fid + ! Namelist - NAMELIST /BASIC/NbOfCoeffs,restart + NAMELIST /BASIC/ restart ! ! READ INPUT BASIC IF( me .ne. 0 ) GOTO 110 READ(lu_in,basic) WRITE(*,basic) 110 CONTINUE ! ! Broadcast from PE 0 to ! - CALL MPI_bcast(NbOfCoeffs,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) CALL MPI_bcast(restart,1,MPI_LOGICAL,0,MPI_COMM_WORLD,ierr) ! + ! get number of coeff to be cumputed and distributed along the MPI tasks + OPEN(fid,FILE = 'indices.in') + ! + NN = 0 + ENDOF = 0 + DO WHILE (ENDOF .eq. 0) + READ(fid,*,IOSTAT=ENDOF) buff_ + NN = NN +1 + ENDDO + CLOSE(fid) + ! + NbOfCoeffs = NN -1 + print*, 'Numer of coefficients to be computed: ', NbOfCoeffs ! END SUBROUTINE basic_data !================================================================================ SUBROUTINE daytim(str) ! Print date and time use prec_const IMPLICIT NONE CHARACTER(len=*) , INTENT(in) :: str CHARACTER(len=16) :: d, t, dat, time !________________________________________________________________________________ ! CALL DATE_AND_TIME(d,t) dat=d(7:8) // '/' // d(5:6) // '/' // d(1:4) time=t(1:2) // ':' // t(3:4) // ':' // t(5:10) IF( me .eq. 0) WRITE(*,'(a,1x,a,1x,a)') str, dat(1:10), time(1:12) ! END SUBROUTINE daytim !================================================================================ SUBROUTINE clock(endorstart) ! IMPLICIT NONE ! INTEGER,INTENT(IN) :: endorstart ! IF(endorstart .eq. 1) THEN CALL system_clock(count = count_start, count_rate = count_rate) ELSEIF (endorstart .eq. -1) THEN CALL system_clock(count = count_stop) system_ellapsed_time = real(count_stop - count_start)/real( count_rate) ENDIF ! END SUBROUTINE clock !================================================================================ ! To allocate arrays of doubles, integers, etc. at run time SUBROUTINE allocate_array_dp1(a,is1,ie1) real(dp), DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1 ALLOCATE(a(is1:ie1)) a=0.0_dp END SUBROUTINE allocate_array_dp1 SUBROUTINE allocate_array_dp2(a,is1,ie1,is2,ie2) real(dp), DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2 ALLOCATE(a(is1:ie1,is2:ie2)) a=0.0_dp END SUBROUTINE allocate_array_dp2 SUBROUTINE allocate_array_dp3(a,is1,ie1,is2,ie2,is3,ie3) real(dp), DIMENSION(:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3)) a=0.0_dp END SUBROUTINE allocate_array_dp3 SUBROUTINE allocate_array_dp4(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4) real(dp), DIMENSION(:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4)) a=0.0_dp END SUBROUTINE allocate_array_dp4 !__________________ TO ALLOCATE FM ARRAYS_________________ SUBROUTINE allocate_array_fm2(a,is1,ie1,is2,ie2) TYPE(FM), DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2 ALLOCATE(a(is1:ie1,is2:ie2)) a=TO_FM('0.0') END SUBROUTINE allocate_array_fm2 SUBROUTINE allocate_array_fm1(a,is1,ie1) TYPE(FM), DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1 ALLOCATE(a(is1:ie1)) a=TO_FM('0.0') END SUBROUTINE allocate_array_fm1 SUBROUTINE allocate_array_fm3(a,is1,ie1,is2,ie2,is3,ie3) TYPE(FM), DIMENSION(:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3)) a=TO_FM('0.0') END SUBROUTINE allocate_array_fm3 SUBROUTINE allocate_array_fm5(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5) TYPE(FM), DIMENSION(:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4,is5:ie5)) a=TO_FM('0.0') END SUBROUTINE allocate_array_fm5 SUBROUTINE allocate_array_dc1(a,is1,ie1) DOUBLE COMPLEX, DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1 ALLOCATE(a(is1:ie1)) a=CMPLX(0.0_dp,0.0_dp) END SUBROUTINE allocate_array_dc1 SUBROUTINE allocate_array_dc2(a,is1,ie1,is2,ie2) DOUBLE COMPLEX, DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2 ALLOCATE(a(is1:ie1,is2:ie2)) a=CMPLX(0.0_dp,0.0_dp) END SUBROUTINE allocate_array_dc2 SUBROUTINE allocate_array_dc3(a,is1,ie1,is2,ie2,is3,ie3) DOUBLE COMPLEX, DIMENSION(:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3)) a=CMPLX(0.0_dp,0.0_dp) END SUBROUTINE allocate_array_dc3 SUBROUTINE allocate_array_dc4(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4) DOUBLE COMPLEX, DIMENSION(:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4)) a=CMPLX(0.0_dp,0.0_dp) END SUBROUTINE allocate_array_dc4 SUBROUTINE allocate_array_i1(a,is1,ie1) INTEGER, DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1 ALLOCATE(a(is1:ie1)) a=0 END SUBROUTINE allocate_array_i1 SUBROUTINE allocate_array_i2(a,is1,ie1,is2,ie2) INTEGER, DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2 ALLOCATE(a(is1:ie1,is2:ie2)) a=0 END SUBROUTINE allocate_array_i2 SUBROUTINE allocate_array_i3(a,is1,ie1,is2,ie2,is3,ie3) INTEGER, DIMENSION(:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3)) a=0 END SUBROUTINE allocate_array_i3 SUBROUTINE allocate_array_i4(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4) INTEGER, DIMENSION(:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4)) a=0 END SUBROUTINE allocate_array_i4 SUBROUTINE allocate_array_l1(a,is1,ie1) LOGICAL, DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1 ALLOCATE(a(is1:ie1)) a=.false. END SUBROUTINE allocate_array_l1 SUBROUTINE allocate_array_l2(a,is1,ie1,is2,ie2) LOGICAL, DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2 ALLOCATE(a(is1:ie1,is2:ie2)) a=.false. END SUBROUTINE allocate_array_l2 SUBROUTINE allocate_array_l3(a,is1,ie1,is2,ie2,is3,ie3) LOGICAL, DIMENSION(:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3)) a=.false. END SUBROUTINE allocate_array_l3 SUBROUTINE allocate_array_l4(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4) LOGICAL, DIMENSION(:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4)) a=.false. END SUBROUTINE allocate_array_l4 SUBROUTINE allocate_array_str5(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5) CHARACTER(T5len), DIMENSION(:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4,is5:ie5)) a='0' END SUBROUTINE allocate_array_str5 SUBROUTINE print_FM(iout,XIN) ! print XIN Type FM variable USE FMZM IMPLICIT NONE ! INTEGER,INTENT(IN) :: iout TYPE(FM),INTENT(IN) :: XIN CHARACTER(100) :: ST1 ! CALL FM_ENTER_USER_ROUTINE ! ! print XIN IF( iout .eq. 0 ) THEN CALL FM_FORM(FMFRMT, XIN,ST1) WRITE(*,*) ADJUSTL(TRIM(ST1)) ELSE CALL FM_FORM(FMFRMT, XIN,ST1) WRITE(iout,*) ADJUSTL(TRIM(ST1)) ENDIF ! CALL FM_ENTER_USER_ROUTINE ! END SUBROUTINE print_FM END MODULE basic diff --git a/GKCoulomb/curlyNpjmn/fort.90 b/GKCoulomb/curlyNpjmn/fort.90 index 23fc6bb..399efdc 100644 --- a/GKCoulomb/curlyNpjmn/fort.90 +++ b/GKCoulomb/curlyNpjmn/fort.90 @@ -1,8 +1,8 @@ &BASIC -pmax = 25 -jmax = 15 -NbOfCoeffs = 31744 -idmaxT5=30 -T5dir = '/misc/bjfrei/coeffs_backup/T5src/' +! hermite-Laguerrre resolution +pmax =3 +jmax = 2 + +! number of coefficient per hermite-Lagurre gyro-momentes restart = .false. / diff --git a/GKCoulomb/curlyNpjmn/src/basic_mod.f90 b/GKCoulomb/curlyNpjmn/src/basic_mod.f90 index 7fb79fe..58ff177 100644 --- a/GKCoulomb/curlyNpjmn/src/basic_mod.f90 +++ b/GKCoulomb/curlyNpjmn/src/basic_mod.f90 @@ -1,315 +1,332 @@ MODULE basic ! Basic module USE prec_const USE FMZM IMPLICIT NONE ! ! input dimension integer :: Pmax ! Hermite resolution integer :: Jmax ! Laguerre resolution integer :: PMAXX ! p = l + 2 (k + n) integer :: JMAXX ! energy component integer :: NFLRMAXX ! FLR indices integer :: ColMAXX - ! Nb of coefficients integer :: NbOfCoeffs ! restart flag logical :: restart ! dimension labels character*3 :: PMAXX_str,JMAXX_str,NFLRMAXX_str ! List of logical file units INTEGER :: lu_in = 90 ! File duplicated from STDIN ! Output format KOUT CHARACTER(len=7) :: FMFRMT = 'F100.20' ! max and min indices per MPI process ! MPI Stuff ! MPI handles and variables INTEGER :: ierr ! flag for MPI error INTEGER :: nprocs ! number of processors INTEGER :: me =0 ! Rank of processor CHARACTER(6) :: me_str ! string containing Rank of MPI proc. integer :: idx_s_l,idx_e_l ! local indices integer :: nb_l ! number of local coefficients integer :: chksz integer :: pmin_l,pmax_l integer :: jmin_l,jmax_l integer :: mmin_l,mmax_l integer:: nmin_l,nmax_l ! CPU TIME in s REAL(dp) :: start_time REAL(dp):: end_time REAL(dp) :: cpu_ellapsed_time ! ! MPI WALL TIME REAL(dp) :: starttime REAL(dp) :: endtime ! system clock INTEGER :: count_start,count_rate,count_stop REAL(dp) :: system_ellapsed_time INTEGER :: idMAXT5 INTEGER,PARAMETER :: T5len= 100 INTEGER,PARAMETER :: NNLKMPJlen = 14 INTERFACE allocate_array MODULE PROCEDURE allocate_array_dp1,allocate_array_dp2,allocate_array_dp3,allocate_array_dp4 MODULE PROCEDURE allocate_array_fm1,allocate_array_fm2,allocate_array_fm3,allocate_array_fm5 MODULE PROCEDURE allocate_array_dc1,allocate_array_dc2,allocate_array_dc3,allocate_array_dc4 MODULE PROCEDURE allocate_array_i1,allocate_array_i2,allocate_array_i3,allocate_array_i4 MODULE PROCEDURE allocate_array_l1,allocate_array_l2,allocate_array_l3,allocate_array_l4 MODULE PROCEDURE allocate_array_str5 END INTERFACE allocate_array CONTAINS !================================================================================ SUBROUTINE basic_data ! Read basic data from input file use prec_const IMPLICIT NONE + + !locs. vars. + INTEGER :: buff_, NN, ENDOF, fid + ! Namelist - NAMELIST /BASIC/Pmax,Jmax,NbOfCoeffs, restart + NAMELIST /BASIC/Pmax,Jmax, restart ! ! READ INPUT BASIC IF( me .ne. 0 ) GOTO 110 READ(lu_in,basic) WRITE(*,basic) 110 CONTINUE ! ! Broadcast from PE 0 to ! CALL MPI_bcast(Pmax,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) CALL MPI_bcast(Jmax,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) - CALL MPI_bcast(NbOfCoeffs,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) CALL MPI_bcast(restart,1,MPI_LOGICAL,0,MPI_COMM_WORLD,ierr) ! ColMAXX = numb(Pmax,Jmax) ! + ! get number of coeff to be cumputed and distributed along the MPI tasks + + OPEN(fid,FILE = 'indices.in') + ! + NN = 0 + ENDOF = 0 + DO WHILE (ENDOF .eq. 0) + READ(fid,*,IOSTAT=ENDOF) buff_ + NN = NN +1 + ENDDO + CLOSE(fid) + ! + NbOfCoeffs = NN -1 + print*, 'Numer of coefficients to be computed: ', NbOfCoeffs + ! END SUBROUTINE basic_data !================================================================================ SUBROUTINE daytim(str) ! Print date and time use prec_const IMPLICIT NONE CHARACTER(len=*) , INTENT(in) :: str CHARACTER(len=16) :: d, t, dat, time !________________________________________________________________________________ ! CALL DATE_AND_TIME(d,t) dat=d(7:8) // '/' // d(5:6) // '/' // d(1:4) time=t(1:2) // ':' // t(3:4) // ':' // t(5:10) IF( me .eq. 0) WRITE(*,'(a,1x,a,1x,a)') str, dat(1:10), time(1:12) ! END SUBROUTINE daytim !================================================================================ SUBROUTINE clock(endorstart) ! IMPLICIT NONE ! INTEGER,INTENT(IN) :: endorstart ! IF(endorstart .eq. 1) THEN CALL system_clock(count = count_start, count_rate = count_rate) ELSEIF (endorstart .eq. -1) THEN CALL system_clock(count = count_stop) system_ellapsed_time = real(count_stop - count_start)/real( count_rate) ENDIF ! END SUBROUTINE clock !================================================================================ ! To allocate arrays of doubles, integers, etc. at run time SUBROUTINE allocate_array_dp1(a,is1,ie1) real(dp), DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1 ALLOCATE(a(is1:ie1)) a=0.0_dp END SUBROUTINE allocate_array_dp1 SUBROUTINE allocate_array_dp2(a,is1,ie1,is2,ie2) real(dp), DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2 ALLOCATE(a(is1:ie1,is2:ie2)) a=0.0_dp END SUBROUTINE allocate_array_dp2 SUBROUTINE allocate_array_dp3(a,is1,ie1,is2,ie2,is3,ie3) real(dp), DIMENSION(:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3)) a=0.0_dp END SUBROUTINE allocate_array_dp3 SUBROUTINE allocate_array_dp4(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4) real(dp), DIMENSION(:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4)) a=0.0_dp END SUBROUTINE allocate_array_dp4 !__________________ TO ALLOCATE FM ARRAYS_________________ SUBROUTINE allocate_array_fm2(a,is1,ie1,is2,ie2) TYPE(FM), DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2 ALLOCATE(a(is1:ie1,is2:ie2)) a=TO_FM('0.0') END SUBROUTINE allocate_array_fm2 SUBROUTINE allocate_array_fm1(a,is1,ie1) TYPE(FM), DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1 ALLOCATE(a(is1:ie1)) a=TO_FM('0.0') END SUBROUTINE allocate_array_fm1 SUBROUTINE allocate_array_fm3(a,is1,ie1,is2,ie2,is3,ie3) TYPE(FM), DIMENSION(:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3)) a=TO_FM('0.0') END SUBROUTINE allocate_array_fm3 SUBROUTINE allocate_array_fm5(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5) TYPE(FM), DIMENSION(:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4,is5:ie5)) a=TO_FM('0.0') END SUBROUTINE allocate_array_fm5 SUBROUTINE allocate_array_dc1(a,is1,ie1) DOUBLE COMPLEX, DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1 ALLOCATE(a(is1:ie1)) a=CMPLX(0.0_dp,0.0_dp) END SUBROUTINE allocate_array_dc1 SUBROUTINE allocate_array_dc2(a,is1,ie1,is2,ie2) DOUBLE COMPLEX, DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2 ALLOCATE(a(is1:ie1,is2:ie2)) a=CMPLX(0.0_dp,0.0_dp) END SUBROUTINE allocate_array_dc2 SUBROUTINE allocate_array_dc3(a,is1,ie1,is2,ie2,is3,ie3) DOUBLE COMPLEX, DIMENSION(:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3)) a=CMPLX(0.0_dp,0.0_dp) END SUBROUTINE allocate_array_dc3 SUBROUTINE allocate_array_dc4(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4) DOUBLE COMPLEX, DIMENSION(:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4)) a=CMPLX(0.0_dp,0.0_dp) END SUBROUTINE allocate_array_dc4 SUBROUTINE allocate_array_i1(a,is1,ie1) INTEGER, DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1 ALLOCATE(a(is1:ie1)) a=0 END SUBROUTINE allocate_array_i1 SUBROUTINE allocate_array_i2(a,is1,ie1,is2,ie2) INTEGER, DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2 ALLOCATE(a(is1:ie1,is2:ie2)) a=0 END SUBROUTINE allocate_array_i2 SUBROUTINE allocate_array_i3(a,is1,ie1,is2,ie2,is3,ie3) INTEGER, DIMENSION(:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3)) a=0 END SUBROUTINE allocate_array_i3 SUBROUTINE allocate_array_i4(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4) INTEGER, DIMENSION(:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4)) a=0 END SUBROUTINE allocate_array_i4 SUBROUTINE allocate_array_l1(a,is1,ie1) LOGICAL, DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1 ALLOCATE(a(is1:ie1)) a=.false. END SUBROUTINE allocate_array_l1 SUBROUTINE allocate_array_l2(a,is1,ie1,is2,ie2) LOGICAL, DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2 ALLOCATE(a(is1:ie1,is2:ie2)) a=.false. END SUBROUTINE allocate_array_l2 SUBROUTINE allocate_array_l3(a,is1,ie1,is2,ie2,is3,ie3) LOGICAL, DIMENSION(:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3)) a=.false. END SUBROUTINE allocate_array_l3 SUBROUTINE allocate_array_l4(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4) LOGICAL, DIMENSION(:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4)) a=.false. END SUBROUTINE allocate_array_l4 SUBROUTINE allocate_array_str5(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5) CHARACTER(T5len), DIMENSION(:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5 ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4,is5:ie5)) a='0' END SUBROUTINE allocate_array_str5 INTEGER FUNCTION numb(pp,jj) ! 1D Hermite-Laguerre index mapping function INTEGER, INTENT(in) :: pp,jj numb = (Jmax +1)*pp + 1 + jj END FUNCTION numb SUBROUTINE print_FM(iout,XIN) ! print XIN Type FM variable USE FMZM IMPLICIT NONE ! INTEGER,INTENT(IN) :: iout TYPE(FM),INTENT(IN) :: XIN CHARACTER(100) :: ST1 ! CALL FM_ENTER_USER_ROUTINE ! ! print XIN IF( iout .eq. 0 ) THEN CALL FM_FORM(FMFRMT, XIN,ST1) WRITE(*,*) ADJUSTL(TRIM(ST1)) ELSE CALL FM_FORM(FMFRMT, XIN,ST1) WRITE(iout,*) ADJUSTL(TRIM(ST1)) ENDIF ! CALL FM_ENTER_USER_ROUTINE ! END SUBROUTINE print_FM END MODULE basic