
subroutine NewMaxima( Nsp, MaxSp, Ensemble, DXYZ, DROT, CDV, &
					  NATT, NSUC, BoxSize )

implicit none

integer, parameter									:: Nphases = 2

integer, intent(in)									:: Nsp
integer, intent(in)									:: Maxsp

character*5, intent(in)								:: Ensemble

real, dimension(MaxSp, Nphases), intent(inout)		:: DXYZ
real, dimension(MaxSp, Nphases), intent(inout)		:: DROT

real, dimension(Nphases), intent(inout)				:: CDV

integer, dimension(5, MaxSp, Nphases), intent(inout):: NATT
integer, dimension(5, MaxSp, Nphases), intent(inout):: NSUC

real, dimension(Nphases), intent(in)				:: BoxSize

! Local Stuff

integer									:: i, j

real									:: SimRatio
real, dimension(3)						:: TarRatio

TarRatio(1) = 0.5
TarRatio(2) = 0.5
TarRatio(3) = 0.25


do j = 1, Nphases

	do i = 1, Nsp

		if( NATT(1,i,j) /= 0 ) then

			SimRatio = real( NSUC(1,i,j) ) / real( NATT(1,i,j) )

			if( SimRatio > TarRatio(1) ) DXYZ(i,j) = DXYZ(i,j) * 1.05
			if( SimRatio < TarRatio(1) ) DXYZ(i,j) = DXYZ(i,j) * 0.95

			DXYZ(i,j) = min( DXYZ(i,j), 0.5 )

		end if

		if( NATT(2,i,j) /= 0 ) then
			
			SimRatio = real( NSUC(2,i,j) ) / real( NATT(2,i,j) )

			if( SimRatio > TarRatio(2) ) DROT(i,j) = DROT(i,j) * 1.05
			if( SimRatio < TarRatio(2) ) DROT(i,j) = DROT(i,j) * 0.95

			DROT(i,j) = min( DROT(i,j), 0.5 )

		end if

	end do

	if( Ensemble == 'NPT' .AND. NATT(3,1,j) /= 0 ) then

		SimRatio = real( NSUC(3,1,j) ) / real( NATT(3,1,j) )
		
		if( SimRatio > TarRatio(3) ) CDV(j) = CDV(j) * 1.05
		if( SimRatio < TarRatio(3) ) CDV(j) = CDV(j) * 0.95

		CDV(j) = min( CDV(j), 0.03 * BoxSize(j)**3 )

	end if

end do

if( Ensemble == 'NVT' .AND. NATT(3,1,1) /= 0 ) then

	SimRatio = real( NSUC(3,1,1) ) / real( NATT(3,1,1) )

	if( SimRatio > TarRatio(3) ) CDV(1) = CDV(1) * 1.05
	if( SimRatio < TarRatio(3) ) CDV(1) = CDV(1) * 0.95

	CDV(1) = min( CDV(1), 0.03 * minval(BoxSize)**3 )

	CDV(2) = CDV(1)

end if

NATT = 0
NSUC = 0

return

end subroutine NewMaxima





