89 lines
2.2 KiB
Fortran
89 lines
2.2 KiB
Fortran
!-------------------------------------------------------------------
|
|
! Time-stamp: "2024-10-09 13:33:50 dwilliams"
|
|
|
|
subroutine genANN_ctrans(pat_in)
|
|
implicit none
|
|
|
|
include 'nnparams.incl'
|
|
include 'JTmod.incl'
|
|
|
|
real*8 pat_in(maxnin)
|
|
|
|
real*8 raw_in(maxnin),off_in(maxnin),ptrans_in(7)
|
|
real*8 r0
|
|
real*8 a,b,xs,ys,xb,yb
|
|
|
|
integer k
|
|
|
|
off_in(1:7)=pat_in(1:7)
|
|
r0=offsets(1)
|
|
|
|
! transform primitives
|
|
! recover raw distances from offset coords
|
|
do k=1,3
|
|
raw_in(k)=off_in(k)+offsets(1)
|
|
enddo
|
|
|
|
do k=1,3
|
|
ptrans_in(k)=off_in(k)
|
|
enddo
|
|
|
|
! rescale ONO angles
|
|
ptrans_in(4)=deg2rad*off_in(4)
|
|
ptrans_in(5)=deg2rad*off_in(5)
|
|
ptrans_in(6)=deg2rad*off_in(6)
|
|
! rescale umbrella
|
|
ptrans_in(7)=off_in(7)*deg2rad
|
|
|
|
! compute symmetry coordinates
|
|
|
|
! A (breathing)
|
|
a=(ptrans_in(1)+ptrans_in(2)+ptrans_in(3))/dsqrt(3.0d0)
|
|
! ES
|
|
call prim2emode(ptrans_in(1:3),xs,ys)
|
|
! EB
|
|
call prim2emode(ptrans_in(4:6),xb,yb)
|
|
! B (umbrella)
|
|
b=ptrans_in(7)
|
|
|
|
! overwrite input with output
|
|
|
|
pat_in(pat_index(1))=a ! 1
|
|
pat_in(pat_index(2))=xs
|
|
pat_in(pat_index(3))=ys
|
|
pat_in(pat_index(4))=xb
|
|
pat_in(pat_index(5))=yb
|
|
pat_in(pat_index(6))=b
|
|
! totally symmetric monomials
|
|
pat_in(pat_index(7))=xs**2 + ys**2 ! 2
|
|
pat_in(pat_index(8))=xb**2 + yb**2 ! 3
|
|
pat_in(pat_index(9))=b**2 ! 9
|
|
pat_in(pat_index(10))=xs*xb+ys*yb ! 4
|
|
! S^3, B^3
|
|
pat_in(pat_index(11))=xs*(xs**2-3*ys**2) ! 5
|
|
pat_in(pat_index(12))=xb*(xb**2-3*yb**2) ! 6
|
|
! S^2 B, S B^2
|
|
pat_in(pat_index(13))=xb*(xs**2-ys**2) - 2*yb*xs*ys ! 7
|
|
pat_in(pat_index(14))=xs*(xb**2-yb**2) - 2*ys*xb*yb ! 8
|
|
|
|
do k=11,14
|
|
pat_in(pat_index(k))=tanh(0.1d0*pat_in(pat_index(k)))*10.0d0
|
|
enddo
|
|
|
|
contains
|
|
|
|
subroutine prim2emode(prim,ex,ey)
|
|
implicit none
|
|
! Takes a 2D-vector prim and returns the degenerate modes x and y
|
|
! following our standard conventions.
|
|
|
|
real*8 prim(3),ex,ey
|
|
|
|
ex=(2.0d0*prim(1)-prim(2)-prim(3))/dsqrt(6.0d0)
|
|
ey=(prim(2)-prim(3))/dsqrt(2.0d0)
|
|
|
|
end
|
|
|
|
|
|
end subroutine
|