MsSpec-DFM/New_libraries/DFM_library/DAMPING_LIBRARY/calc_damping.f90

179 lines
7.2 KiB
Fortran

!
!=======================================================================
!
MODULE DAMPING_SI
!
! This module defines the damping coefficients in SI
!
!
! --> SI version <--
!
USE ACCURACY_REAL
!
IMPLICIT NONE
!
REAL (WP) :: LFT,TAU,TAU2,NNU,DIF,ETA
!
END MODULE DAMPING_SI
!
!=======================================================================
!
MODULE DAMPING_COEF
!
USE ACCURACY_REAL
!
CONTAINS
!
!=======================================================================
!
SUBROUTINE CALC_DAMPING(IQ,X)
!
! This subroutine calculates and stores the value of the damping
! coefficient selected
!
!
! Input parameters:
!
! * IQ : q_loop index
! * X : dimensionless factor --> X = q / (2 * k_F)
!
!
! Output parameters:
!
! * LFT : quasiparticle lifetime in seconds
! * TAU : 1st relaxation time in seconds
! * TAU2 : 2nd relaxation time in seconds
! * NNU : decay rate in 1/s
! * DIF : diffusion coefficient in SI
! * ETA : shear viscosity in SI
!
!
!
! Author : D. Sébilleau
!
! Last modified : 6 Aug 2021
!
!
USE OUT_VALUES_10, ONLY : I_WR
!
USE REAL_NUMBERS, ONLY : ZERO,LARGE
!
USE DAMPING_VALUES
!
USE LIFETIME
USE RELAXATION_TIME_STATIC
USE DECAY_RATE
USE DIFFUSION_COEFFICIENT
USE VISCOSITY
USE EXTERNAL_DAMPING
!
USE DAMPING_SI
!
IMPLICIT NONE
!
INTEGER, INTENT(IN) :: IQ
!
INTEGER :: I,LOGF
!
REAL (WP), INTENT(IN) :: X ! q / 2k_F
!
REAL (WP) :: POW1,POW2
!
LOGF = 6 ! log file unit
!
! Initialization
!
LFT = LARGE !
TAU = LARGE !
TAU2 = LARGE !
NNU = ZERO !
DIF = ZERO !
ETA = ZERO !
!
! Power for external value
!
CALL CALC_POWER(POWER_1,POW1) !
!
IF(DAMPING == 'RELA' .AND. RT_TYPE == 'EX2') THEN !
CALL CALC_POWER(POWER_2,POW2) !
END IF !
!
! Setting up the selected kind of damping
!
IF(DAMPING == 'LFTM') THEN !
IF(LT_TYPE == 'EXTE') THEN !
LFT = D_VALUE_1 * POW1 !
ELSE !
CALL LIFETIME_COEF(X,LFT) !
END IF !
ELSE IF (DAMPING == 'RELA') THEN !
IF(RT_TYPE == 'EX1') THEN !
TAU = D_VALUE_1 * POW1 !
ELSE IF(RT_TYPE == 'EX2') THEN !
TAU = D_VALUE_1 * POW1 !
TAU2 = D_VALUE_2 * POW2 !
ELSE !
CALL RELAXATION_TIME(X,TAU) !
END IF !
ELSE IF (DAMPING == 'DECA') THEN !
IF(DR_TYPE == 'EXTE') THEN !
NNU = D_VALUE_1 * POW1 !
ELSE !
CALL DECAY_RATE_COEF(X,NNU) !
END IF !
ELSE IF (DAMPING == 'DIFF') THEN !
IF(DC_TYPE == 'EXTE') THEN !
DIF = D_VALUE_1 * POW1 !
ELSE !
CALL DIFFUSION_COEF(DIF) !
END IF !
ELSE IF (DAMPING == 'VISC') THEN !
IF(VI_TYPE == 'EXTE') THEN !
ETA = D_VALUE_1 * POW1 !
ELSE !
CALL VISCOSITY_COEF(X,ETA) !
END IF !
END IF !
!
! Printing the results
!
IF( (I_WR == 1) .OR. ( (I_WR == 2) .AND. (IQ == 1) ) ) THEN !
DO I = 1, 3 !
WRITE(LOGF,5) !
END DO !
IF(DAMPING /= 'NONE') THEN !
WRITE(LOGF,10) !
WRITE(LOGF,20) !
IF(DAMPING == 'LFTM') THEN !
WRITE(LOGF,31) LFT !
ELSE IF (DAMPING == 'RELA') THEN !
WRITE(LOGF,32) TAU !
IF(RT_TYPE == 'EX2') WRITE(LOGF,33) TAU2 !
ELSE IF (DAMPING == 'DECA') THEN !
WRITE(LOGF,34) NNU !
ELSE IF (DAMPING == 'DIFF') THEN !
WRITE(LOGF,35) DIF !
ELSE IF (DAMPING == 'VISC') THEN !
WRITE(LOGF,36) ETA !
END IF !
WRITE(LOGF,40) !
END IF !
END IF !
!
! Formats:
!
5 FORMAT(' ')
10 FORMAT(6X,'_________________________________________________________')
20 FORMAT(5X,'| |')
31 FORMAT(5X,'| DAMPING CHOSEN: lifetime = ',E12.6,' s |')
32 FORMAT(5X,'| DAMPING CHOSEN: relaxation time = ',E12.6,' s |')
33 FORMAT(5X,'| DAMPING CHOSEN: relaxation time 2 = ',E12.6,' s |')
34 FORMAT(5X,'| DAMPING CHOSEN: decay time = ',E12.6,' /s|')
35 FORMAT(5X,'| DAMPING CHOSEN: diffusion coefficient = ',E12.6,' SI|')
36 FORMAT(5X,'| DAMPING CHOSEN: viscosity = ',E12.6,' SI|')
40 FORMAT(5X,'|_________________________________________________________|',/)
!
END SUBROUTINE CALC_DAMPING
!
END MODULE DAMPING_COEF