From 9e2c5064d9b91451a8b2d5fc0bfb08b477deb638 Mon Sep 17 00:00:00 2001 From: Antoine Cyril David Hoffmann <ahoffman@spcpc606.epfl.ch> Date: Fri, 26 Jun 2020 17:13:26 +0200 Subject: [PATCH] Start to implement options for collision operator and COSOlver loader --- src/array_mod.F90 | 4 ++++ src/inital.F90 | 23 ++++++++++++++++++----- src/memory.F90 | 8 +++++++- src/model_mod.F90 | 26 ++++++++++++++------------ wk/kz_linear.m | 15 ++++++++------- 5 files changed, 51 insertions(+), 25 deletions(-) diff --git a/src/array_mod.F90 b/src/array_mod.F90 index 383f85a5..b0594eba 100644 --- a/src/array_mod.F90 +++ b/src/array_mod.F90 @@ -8,6 +8,10 @@ MODULE array COMPLEX(dp), DIMENSION(:,:,:,:,:), ALLOCATABLE :: moments_rhs_e ! (ip,ij,ikr,ikz,updatetlevel) COMPLEX(dp), DIMENSION(:,:,:,:,:), ALLOCATABLE :: moments_rhs_i ! (ip,ij,ikr,ikz,updatetlevel) + ! To load collision matrix + REAL(dp), DIMENSION(:,:), ALLOCATABLE :: iCe ! (ip,ij) + REAL(dp), DIMENSION(:,:), ALLOCATABLE :: iCi ! (ip,ij) + ! Intermediate steps in rhs of equations !COMPLEX(dp), DIMENSION(:,:,:), ALLOCATABLE:: moments_Apl, moments_Bpl, moments_Cpl, moments_Dpl,& ! moments_Epl, moments_Fpl, moments_Gpl, moments_Hpl diff --git a/src/inital.F90 b/src/inital.F90 index 77755599..c60072f6 100644 --- a/src/inital.F90 +++ b/src/inital.F90 @@ -1,14 +1,21 @@ SUBROUTINE inital - use basic - - use prec_const + USE basic + USE model, ONLY : CO + USE prec_const implicit none WRITE(*,'(a/)') '=== Set initial conditions ===' CALL init_profiles + IF (CO .EQ. -1) THEN + WRITE(*,'(a/)') '=== Load Full Coulomb matrix ===' + + CALL load_FC_mat + ENDIF + ! + END SUBROUTINE inital @@ -18,10 +25,10 @@ SUBROUTINE init_profiles USE basic USE fourier_grid USE fields - use initial_par + USE initial_par USE time_integration - use prec_const + USE prec_const IMPLICIT NONE INTEGER :: ip,ij, ikr,ikz @@ -62,3 +69,9 @@ SUBROUTINE init_profiles END SUBROUTINE init_profiles +SUBROUTINE load_FC_mat + USE basic + USE array + IMPLICIT NONE + +END SUBROUTINE load_FC_mat \ No newline at end of file diff --git a/src/memory.F90 b/src/memory.F90 index af5933d0..410abfdc 100644 --- a/src/memory.F90 +++ b/src/memory.F90 @@ -6,8 +6,9 @@ SUBROUTINE memory USE fields USE fourier_grid USE time_integration + USE model, ONLY: CO - use prec_const + USE prec_const IMPLICIT NONE ! Moments and moments rhs @@ -19,4 +20,9 @@ SUBROUTINE memory ! Electrostatic potential CALL allocate_array(phi, ikrs,ikre, ikzs,ikze) + ! Collision matrix + IF (CO .EQ. -1) THEN + CALL allocate_array( iCe, ips_i,ipe_i, ijs_i,ije_i ) + CALL allocate_array( iCi, ips_i,ipe_i, ijs_i,ije_i ) + ENDIF END SUBROUTINE memory diff --git a/src/model_mod.F90 b/src/model_mod.F90 index fe657e64..f30447b0 100644 --- a/src/model_mod.F90 +++ b/src/model_mod.F90 @@ -5,17 +5,18 @@ MODULE model IMPLICIT NONE PRIVATE - REAL(dp), PUBLIC, PROTECTED :: nu = 1._dp ! Collision frequency - REAL(dp), PUBLIC, PROTECTED :: tau_e = 1._dp ! Collision frequency - REAL(dp), PUBLIC, PROTECTED :: tau_i = 1._dp ! Collision frequency - REAL(dp), PUBLIC, PROTECTED :: sigma_e = 1._dp ! Collision frequency - REAL(dp), PUBLIC, PROTECTED :: sigma_i = 1._dp ! Collision frequency - REAL(dp), PUBLIC, PROTECTED :: q_e = 1._dp ! Collision frequency - REAL(dp), PUBLIC, PROTECTED :: q_i = 1._dp ! Collision frequency - REAL(dp), PUBLIC, PROTECTED :: eta_n = 1._dp ! Collision frequency - REAL(dp), PUBLIC, PROTECTED :: eta_T = 1._dp ! Collision frequency - REAL(dp), PUBLIC, PROTECTED :: eta_B = 1._dp ! Collision frequency - REAL(dp), PUBLIC, PROTECTED :: lambdaD = 1._dp ! Collision frequency + INTEGER(dp), PUBLIC, PROTECTED :: CO = 0 ! Collision Operator + REAL(dp), PUBLIC, PROTECTED :: nu = 1._dp ! Collision frequency + REAL(dp), PUBLIC, PROTECTED :: tau_e = 1._dp ! Temperature + REAL(dp), PUBLIC, PROTECTED :: tau_i = 1._dp ! + REAL(dp), PUBLIC, PROTECTED :: sigma_e = 1._dp ! Mass + REAL(dp), PUBLIC, PROTECTED :: sigma_i = 1._dp ! + REAL(dp), PUBLIC, PROTECTED :: q_e = -1._dp ! Charge + REAL(dp), PUBLIC, PROTECTED :: q_i = 1._dp ! + REAL(dp), PUBLIC, PROTECTED :: eta_n = 1._dp ! Density gradient + REAL(dp), PUBLIC, PROTECTED :: eta_T = 1._dp ! Temperature gradient + REAL(dp), PUBLIC, PROTECTED :: eta_B = 1._dp ! Magnetic gradient + REAL(dp), PUBLIC, PROTECTED :: lambdaD = 1._dp ! Debye length PUBLIC :: model_readinputs, model_outputinputs @@ -28,7 +29,7 @@ CONTAINS USE prec_const IMPLICIT NONE - NAMELIST /MODEL_PAR/ nu, tau_e, tau_i, sigma_e, sigma_i, & + NAMELIST /MODEL_PAR/ CO, nu, tau_e, tau_i, sigma_e, sigma_i, & q_e, q_i, eta_n, eta_T, eta_B, lambdaD READ(lu_in,model_par) @@ -49,6 +50,7 @@ CONTAINS INTEGER, INTENT(in) :: fidres CHARACTER(len=256), INTENT(in) :: str + CALL attach(fidres, TRIM(str), "CO", CO) CALL attach(fidres, TRIM(str), "nu", nu) CALL attach(fidres, TRIM(str), "tau_e", tau_e) CALL attach(fidres, TRIM(str), "tau_i", tau_i) diff --git a/wk/kz_linear.m b/wk/kz_linear.m index 6ed8cc12..0c0036d2 100644 --- a/wk/kz_linear.m +++ b/wk/kz_linear.m @@ -13,18 +13,19 @@ OUTPUTS.write_phi = '.true.'; OUTPUTS.write_doubleprecision = '.true.'; OUTPUTS.resfile0 = '''results'''; %% Grid parameters -GRID.pmaxe = 81; -GRID.jmaxe = 20; -GRID.pmaxi = 81; -GRID.jmaxi = 20; +GRID.pmaxe = 25; +GRID.jmaxe = 9; +GRID.pmaxi = 25; +GRID.jmaxi = 9; GRID.nkr = 1; GRID.krmin = 0.; GRID.krmax = 0.; -GRID.nkz = 10; +GRID.nkz = 20; GRID.kzmin = 0.1/sqrt(2.0); -GRID.kzmax = 2.8/sqrt(2.0); +GRID.kzmax = 5.0/sqrt(2.0); %% Model parameters -MODEL.nu = 0.001; +MODEL.CO = -1; % Collision operator (-1 = Full Coulomb, 0 = Dougherty) +MODEL.nu = 0.001; % collisionality nu*L_perp/Cs0 MODEL.tau_e = 1.0; MODEL.tau_i = 1.0; MODEL.sigma_e = 0.0233380; -- GitLab