Commit 9ee9c3a6 authored by Matthias Redies's avatar Matthias Redies

rename basm1 -> radbasfn_mt

parent 14eaeae8
......@@ -311,13 +311,13 @@ CONTAINS
DO itype = 1, atoms%ntype
DO l = 0, hybrid%lcutm1(itype)
DO i = 1, mpbasis%num_rad_bas_fun(l, itype)
! note that hybrid%basm1 already contains the factor rgrid
moment(i, l, itype) = intgrf(atoms%rmsh(:, itype)**(l + 1)*hybrid%basm1(:, i, l, itype), &
! note that hybrid%radbasfn_mt already contains the factor rgrid
moment(i, l, itype) = intgrf(atoms%rmsh(:, itype)**(l + 1)*hybrid%radbasfn_mt(:, i, l, itype), &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf)
END DO
END DO
DO i = 1, mpbasis%num_rad_bas_fun(0, itype)
moment2(i, itype) = intgrf(atoms%rmsh(:, itype)**3*hybrid%basm1(:, i, 0, itype), &
moment2(i, itype) = intgrf(atoms%rmsh(:, itype)**3*hybrid%radbasfn_mt(:, i, 0, itype), &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf)
END DO
END DO
......@@ -381,13 +381,13 @@ CONTAINS
END IF
DO l = 0, hybrid%lcutm1(itype)
DO n = 1, mpbasis%num_rad_bas_fun(l, itype)
! note that hybrid%basm1 already contains one factor rgrid
! note that hybrid%radbasfn_mt already contains one factor rgrid
olap(n, l, itype, iqnrm) = &
intgrf(atoms%rmsh(:, itype)*hybrid%basm1(:, n, l, itype)*sphbes_var(:, l), &
intgrf(atoms%rmsh(:, itype)*hybrid%radbasfn_mt(:, n, l, itype)*sphbes_var(:, l), &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf)
integral(n, l, itype, iqnrm) = &
intgrf(atoms%rmsh(:, itype)*hybrid%basm1(:, n, l, itype)*sphbesmoment1(:, l), &
intgrf(atoms%rmsh(:, itype)*hybrid%radbasfn_mt(:, n, l, itype)*sphbesmoment1(:, l), &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf)
END DO
......@@ -423,12 +423,12 @@ CONTAINS
! Here the diagonal block matrices do not depend on ineq. In (1b) they do depend on ineq, though,
DO l = 0, hybrid%lcutm1(itype)
DO n2 = 1, mpbasis%num_rad_bas_fun(l, itype)
! note that hybrid%basm1 already contains the factor rgrid
CALL primitivef(primf1, hybrid%basm1(:, n2, l, itype) &
! note that hybrid%radbasfn_mt already contains the factor rgrid
CALL primitivef(primf1, hybrid%radbasfn_mt(:, n2, l, itype) &
*atoms%rmsh(:, itype)**(l + 1), atoms%rmsh, atoms%dx, &
atoms%jri, atoms%jmtd, itype, atoms%ntype)
! -itype is to enforce inward integration
CALL primitivef(primf2, hybrid%basm1(:atoms%jri(itype), n2, l, itype) &
CALL primitivef(primf2, hybrid%radbasfn_mt(:atoms%jri(itype), n2, l, itype) &
/atoms%rmsh(:atoms%jri(itype), itype)**l, atoms%rmsh, atoms%dx, &
atoms%jri, atoms%jmtd, -itype, atoms%ntype)
......@@ -436,7 +436,7 @@ CONTAINS
primf2 = primf2*atoms%rmsh(:, itype)**(l + 1)
DO n1 = 1, n2
integrand = hybrid%basm1(:, n1, l, itype)*(primf1 + primf2)
integrand = hybrid%radbasfn_mt(:, n1, l, itype)*(primf1 + primf2)
! call intgr0( (4*pimach())/(2*l+1)*integrand,rmsh(1,itype),dx(itype),jri(itype),mat(n2*(n2-1)/2+n1) )
mat(n2*(n2 - 1)/2 + n1) = (4*pi_const)/(2*l + 1) &
*intgrf(integrand, atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, &
......@@ -1582,18 +1582,18 @@ CONTAINS
j = j + 1
IF (l == 0) THEN
coeff(j) = SQRT(4*pi_const) &
*intgrf(atoms%rmsh(:, itype)*hybrid%basm1(:, i, 0, itype), &
*intgrf(atoms%rmsh(:, itype)*hybrid%radbasfn_mt(:, i, 0, itype), &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf) &
/SQRT(cell%vol)
claplace(j) = -SQRT(4*pi_const) &
*intgrf(atoms%rmsh(:, itype)**3*hybrid%basm1(:, i, 0, itype), &
*intgrf(atoms%rmsh(:, itype)**3*hybrid%radbasfn_mt(:, i, 0, itype), &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf) &
/SQRT(cell%vol)
ELSE IF (l == 1) THEN
cderiv(j, M) = -SQRT(4*pi_const/3)*CMPLX(0.0, 1.0) &
*intgrf(atoms%rmsh(:, itype)**2*hybrid%basm1(:, i, 1, itype), &
*intgrf(atoms%rmsh(:, itype)**2*hybrid%radbasfn_mt(:, i, 1, itype), &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf) &
/SQRT(cell%vol)
END IF
......
......@@ -245,7 +245,7 @@ CONTAINS
dynamic_hse_adjustment(atoms%rmsh, atoms%rmt, atoms%dx, atoms%jri, atoms%jmtd, kpts%bkf(:, ikpt0), ikpt0, &
kpts%nkptf, cell%bmat, cell%omtil, atoms%ntype, atoms%neq, atoms%nat, atoms%taual, &
hybrid%lcutm1, maxval(hybrid%lcutm1), mpbasis%num_rad_bas_fun, maxval(mpbasis%num_rad_bas_fun), mpbasis%gptm, &
mpbasis%ngptm(ikpt0), mpbasis%gptm_ptr(:, ikpt0), mpbasis%num_gpts(), hybrid%basm1, &
mpbasis%ngptm(ikpt0), mpbasis%gptm_ptr(:, ikpt0), mpbasis%num_gpts(), hybrid%radbasfn_mt, &
hybrid%nbasm(ikpt0), iband1, hybrid%nbands(nk), nsest, ibando, psize, indx_sest, &
atoms%invsat, sym%invsatnr, mpi%irank, cprod_vv_r(:hybrid%nbasm(ikpt0), :, :), &
cprod_vv_c(:hybrid%nbasm(ikpt0), :, :), mat_ex%l_real, wl_iks(:iband1, nkqpt), n_q(ikpt))
......
......@@ -250,7 +250,7 @@ CONTAINS
hybdat%prod%n1(n,l,itype) = n1
hybdat%prod%n2(n,l,itype) = n2
DO i = 1, mpbasis%num_rad_bas_fun(l, itype)
hybdat%prodm(i, n, l, itype) = intgrf(basprod(:ng)*hybrid%basm1(:ng, i, l, itype), atoms%jri, &
hybdat%prodm(i, n, l, itype) = intgrf(basprod(:ng)*hybrid%radbasfn_mt(:ng, i, l, itype), atoms%jri, &
atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, hybdat%gridf)
END DO
END IF
......
......@@ -105,7 +105,7 @@ CONTAINS
IF (ALLOCATED(mpbasis%num_rad_bas_fun)) deallocate(mpbasis%num_rad_bas_fun)
IF (ALLOCATED(mpbasis%gptm_ptr)) deallocate(mpbasis%gptm_ptr)
IF (ALLOCATED(mpbasis%gptm)) deallocate(mpbasis%gptm)
IF (ALLOCATED(hybrid%basm1)) deallocate(hybrid%basm1)
IF (ALLOCATED(hybrid%radbasfn_mt)) deallocate(hybrid%radbasfn_mt)
CALL usdus%init(atoms, input%jspins)
call hybrid%set_num_radfun_per_l(atoms)
......@@ -195,7 +195,7 @@ CONTAINS
END DO
END DO
allocate(hybrid%basm1(atoms%jmtd,&
allocate(hybrid%radbasfn_mt(atoms%jmtd,&
maxval(mpbasis%num_rad_bas_fun), &
0:maxval(hybrid%lcutm1), &
atoms%ntype), source=0.0)
......@@ -249,17 +249,17 @@ CONTAINS
i = i + 1
IF (i > n_radbasfn) call judft_error('got too many product functions', hint='This is a BUG, please report', calledby='mixedbasis')
hybrid%basm1(:n_grid_pt, i, l, itype) &
hybrid%radbasfn_mt(:n_grid_pt, i, l, itype) &
= (bas1(:n_grid_pt, n1, l1, itype, jspin) &
*bas1(:n_grid_pt, n2, l2, itype, jspin) &
+ bas2(:n_grid_pt, n1, l1, itype, jspin) &
*bas2(:n_grid_pt, n2, l2, itype, jspin))/atoms%rmsh(:n_grid_pt, itype)
!normalize basm1
rdum = SQRT(intgrf(hybrid%basm1(:,i, l, itype)**2, &
!normalize radbasfn_mt
rdum = SQRT(intgrf(hybrid%radbasfn_mt(:,i, l, itype)**2, &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf))
hybrid%basm1(:n_grid_pt, i, l, itype) = hybrid%basm1(:n_grid_pt, i, l, itype)/rdum
hybrid%radbasfn_mt(:n_grid_pt, i, l, itype) = hybrid%radbasfn_mt(:n_grid_pt, i, l, itype)/rdum
END DO !jspin
! prevent double counting of products (a*b = b*a)
......@@ -275,7 +275,7 @@ CONTAINS
IF (i /= n_radbasfn) call judft_error('counting error for product functions', hint='This is a BUG, please report', calledby='mixedbasis')
! In order to get ride of the linear dependencies in the
! radial functions basm1 belonging to fixed l and itype
! radial functions radbasfn_mt belonging to fixed l and itype
! the overlap matrix is diagonalized and those eigenvectors
! with a eigenvalue greater then hybrid%tolerance1 are retained
......@@ -283,7 +283,7 @@ CONTAINS
olap = 0
DO n2 = 1, n_radbasfn
DO n1 = 1, n2
olap(n1, n2) = intgrf(hybrid%basm1(:,n1, l, itype)*hybrid%basm1(:,n2, l, itype), &
olap(n1, n2) = intgrf(hybrid%radbasfn_mt(:,n1, l, itype)*hybrid%radbasfn_mt(:,n2, l, itype), &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf)
olap(n2, n1) = olap(n1, n2)
END DO
......@@ -305,33 +305,33 @@ CONTAINS
eigv(:,:) = eigv(:,ihelp)
DO i = 1, n_grid_pt
hybrid%basm1(i, 1:nn, l, itype) = MATMUL(hybrid%basm1(i, 1:n_radbasfn, l, itype), eigv(:,1:nn))/SQRT(eig(:nn))
hybrid%radbasfn_mt(i, 1:nn, l, itype) = MATMUL(hybrid%radbasfn_mt(i, 1:n_radbasfn, l, itype), eigv(:,1:nn))/SQRT(eig(:nn))
END DO
! Add constant function to l=0 basis and then do a Gram-Schmidt orthonormalization
IF (l == 0) THEN
! Check if basm1 must be reallocated
IF (nn + 1 > SIZE(hybrid%basm1, 2)) THEN
! Check if radbasfn_mt must be reallocated
IF (nn + 1 > SIZE(hybrid%radbasfn_mt, 2)) THEN
allocate(basmhlp(atoms%jmtd, nn + 1, 0:maxval(hybrid%lcutm1), atoms%ntype))
basmhlp(:,1:nn, :,:) = hybrid%basm1
deallocate(hybrid%basm1)
allocate(hybrid%basm1(atoms%jmtd, nn + 1, 0:maxval(hybrid%lcutm1), atoms%ntype))
hybrid%basm1(:,1:nn, :,:) = basmhlp(:,1:nn, :,:)
basmhlp(:,1:nn, :,:) = hybrid%radbasfn_mt
deallocate(hybrid%radbasfn_mt)
allocate(hybrid%radbasfn_mt(atoms%jmtd, nn + 1, 0:maxval(hybrid%lcutm1), atoms%ntype))
hybrid%radbasfn_mt(:,1:nn, :,:) = basmhlp(:,1:nn, :,:)
deallocate(basmhlp)
END IF
hybrid%basm1(:n_grid_pt, nn + 1, 0, itype) = atoms%rmsh(:n_grid_pt, itype)/SQRT(atoms%rmsh(n_grid_pt, itype)**3/3)
hybrid%radbasfn_mt(:n_grid_pt, nn + 1, 0, itype) = atoms%rmsh(:n_grid_pt, itype)/SQRT(atoms%rmsh(n_grid_pt, itype)**3/3)
DO i = nn, 1, -1
DO j = i + 1, nn + 1
hybrid%basm1(:n_grid_pt, i, 0, itype) = hybrid%basm1(:n_grid_pt, i, 0, itype) &
- intgrf(hybrid%basm1(:n_grid_pt, i, 0, itype)*hybrid%basm1(:n_grid_pt, j, 0, itype), &
hybrid%radbasfn_mt(:n_grid_pt, i, 0, itype) = hybrid%radbasfn_mt(:n_grid_pt, i, 0, itype) &
- intgrf(hybrid%radbasfn_mt(:n_grid_pt, i, 0, itype)*hybrid%radbasfn_mt(:n_grid_pt, j, 0, itype), &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf) &
*hybrid%basm1(:n_grid_pt, j, 0, itype)
*hybrid%radbasfn_mt(:n_grid_pt, j, 0, itype)
END DO
hybrid%basm1(:n_grid_pt, i, 0, itype) = hybrid%basm1(:n_grid_pt, i, 0, itype) &
/SQRT(intgrf(hybrid%basm1(:n_grid_pt, i, 0, itype)**2, &
hybrid%radbasfn_mt(:n_grid_pt, i, 0, itype) = hybrid%radbasfn_mt(:n_grid_pt, i, 0, itype) &
/SQRT(intgrf(hybrid%radbasfn_mt(:n_grid_pt, i, 0, itype)**2, &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf))
END DO
nn = nn + 1
......@@ -344,7 +344,7 @@ CONTAINS
rdum = 0
DO i = 1, nn
DO j = 1, i
rdum1 = intgrf(hybrid%basm1(:,i, l, itype)*hybrid%basm1(:,j, l, itype), &
rdum1 = intgrf(hybrid%radbasfn_mt(:,i, l, itype)*hybrid%radbasfn_mt(:,j, l, itype), &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf)
IF (i == j) THEN
......@@ -380,10 +380,10 @@ CONTAINS
allocate(basmhlp(atoms%jmtd, maxval(mpbasis%num_rad_bas_fun), 0:maxval(hybrid%lcutm1), atoms%ntype))
basmhlp(1:atoms%jmtd, 1:maxval(mpbasis%num_rad_bas_fun), 0:maxval(hybrid%lcutm1), 1:atoms%ntype) &
= hybrid%basm1(1:atoms%jmtd, 1:maxval(mpbasis%num_rad_bas_fun), 0:maxval(hybrid%lcutm1), 1:atoms%ntype)
deallocate(hybrid%basm1)
allocate(hybrid%basm1(atoms%jmtd, maxval(mpbasis%num_rad_bas_fun), 0:maxval(hybrid%lcutm1), atoms%ntype))
hybrid%basm1 = basmhlp
= hybrid%radbasfn_mt(1:atoms%jmtd, 1:maxval(mpbasis%num_rad_bas_fun), 0:maxval(hybrid%lcutm1), 1:atoms%ntype)
deallocate(hybrid%radbasfn_mt)
allocate(hybrid%radbasfn_mt(atoms%jmtd, maxval(mpbasis%num_rad_bas_fun), 0:maxval(hybrid%lcutm1), atoms%ntype))
hybrid%radbasfn_mt = basmhlp
deallocate(basmhlp, seleco, selecu, selecmat)
......@@ -409,7 +409,7 @@ CONTAINS
! this function is used to build the linear combinations
rdum = 0
DO i = 1, mpbasis%num_rad_bas_fun(l, itype)
rdum1 = intgrf(atoms%rmsh(:n_grid_pt, itype)**(l + 1)*hybrid%basm1(:n_grid_pt, i, l, itype), &
rdum1 = intgrf(atoms%rmsh(:n_grid_pt, itype)**(l + 1)*hybrid%radbasfn_mt(:n_grid_pt, i, l, itype), &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf)
IF (ABS(rdum1) > rdum) THEN
n_radbasfn = i
......@@ -419,13 +419,13 @@ CONTAINS
! rearrange order of radial functions such that the last function possesses the largest moment
j = 0
bashlp(:n_grid_pt) = hybrid%basm1(:n_grid_pt, n_radbasfn, l, itype)
bashlp(:n_grid_pt) = hybrid%radbasfn_mt(:n_grid_pt, n_radbasfn, l, itype)
DO i = 1, mpbasis%num_rad_bas_fun(l, itype)
IF (i == n_radbasfn) CYCLE
j = j + 1
hybrid%basm1(:n_grid_pt, j, l, itype) = hybrid%basm1(:n_grid_pt, i, l, itype)
hybrid%radbasfn_mt(:n_grid_pt, j, l, itype) = hybrid%radbasfn_mt(:n_grid_pt, i, l, itype)
END DO
hybrid%basm1(:n_grid_pt, mpbasis%num_rad_bas_fun(l, itype), l, itype) = bashlp(:n_grid_pt)
hybrid%radbasfn_mt(:n_grid_pt, mpbasis%num_rad_bas_fun(l, itype), l, itype) = bashlp(:n_grid_pt)
END DO
......@@ -441,28 +441,28 @@ CONTAINS
DO i = 1, mpbasis%num_rad_bas_fun(l, itype)
IF (i == n_radbasfn) CYCLE
! calculate moment of radial function i
rdum1 = intgrf(atoms%rmsh(:n_grid_pt, itype)**(l + 1)*hybrid%basm1(:n_grid_pt, i, l, itype), &
rdum1 = intgrf(atoms%rmsh(:n_grid_pt, itype)**(l + 1)*hybrid%radbasfn_mt(:n_grid_pt, i, l, itype), &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf)
rdum = intgrf(atoms%rmsh(:n_grid_pt, itype)**(l + 1)*hybrid%basm1(:n_grid_pt, n_radbasfn, l, itype), &
rdum = intgrf(atoms%rmsh(:n_grid_pt, itype)**(l + 1)*hybrid%radbasfn_mt(:n_grid_pt, n_radbasfn, l, itype), &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf)
bashlp(:n_grid_pt) = hybrid%basm1(:n_grid_pt, n_radbasfn, l, itype)
bashlp(:n_grid_pt) = hybrid%radbasfn_mt(:n_grid_pt, n_radbasfn, l, itype)
IF (SQRT(rdum**2 + rdum1**2) <= 1E-06 .AND. mpi%irank == 0) &
WRITE (6, *) 'Warning: Norm is smaller thann 1E-06!'
! change function n_radbasfn such that n_radbasfn is orthogonal to i
! since the functions basm1 have been orthogonal on input
! since the functions radbasfn_mt have been orthogonal on input
! the linear combination does not destroy the orthogonality to the residual functions
hybrid%basm1(:n_grid_pt, n_radbasfn, l, itype) = rdum/SQRT(rdum**2 + rdum1**2)*bashlp(:n_grid_pt) &
+ rdum1/SQRT(rdum**2 + rdum1**2)*hybrid%basm1(:n_grid_pt, i, l, itype)
hybrid%radbasfn_mt(:n_grid_pt, n_radbasfn, l, itype) = rdum/SQRT(rdum**2 + rdum1**2)*bashlp(:n_grid_pt) &
+ rdum1/SQRT(rdum**2 + rdum1**2)*hybrid%radbasfn_mt(:n_grid_pt, i, l, itype)
! combine basis function i and n_radbasfn so that they possess no momemt
hybrid%basm1(:n_grid_pt, i, l, itype) = rdum1/SQRT(rdum**2 + rdum1**2)*bashlp(:n_grid_pt) &
- rdum/SQRT(rdum**2 + rdum1**2)*hybrid%basm1(:n_grid_pt, i, l, itype)
hybrid%radbasfn_mt(:n_grid_pt, i, l, itype) = rdum1/SQRT(rdum**2 + rdum1**2)*bashlp(:n_grid_pt) &
- rdum/SQRT(rdum**2 + rdum1**2)*hybrid%radbasfn_mt(:n_grid_pt, i, l, itype)
rdum1 = intgrf(atoms%rmsh(:n_grid_pt, itype)**(l + 1)*hybrid%basm1(:n_grid_pt, i, l, itype), &
rdum1 = intgrf(atoms%rmsh(:n_grid_pt, itype)**(l + 1)*hybrid%radbasfn_mt(:n_grid_pt, i, l, itype), &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf)
IF (rdum1 > 1E-10) call judft_error('moment of radial function does not vanish', calledby='mixedbasis')
......@@ -474,7 +474,7 @@ CONTAINS
rdum = 0
DO i = 1, mpbasis%num_rad_bas_fun(l, itype)
DO j = 1, mpbasis%num_rad_bas_fun(l, itype)
rdum1 = intgrf(hybrid%basm1(:n_grid_pt, i, l, itype)*hybrid%basm1(:n_grid_pt, j, l, itype), &
rdum1 = intgrf(hybrid%radbasfn_mt(:n_grid_pt, i, l, itype)*hybrid%radbasfn_mt(:n_grid_pt, j, l, itype), &
atoms%jri, atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf)
IF (i /= j) THEN
rdum = rdum + rdum1
......@@ -485,7 +485,7 @@ CONTAINS
END DO
IF (mpi%irank == 0) &
WRITE (6, '(6x,I4,'' ->'',f10.5,'' ('',ES8.1,'' )'')') n_radbasfn, &
intgrf(atoms%rmsh(:n_grid_pt, itype)**(l + 1)*hybrid%basm1(:n_grid_pt, n_radbasfn, l, itype), atoms%jri, &
intgrf(atoms%rmsh(:n_grid_pt, itype)**(l + 1)*hybrid%radbasfn_mt(:n_grid_pt, n_radbasfn, l, itype), atoms%jri, &
atoms%jmtd, atoms%rmsh, atoms%dx, atoms%ntype, itype, gridf), rdum
END DO
END DO
......
......@@ -21,7 +21,7 @@ MODULE m_types_hybrid
INTEGER, ALLOCATABLE :: tvec(:,:,:)
INTEGER, ALLOCATABLE :: nbasm(:)
REAL :: tolerance1 !only read in
REAL, ALLOCATABLE :: basm1(:,:,:,:)
REAL, ALLOCATABLE :: radbasfn_mt(:,:,:,:)
COMPLEX, ALLOCATABLE :: d_wgn2(:,:,:,:)
INTEGER, ALLOCATABLE :: ne_eig(:), nbands(:), nobd(:,:)
REAL, ALLOCATABLE :: div_vv(:,:,:)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment