Newer
Older
module geometry
! computes geometrical quantities
! Adapted from B.J.Frei MOLIX code (2021)
use prec_const
use model
use grid
use array
use fields
use basic
implicit none
public
contains
subroutine eval_magnetic_geometry
! evalute metrix, elements, jacobian and gradient
implicit none
!
IF( (Ny .EQ. 1) .AND. (Nz .EQ. 1)) THEN !1D perp linear run
IF( my_id .eq. 0 ) WRITE(*,*) '1D perpendicular geometry'
call eval_1D_geometry
ELSE
IF( my_id .eq. 0 ) WRITE(*,*) 's-alpha-B geometry'
call eval_salphaB_geometry
ENDIF
!
END SUBROUTINE eval_magnetic_geometry
!
!--------------------------------------------------------------------------------
!
subroutine eval_salphaB_geometry
! evaluate s-alpha geometry model
implicit none
REAL(dp) :: z, kx, ky
gxx(iz) = 1._dp
gxy(iz) = shear*z
gyy(iz) = 1._dp + (shear*z)**2
! Relative strengh of radius
hatR(iz) = 1._dp + eps*COS(z)
! Relative strengh of modulus of B
hatB(iz) = 1._dp / hatR(iz)
! Derivative of the magnetic field strenght
gradxB(iz) = -COS(z)
gradzB(iz) = eps * SIN(z) / hatR(iz)
DO iky = ikys, ikye
ky = kyarray(iky)
DO ikx= ikxs, ikxe
kx = kxarray(ikx)
Ckxky(ikx, iky, iz) = (-SIN(z)*kx - (COS(z) + shear* z* SIN(z))*ky) * hatB(iz) ! .. multiply by hatB to cancel the 1/ hatB factor in moments_eqs_rhs.f90 routine
ENDDO
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
! coefficient in the front of parallel derivative
gradz_coeff(iz) = 1._dp / Jacobian(iz) / hatB(iz)
ENDDO zloop
END SUBROUTINE eval_salphaB_geometry
!
!--------------------------------------------------------------------------------
!
subroutine eval_1D_geometry
! evaluate 1D perp geometry model
implicit none
REAL(dp) :: z, kx, ky
zloop: DO iz = izs,ize
z = zarray(iz)
! metric
gxx(iz) = 1._dp
gxy(iz) = 0._dp
gyy(iz) = 1._dp
! Relative strengh of radius
hatR(iz) = 1._dp
! Jacobian
Jacobian(iz) = 1._dp
! Relative strengh of modulus of B
hatB(iz) = 1._dp
! Curvature operator
DO iky = ikys, ikye
ky = kyarray(iky)
DO ikx= ikxs, ikxe
kx = kxarray(ikx)
Ckxky(ikx, iky, iz) = -kx ! .. multiply by hatB to cancel the 1/ hatB factor in moments_eqs_rhs.f90 routine
ENDDO
! coefficient in the front of parallel derivative
gradz_coeff(iz) = 1._dp
END SUBROUTINE eval_1D_geometry
!
!--------------------------------------------------------------------------------
!
end module geometry