diff --git a/src/collision_mod.F90 b/src/collision_mod.F90 index 076792b78d3cc6aeab3935366abda24346c3266a..d6f267f6a9b2bfc994d30ce0e809345554b42fc5 100644 --- a/src/collision_mod.F90 +++ b/src/collision_mod.F90 @@ -421,11 +421,11 @@ CONTAINS IF (CO .EQ. 2) THEN IF (my_id .EQ. 0) WRITE(*,*) '=== Load GK Sugama matrix ===' ELSEIF(CO .EQ. 3) THEN - IF (my_id .EQ. 0) WRITE(*,*) '=== Load GK Full Coulomb matrix ===' + IF (my_id .EQ. 0) WRITE(*,*) '=== Load GK pitch angle matrix ===' ELSEIF(CO .EQ. -2) THEN IF (my_id .EQ. 0) WRITE(*,*) '=== Load DK Sugama matrix ===' ELSEIF(CO .EQ. -3) THEN - IF (my_id .EQ. 0) WRITE(*,*) '=== Load DK Full Coulomb matrix ===' + IF (my_id .EQ. 0) WRITE(*,*) '=== Load DK pitch angle matrix ===' ENDIF ! Opening the compiled cosolver matrices results @@ -478,7 +478,7 @@ CONTAINS ELSE write(ikp_string,'(i5.5)') 0 ENDIF - !!!!!!!!!!!! Electron matrices !!!!!!!!!!!! + !!!!!!!!!!!! E-E matrices !!!!!!!!!!!! ! get the self electron colision matrix ! Allocate space for storing full collision matrix CALL allocate_array( Ceepj_full, 1,(pdime+1)*(jdime+1), 1,(pdime+1)*(jdime+1)) @@ -501,38 +501,7 @@ CONTAINS ENDDO DEALLOCATE(Ceepj_full) - ! Get test and field e-i collision matrices - CALL allocate_array( CeipjT_full, 1,(pdime+1)*(jdime+1), 1,(pdime+1)*(jdime+1)) - CALL allocate_array( CeipjF_full, 1,(pdime+1)*(jdime+1), 1,(pdimi+1)*(jdimi+1)) - WRITE(var_name,'(a,a)') TRIM(ADJUSTL(ikp_string)),'/Ceipj/CeipjT' - CALL getarr(fid, var_name, CeipjT_full) - WRITE(var_name,'(a,a)') TRIM(ADJUSTL(ikp_string)),'/Ceipj/CeipjF' - CALL getarr(fid, var_name, CeipjF_full) - ! Fill sub array with only usefull polynmials degree - DO ip_e = 0,pmaxe ! Loop over rows - DO ij_e = 0,jmaxe - irow_sub = (jmaxe +1)*ip_e + ij_e +1 - irow_full = (jdime +1)*ip_e + ij_e +1 - DO il_e = 0,pmaxe ! Loop over columns - DO ik_e = 0,jmaxe - icol_sub = (jmaxe +1)*il_e + ik_e +1 - icol_full = (jdime +1)*il_e + ik_e +1 - CeipjT_kp(irow_sub,icol_sub,ikp) = CeipjT_full(irow_full,icol_full) - ENDDO - ENDDO - DO il_i = 0,pmaxi ! Loop over columns - DO ik_i = 0,jmaxi - icol_sub = (Jmaxi +1)*il_i + ik_i +1 - icol_full = (jdimi +1)*il_i + ik_i +1 - CeipjF_kp(irow_sub,icol_sub,ikp) = CeipjF_full(irow_full,icol_full) - ENDDO - ENDDO - ENDDO - ENDDO - DEALLOCATE(CeipjF_full) - DEALLOCATE(CeipjT_full) - - !!!!!!!!!!!!!!! Ion matrices !!!!!!!!!!!!!! + !!!!!!!!!!!!!!! I-I matrices !!!!!!!!!!!!!! ! get the self electron colision matrix CALL allocate_array( Ciipj_full, 1,(pdimi+1)*(jdimi+1), 1,(pdimi+1)*(jdimi+1)) WRITE(var_name,'(a,a,a)') TRIM(ADJUSTL(ikp_string)),'/Caapj/Ciipj' @@ -553,36 +522,73 @@ CONTAINS ENDDO DEALLOCATE(Ciipj_full) - ! get the Test and Back field electron ion collision matrix - CALL allocate_array( CiepjT_full, 1,(pdimi+1)*(jdimi+1), 1,(pdimi+1)*(jdimi+1)) - CALL allocate_array( CiepjF_full, 1,(pdimi+1)*(jdimi+1), 1,(pdime+1)*(jdime+1)) - WRITE(var_name,'(a,a,a)') TRIM(ADJUSTL(ikp_string)),'/Ciepj/CiepjT' - CALL getarr(fid, var_name, CiepjT_full) - WRITE(var_name,'(a,a,a)') TRIM(ADJUSTL(ikp_string)),'/Ciepj/CiepjF' - CALL getarr(fid, var_name, CiepjF_full) - ! Fill sub array with only usefull polynmials degree - DO ip_i = 0,Pmaxi ! Loop over rows - DO ij_i = 0,Jmaxi - irow_sub = (Jmaxi +1)*ip_i + ij_i +1 - irow_full = (jdimi +1)*ip_i + ij_i +1 - DO il_i = 0,Pmaxi ! Loop over columns - DO ik_i = 0,Jmaxi - icol_sub = (Jmaxi +1)*il_i + ik_i +1 - icol_full = (jdimi +1)*il_i + ik_i +1 - CiepjT_kp(irow_sub,icol_sub,ikp) = CiepjT_full(irow_full,icol_full) - ENDDO - ENDDO - DO il_e = 0,pmaxe ! Loop over columns - DO ik_e = 0,jmaxe - icol_sub = (jmaxe +1)*il_e + ik_e +1 - icol_full = (jdime +1)*il_e + ik_e +1 - CiepjF_kp(irow_sub,icol_sub,ikp) = CiepjF_full(irow_full,icol_full) - ENDDO - ENDDO - ENDDO - ENDDO - DEALLOCATE(CiepjF_full) - DEALLOCATE(CiepjT_full) + IF(abs(CO) .NE. 3) THEN ! Pitch angle is only applied on like-species + !!!!!!!!!!!!!!! E-I matrices !!!!!!!!!!!!!! + ! Get test and field e-i collision matrices + CALL allocate_array( CeipjT_full, 1,(pdime+1)*(jdime+1), 1,(pdime+1)*(jdime+1)) + CALL allocate_array( CeipjF_full, 1,(pdime+1)*(jdime+1), 1,(pdimi+1)*(jdimi+1)) + WRITE(var_name,'(a,a)') TRIM(ADJUSTL(ikp_string)),'/Ceipj/CeipjT' + CALL getarr(fid, var_name, CeipjT_full) + WRITE(var_name,'(a,a)') TRIM(ADJUSTL(ikp_string)),'/Ceipj/CeipjF' + CALL getarr(fid, var_name, CeipjF_full) + ! Fill sub array with only usefull polynmials degree + DO ip_e = 0,pmaxe ! Loop over rows + DO ij_e = 0,jmaxe + irow_sub = (jmaxe +1)*ip_e + ij_e +1 + irow_full = (jdime +1)*ip_e + ij_e +1 + DO il_e = 0,pmaxe ! Loop over columns + DO ik_e = 0,jmaxe + icol_sub = (jmaxe +1)*il_e + ik_e +1 + icol_full = (jdime +1)*il_e + ik_e +1 + CeipjT_kp(irow_sub,icol_sub,ikp) = CeipjT_full(irow_full,icol_full) + ENDDO + ENDDO + DO il_i = 0,pmaxi ! Loop over columns + DO ik_i = 0,jmaxi + icol_sub = (Jmaxi +1)*il_i + ik_i +1 + icol_full = (jdimi +1)*il_i + ik_i +1 + CeipjF_kp(irow_sub,icol_sub,ikp) = CeipjF_full(irow_full,icol_full) + ENDDO + ENDDO + ENDDO + ENDDO + DEALLOCATE(CeipjF_full) + DEALLOCATE(CeipjT_full) + + !!!!!!!!!!!!!!! I-E matrices !!!!!!!!!!!!!! + ! get the Test and Back field electron ion collision matrix + CALL allocate_array( CiepjT_full, 1,(pdimi+1)*(jdimi+1), 1,(pdimi+1)*(jdimi+1)) + CALL allocate_array( CiepjF_full, 1,(pdimi+1)*(jdimi+1), 1,(pdime+1)*(jdime+1)) + WRITE(var_name,'(a,a,a)') TRIM(ADJUSTL(ikp_string)),'/Ciepj/CiepjT' + CALL getarr(fid, var_name, CiepjT_full) + WRITE(var_name,'(a,a,a)') TRIM(ADJUSTL(ikp_string)),'/Ciepj/CiepjF' + CALL getarr(fid, var_name, CiepjF_full) + ! Fill sub array with only usefull polynmials degree + DO ip_i = 0,Pmaxi ! Loop over rows + DO ij_i = 0,Jmaxi + irow_sub = (Jmaxi +1)*ip_i + ij_i +1 + irow_full = (jdimi +1)*ip_i + ij_i +1 + DO il_i = 0,Pmaxi ! Loop over columns + DO ik_i = 0,Jmaxi + icol_sub = (Jmaxi +1)*il_i + ik_i +1 + icol_full = (jdimi +1)*il_i + ik_i +1 + CiepjT_kp(irow_sub,icol_sub,ikp) = CiepjT_full(irow_full,icol_full) + ENDDO + ENDDO + DO il_e = 0,pmaxe ! Loop over columns + DO ik_e = 0,jmaxe + icol_sub = (jmaxe +1)*il_e + ik_e +1 + icol_full = (jdime +1)*il_e + ik_e +1 + CiepjF_kp(irow_sub,icol_sub,ikp) = CiepjF_full(irow_full,icol_full) + ENDDO + ENDDO + ENDDO + ENDDO + DEALLOCATE(CiepjF_full) + DEALLOCATE(CiepjT_full) + ELSE + CeipjT_kp = 0._dp; CeipjF_kp = 0._dp; CiepjT_kp = 0._dp; CiepjF_kp = 0._dp; + ENDIF ENDIF ENDDO CALL closef(fid)