added ndiv 4/5 & skip dmin tesserae merging for YK

This commit is contained in:
Apra, Edoardo 2025-08-19 17:14:42 -07:00 committed by edoapra
parent 21c47eb17b
commit 4f8737aeda
No known key found for this signature in database
GPG key ID: 9E6A0B70826967BA
2 changed files with 33 additions and 24 deletions

View file

@ -395,6 +395,8 @@ c Valid values are:
c - coarse: 60 triangles per sphere
c - fine : 240 (default)
c - xfine : 960
c - huge : tbd
c - xxl : tbd
c
else if(inp_compare(.false.,'ndiv',field)) then
if (.not.inp_a(token))
@ -405,6 +407,10 @@ c
cosmo_ndiv = 2
else if (inp_compare(.false.,'xfine',token)) then
cosmo_ndiv = 3
else if (inp_compare(.false.,'huge',token)) then
cosmo_ndiv = 4
else if (inp_compare(.false.,'xxl',token)) then
cosmo_ndiv = 5
else
write(luout,*)"invalid option for NDIV, valid options are:"
write(luout,*)" coarse, fine (default), xfine"

View file

@ -791,33 +791,36 @@ c The minimum distance we will accept between 2 segments,
c this is slight lower than the minimum distance for a rsolv sphere.
dmin = rsolv/cau2ang * 0.3 * mfactor
if (ndiv.eq.2) dmin = dmin/2.0
if (ndiv.eq.3) dmin = dmin/4.0
if (ndiv.ge.3) dmin = dmin/4.0
c
c Checking for overlapping segments to merge.
iseg = 0
do while (iseg <= nseg)
if (dmin.le.zero) exit
iseg = iseg + 1
if(segarea(iseg).le.zero) cycle
do jseg=iseg+1,nseg
if(segarea(jseg).le.zero) cycle
dij=dist(xyzseg(1,iseg),xyzseg(2,iseg),xyzseg(3,iseg),
+ xyzseg(1,jseg),xyzseg(2,jseg),xyzseg(3,jseg))
if(dij.lt.dmin) then
c Accumulate the area at the centroid.
asum = segarea(iseg) + segarea(jseg)
do m=1,3
xyzseg(m,iseg) = (segarea(iseg)*xyzseg(m,iseg) +
+ segarea(jseg)*xyzseg(m,jseg))/asum
if (do_cosmo_model.ne.DO_COSMO_YK.and.
A dmin.gt.zero) then
iseg = 0
do while (iseg <= nseg)
iseg = iseg + 1
if(segarea(iseg).le.zero) cycle
do jseg=iseg+1,nseg
if(segarea(jseg).le.zero) cycle
dij=dist(
I xyzseg(1,iseg),xyzseg(2,iseg),xyzseg(3,iseg),
J xyzseg(1,jseg),xyzseg(2,jseg),xyzseg(3,jseg))
if(dij.lt.dmin) then
c Accumulate the area at the centroid.
asum = segarea(iseg) + segarea(jseg)
do m=1,3
xyzseg(m,iseg) = (segarea(iseg)*xyzseg(m,iseg)+
+ segarea(jseg)*xyzseg(m,jseg))/asum
end do
segarea(iseg) = asum;
segarea(jseg) = zero;
c Start over, perhaps 3 or more segments should be merged
iseg = 0
exit
end if
end do
segarea(iseg) = asum;
segarea(jseg) = zero;
c Start over, perhaps 3 or more segments should be merged
iseg = 0
exit
end if
end do
end do
end do
endif
c Add the segments sorted by atom.
ief = 0
do iat=1,nat