Merge branch 'master' of mmka:unres into multichain
authorAdam Sieradzan <adasko@piasek4.chem.univ.gda.pl>
Wed, 17 Dec 2014 09:40:58 +0000 (10:40 +0100)
committerAdam Sieradzan <adasko@piasek4.chem.univ.gda.pl>
Wed, 17 Dec 2014 09:40:58 +0000 (10:40 +0100)
Conflicts:
.gitignore
bin/cluster/unres_clustMD-mult_MPICH-GAB.exe
bin/unres/MD/unres_gfortran_single_GAB.exe
bin/unres/MD/unres_ifort_single_GAB.exe
bin/unres/MINIM/unres_ifort_MIN_single_E0LL2Y.exe
bin/unres/MINIM/unres_ifort_MIN_single_GAB.exe
bin/unres_clustMD_MPI-oldparm
bin/wham/wham_multparm-ham_rep-oldparm
source/cluster/wham/src/COMMON.SCCOR
source/cluster/wham/src/Makefile
source/unres/src_MD-M/MREMD.F
source/unres/src_MD-M/Makefile
source/unres/src_MD-M/energy_p_new_barrier.F
source/unres/src_MD-M/stochfric.F
source/unres/src_MD-M/unres.F
source/unres/src_MD/cinfo.f
source/wham/src-M/Makefile
source/wham/src/DIMENSIONS.FREE

19 files changed:
1  2 
CMakeLists.txt
bin/unres/MINIM/unres_ifort_MIN_single_GAB.exe
source/unres/src_MD-M/CMakeLists.txt
source/unres/src_MD-M/COMMON.DERIV
source/unres/src_MD-M/MD_A-MTS.F
source/unres/src_MD-M/MREMD.F
source/unres/src_MD-M/energy_p_new_barrier.F
source/unres/src_MD-M/geomout.F
source/unres/src_MD-M/initialize_p.F
source/unres/src_MD-M/readrtns_CSA.F
source/unres/src_MD-M/sc_move.F
source/unres/src_MD-M/unres.F
source/unres/src_MD/CMakeLists.txt
source/unres/src_MD/COMMON.SCCOR
source/unres/src_MD/energy_p_new_barrier.F
source/unres/src_MIN/CMakeLists.txt
source/wham/src-M/CMakeLists.txt
source/wham/src/CMakeLists.txt
source/wham/src/energy_p_new.F

diff --combined CMakeLists.txt
@@@ -6,8 -6,8 +6,8 @@@ cmake_minimum_required(VERSION 2.8
  project(UNRESPACK Fortran C)
  
  set(UNRES_MAJOR 3)
- set(UNRES_MINOR 1)
- set(UNRES_PATCH 0)
+ set(UNRES_MINOR 2)
+ set(UNRES_PATCH 1)
  set(UNRES_VERSION ${UNRES_MAJOR}.${UNRES_MINOR}.${UNRES_PATCH})
  
  #======================================
@@@ -63,6 -63,13 +63,13 @@@ MACRO (CINFO_FORMAT FN VN VD
        file(APPEND ${FN} "       write(iout,*)'${STR}'\n")
      endif(SUMA GREATER 50)
  ENDMACRO (CINFO_FORMAT)
+ # Some MPI wrappers pass double include paths
+ # This macro fixes broken by semicolon occurence in path
+ MACRO (FIX_DBL_INCLUDE RESULT)
+   string(REPLACE ";" " -I" ${RESULT} "${${RESULT}}")
+ ENDMACRO (FIX_DBL_INCLUDE)
  #======================================
  # CTest stuff
  #======================================A
@@@ -70,8 -77,6 +77,6 @@@
  include(CTest)
  enable_testing()
   
- # Set makefile verbose on
- set( CMAKE_VERBOSE_MAKEFILE 1 )
  
  #======================================
  # Fortran compilers stuff
@@@ -88,10 -93,23 +93,23 @@@ SET(CMAKE_Fortran_COMPILE_OBJECT "<CMAK
     
  # make sure that the default is a RELEASE
  if (NOT CMAKE_BUILD_TYPE)
-   set (CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: None Debug Release." FORCE)
-   set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "None" "Debug" "Release" )
+   set (CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo." FORCE)
+   set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "None" "Debug" "Release" "RelWithDebInfo")
  endif (NOT CMAKE_BUILD_TYPE)
-    
+ if (CMAKE_BUILD_TYPE STREQUAL "Release")
+   # Set makefile verbosity off for Release builds
+   set( CMAKE_VERBOSE_MAKEFILE 0 )
+ else()
+   # Set makefile verbosity on for other builds
+   set( CMAKE_VERBOSE_MAKEFILE 1 )
+ endif (CMAKE_BUILD_TYPE STREQUAL "Release")
+ # Default Install Path
+ set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/bin" CACHE PATH "Binary install directory " FORCE)
  #=======================================  
  # Set the varous build variables 
  #=======================================
@@@ -120,54 -138,16 +138,16 @@@ option(UNRES_NA_MMCE "Kompilujemy na mm
  # MPI stuff
  #=================================
  
- # Note for the future - use finde package to get MPI 
- find_package(MPI)
- #if(MPI_LIBRARY)
- #MPI_INCLUDE_PATH
- if(MPIF_LOCAL_DIR)
-   find_library(MPIF_LIBRARY NAMES libmpich.a  NO_DEFAULT_PATH  PATHS  ${MPIF_LOCAL_DIR}/lib)
-   find_path( MPIF_INCLUDE_DIRECTORIES  NAMES mpif.h  NO_DEFAULT_PATH  PATHS  ${MPIF_LOCAL_DIR}/include  )
- else(MPIF_LOCAL_DIR)
-   find_library(MPIF_LIBRARY NAMES mpi mpich PATHS 
-       ${MPI_LIBRARY}
-       ${MPI_LIBRARY}/../
-       ${MPI_EXTRA_LIBRARY}
-       /users/local/mpi64/mpich-1.2.7p1/lib 
-       /usr/lib
-         /usr/local/lib
-         /usr/local/mpi/lib
-   )
-   find_path( MPIF_INCLUDE_DIRECTORIES NAMES  mpif.h PATHS
-       ${MPI_INCLUDE_PATH}
-       /users/local/mpi64/mpich-1.2.7p1/include
-       /usr/include
-       /usr/local/include   
-       /usr/include/mpi
-       /usr/local/mpi/include
-   )
- endif(MPIF_LOCAL_DIR)
- set( MPIF_LIBRARIES  ${MPIF_LIBRARY})
- if ( MPIF_INCLUDE_DIRECTORIES )
-   set( MPIF_FOUND TRUE )
+ # Note for the future - use find package to get MPI 
+ find_package(MPI QUIET)
+ if (MPI_Fortran_FOUND)
    message("MPI found")
- else ( MPIF_INCLUDE_DIRECTORIES )
-   set( MPIF_FOUND FALSE )
+   FIX_DBL_INCLUDE(MPI_Fortran_INCLUDE_PATH)
+ else()
    message("MPI not found - disabling MPI compile flags ")
    set ( UNRES_WITH_MPI "OFF")
- endif ( MPIF_INCLUDE_DIRECTORIES )
- if (MPIF_FOUND)
-   message("MPIF_LIBRARIES=${MPIF_LIBRARY}")
-   message("MPIF_INCLUDE_DIRECTORIES=${MPIF_INCLUDE_DIRECTORIES}" )
- endif(MPIF_FOUND) 
+ endif(MPI_Fortran_FOUND)      
  
  #======================================
  # Detect system architecture
@@@ -188,29 -168,22 +168,21 @@@ message("Detected ${architektura}-bit a
  # used by unres/src_MIN
  find_package (Threads)
  
- #=======================================
- #  Create diractories for build targets
- #=======================================
- #execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/bin/unres/MD )
  #=======================================
  # Add source files
  #=======================================     
  
 -
  add_subdirectory(source/lib/xdrf)
  
 -
  if(UNRES_NA_MMCE)
  
    if(UNRES_WITH_MPI)
      # Brak MPI dla gfortrana, wiec tylko na ifort sie skompiluje
      if (Fortran_COMPILER_NAME STREQUAL "ifort")
        add_subdirectory(source/unres/src_MD)
 +      add_subdirectory(source/unres/src_MD_DFA)
        add_subdirectory(source/unres/src_MD-M)
        add_subdirectory(source/unres/src_CSA)
-       add_subdirectory(source/unres/src_CSA_DiL)
        add_subdirectory(source/cluster/wham/src)
        add_subdirectory(source/cluster/wham/src-M)
      endif (Fortran_COMPILER_NAME STREQUAL "ifort")
@@@ -229,9 -202,7 +201,8 @@@ else(
    add_subdirectory(source/unres/src_MD)
    if(UNRES_WITH_MPI)
      add_subdirectory(source/unres/src_MD-M)
 +    add_subdirectory(source/unres/src_MD_DFA)
      add_subdirectory(source/unres/src_CSA)
-     add_subdirectory(source/unres/src_CSA_DiL)
      add_subdirectory(source/wham/src)
      add_subdirectory(source/wham/src-M)
      add_subdirectory(source/cluster/wham/src)
diff --combined bin/unres/MINIM/unres_ifort_MIN_single_GAB.exe
index 6e1ebca,8fbedcf..0000000
deleted file mode 100755,100755
Binary files differ
@@@ -5,11 -5,6 +5,6 @@@
  enable_language (Fortran)
  
  #================================
- # build the xdrf library 
- #================================ 
- #add_subdirectory(xdrf)
- #================================
  # Set source file lists
  #================================
  set(UNRES_MDM_SRC0 
@@@ -71,6 -66,7 +66,7 @@@
        permut.F
        pinorm.f 
        printmat.f 
+       prng_32.F
        q_measure.F 
        ran.f
        randgens.f 
        timing.F
        together.F
        unres.F
+       ssMD.F
  )
  
- if (Fortran_COMPILER_NAME STREQUAL "ifort")
-   set(UNRES_MDM_SRC0 ${UNRES_MDM_SRC0} prng.f ) 
- elseif(Fortran_COMPILER_NAME STREQUAL "mpif90")
-   set(UNRES_MDM_SRC0 ${UNRES_MDM_SRC0} prng.f )
- else()
-   set(UNRES_MDM_SRC0 ${UNRES_MDM_SRC0} prng_32.F )
- endif (Fortran_COMPILER_NAME STREQUAL "ifort")
  set(UNRES_MDM_SRC3 energy_p_new_barrier.F energy_p_new-sep_barrier.F gradient_p.F )
  
  set(UNRES_MDM_PP_SRC
        newconf.f 
        parmread.F 
        permut.F
+       prng_32.F
        q_measure1.F 
        q_measure3.F 
        q_measure.F
@@@ -187,10 -176,10 +176,10 @@@ endif (Fortran_COMPILER_NAME STREQUAL "
  
  # Add MPI compiler flags
  if(UNRES_WITH_MPI)
-   set(FFLAGS0 "${FFLAGS0} -I${MPIF_INCLUDE_DIRECTORIES}")
-   set(FFLAGS1 "${FFLAGS1} -I${MPIF_INCLUDE_DIRECTORIES}")
-   set(FFLAGS2 "${FFLAGS2} -I${MPIF_INCLUDE_DIRECTORIES}")
-   set(FFLAGS3 "${FFLAGS3} -I${MPIF_INCLUDE_DIRECTORIES}")
+   set(FFLAGS0 "${FFLAGS0} -I${MPI_Fortran_INCLUDE_PATH}")
+   set(FFLAGS1 "${FFLAGS1} -I${MPI_Fortran_INCLUDE_PATH}")
+   set(FFLAGS2 "${FFLAGS2} -I${MPI_Fortran_INCLUDE_PATH}")
+   set(FFLAGS3 "${FFLAGS3} -I${MPI_Fortran_INCLUDE_PATH}")
  endif(UNRES_WITH_MPI)
  
  set_property(SOURCE ${UNRES_MDM_SRC0} APPEND PROPERTY COMPILE_FLAGS ${FFLAGS0} )
@@@ -203,14 -192,14 +192,14 @@@ set_property(SOURCE ${UNRES_MDM_SRC3} P
  #=========================================
  if(UNRES_MD_FF STREQUAL "GAB" )
    # set preprocesor flags   
 -  set(CPPFLAGS "PROCOR -DUNRES -DISNAN -DSPLITELE -DLANG0 -DCRYST_BOND -DCRYST_THETA -DCRYST_SC" )
 +  set(CPPFLAGS "PROCOR -DUNRES -DISNAN -DSPLITELE -DLANG0 -DCRYST_BOND -DCRYST_THETA -DCRYST_SC  -DSCCORPDB" )
  
  #=========================================
  #  Settings for E0LL2Y force field
  #=========================================
  elseif(UNRES_MD_FF STREQUAL "E0LL2Y")
    # set preprocesor flags   
 -  set(CPPFLAGS "PROCOR -DUNRES -DISNAN -DSPLITELE -DLANG0" )
 +  set(CPPFLAGS "PROCOR -DUNRES -DISNAN -DSPLITELE -DLANG0 -DSCCORPDB" )
  endif(UNRES_MD_FF STREQUAL "GAB")
  
  
@@@ -235,9 -224,6 +224,9 @@@ elseif (Fortran_COMPILER_NAME STREQUAL 
  elseif (Fortran_COMPILER_NAME STREQUAL "gfortran")
    # Add old gfortran flags
    set(CPPFLAGS "${CPPFLAGS} -DG77") 
 +else (Fortran_COMPILER_NAME STREQUAL "ifort")
 +  # Default preprocessor flags
 +  set(CPPFLAGS "${CPPFLAGS} -DPGI")
  endif (Fortran_COMPILER_NAME STREQUAL "ifort")
  
  
@@@ -249,7 -235,9 +238,9 @@@ if (UNRES_WITH_MPI
  endif(UNRES_WITH_MPI)
  
  
+ #=========================================
  # add 64-bit specific preprocessor flags
+ #=========================================
  if (architektura STREQUAL "64")
    set(CPPFLAGS "${CPPFLAGS} -DAMD64")
  endif (architektura STREQUAL "64")
@@@ -268,10 -256,10 +259,10 @@@ set_property(SOURCE proc_proc.c PROPERT
  #========================================
  if(UNRES_WITH_MPI) 
    # binary with mpi
-   set(UNRES_BIN "unres_${Fortran_COMPILER_NAME}_MPICH_${UNRES_FF}.exe")
+   set(UNRES_BIN "unresMD-M_${Fortran_COMPILER_NAME}_MPICH_${UNRES_MD_FF}.exe")
  else(UNRES_WITH_MPI)
    # binary without mpi
-   set(UNRES_BIN "unres_${Fortran_COMPILER_NAME}_single_${UNRES_FF}.exe")
+   set(UNRES_BIN "unresMD-M_${Fortran_COMPILER_NAME}_single_${UNRES_MD_FF}.exe")
  endif(UNRES_WITH_MPI)  
  
  #=========================================
@@@ -316,8 -304,7 +307,7 @@@ set(UNRES_MDM_SRCS ${UNRES_MDM_SRC0} ${
  #=========================================
  add_executable(UNRES_BIN-MD-M ${UNRES_MDM_SRCS} )
  set_target_properties(UNRES_BIN-MD-M PROPERTIES OUTPUT_NAME ${UNRES_BIN})
- #set_property(TARGET ${UNRES_BIN} PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/unres/MD )
+ set_property(TARGET UNRES_BIN-MD-M PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
  #add_dependencies (${UNRES_BIN} ${UNRES_XDRFLIB})
  
  #=========================================
  #=========================================
  # link MPI library (libmpich.a)  
  if(UNRES_WITH_MPI)
-   target_link_libraries( UNRES_BIN-MD-M ${MPIF_LIBRARIES} )
+   target_link_libraries( UNRES_BIN-MD-M ${MPI_Fortran_LIBRARIES} )
  endif(UNRES_WITH_MPI)
  # link libxdrf.a 
  #message("UNRES_XDRFLIB=${UNRES_XDRFLIB}")
  target_link_libraries( UNRES_BIN-MD-M xdrf )
+ #=========================================
+ # Install Path
+ #=========================================
+ install(TARGETS UNRES_BIN-MD-M DESTINATION ${CMAKE_INSTALL_PREFIX})
  
  #=========================================
  # TESTS 
@@@ -2,14 -2,14 +2,14 @@@
       & gvdwpp,gel_loc,gel_loc_long,gvdwc_scpp,
       & gradx_scp,gvdwc_scp,ghpbx,ghpbc,gloc,gloc_x,dtheta,dphi,dalpha,
       & domega,gscloc,gsclocx,gradcorr,gradcorr_long,gradcorr5_long,
-      & gradcorr6_long,gcorr6_turn_long
+      & gradcorr6_long,gcorr6_turn_long,gvdwx
        integer nfl,icg
        common /derivat/ dcdv(6,maxdim),dxdv(6,maxdim),dxds(6,maxres),
       & gradx(3,maxres,2),gradc(3,maxres,2),gvdwx(3,maxres),
       & gvdwc(3,maxres),gelc(3,maxres),gelc_long(3,maxres),
       & gvdwpp(3,maxres),gvdwc_scpp(3,maxres),
       & gradx_scp(3,maxres),gvdwc_scp(3,maxres),ghpbx(3,maxres),
 -     & ghpbc(3,maxres),gloc(maxvar,2),gradcorr(3,maxres),
 +     & ghpbc(3,maxres),gloc(0:maxvar,2),gradcorr(3,maxres),
       & gradcorr_long(3,maxres),gradcorr5_long(3,maxres),
       & gradcorr6_long(3,maxres),gcorr6_turn_long(3,maxres),
       & gradxorr(3,maxres),gradcorr5(3,maxres),gradcorr6(3,maxres),
@@@ -209,7 -209,7 +209,7 @@@ c Variable time step algorithm
            enddo
          enddo
          do i=nnt,nct
 -          if (itype(i).ne.10 .and. itype(i).ne.21) then
 +          if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
              do j=1,3
                ind=ind+1
                v_work(ind)=d_t(j,i+nres)
  #endif
          endif
          if (mod(itime,ntwx).eq.0) then
 +          call returnbox
            write (tytul,'("time",f8.2)') totT
            if(mdpdb) then
               call hairpin(.true.,nharp,iharp)
@@@ -956,7 -955,7 +956,7 @@@ c  forces)
          enddo
        enddo
        do i=nnt,nct
 -        if (itype(i).ne.10 .and. itype(i).ne.21) then
 +        if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
            inres=i+nres
            do j=1,3
              d_t(j,inres)=d_t(j,inres)+0.5d0*d_a(j,inres)*d_time
@@@ -1006,7 -1005,7 +1006,7 @@@ c Applying velocity Verlet algorithm - 
          enddo
        enddo
        do i=nnt,nct
 -        if (itype(i).ne.10 .and. itype(i).ne.21) then
 +        if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
            inres=i+nres
            do j=1,3    
              adt=d_a_old(j,inres)*d_time
@@@ -1050,7 -1049,7 +1050,7 @@@ c  Step 2 of the velocity Verlet algori
          enddo
        enddo
        do i=nnt,nct
 -        if (itype(i).ne.10 .and. itype(i).ne.21) then
 +        if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
            inres=i+nres
            do j=1,3
              d_t(j,inres)=d_t_new(j,inres)+0.5d0*d_a(j,inres)*d_time
@@@ -1088,12 -1087,25 +1088,25 @@@ c Applying velocity Verlet algorithm - 
  c
  c Compute friction and stochastic forces
  c
+ #ifdef MPI
        time00=MPI_Wtime()
+ #else
+       time00=tcpu()
+ #endif
        call friction_force
+ #ifdef MPI
        time_fric=time_fric+MPI_Wtime()-time00
        time00=MPI_Wtime()
+ #else
+       time_fric=time_fric+tcpu()-time00
+       time00=tcpu()
+ #endif
        call stochastic_force(stochforcvec) 
+ #ifdef MPI
        time_stoch=time_stoch+MPI_Wtime()-time00
+ #else
+       time_stoch=time_stoch+tcpu()-time00
+ #endif
  c
  c Compute the acceleration due to friction forces (d_af_work) and stochastic
  c forces (d_as_work)
          ind=ind+3
        enddo
        do i=nnt,nct
 -        if (itype(i).ne.10 .and. itype(i).ne.21) then
 +        if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
            inres=i+nres
            do j=1,3    
              adt=(d_a_old(j,inres)+d_af_work(ind+j))*d_time
          ind=ind+3
        enddo
        do i=nnt,nct
 -        if (itype(i).ne.10 .and. itype(i).ne.21) then
 +        if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
            inres=i+nres
            do j=1,3
              d_t(j,inres)=d_t_new(j,inres)+(0.5d0*(d_a(j,inres)
@@@ -1261,7 -1273,6 +1274,7 @@@ c            accel(j)=aux(j)+0.5d0*(d_a
  c            if (dabs(accel(j)).gt.amax) amax=dabs(accel(j))
              if (dabs(accel(j)).gt.dabs(accel_old(j))) then
                dacc=dabs(accel(j)-accel_old(j))
 +c              write (iout,*) i,dacc
                if (dacc.gt.amax) amax=dacc
              endif
            enddo
@@@ -1280,7 -1291,7 +1293,7 @@@ c        accel(j)=aux(j
          enddo
        endif
        do i=nnt,nct
 -        if (itype(i).ne.10 .and. itype(i).ne.21) then
 +        if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
            do j=1,3 
  c            accel(j)=accel(j)+d_a(j,i+nres)-d_a_old(j,i+nres)
              accel_old(j)=accel_old(j)+d_a_old(j,i+nres)
  c          if (dabs(accel(j)).gt.amax) amax=dabs(accel(j))
            if (dabs(accel(j)).gt.dabs(accel_old(j))) then
              dacc=dabs(accel(j)-accel_old(j))
 +c            write (iout,*) "side-chain",i,dacc
              if (dacc.gt.amax) amax=dacc
            endif
          enddo
@@@ -1334,7 -1344,7 +1347,7 @@@ c            write (iout,*) "back",i,j,
            enddo
          endif
  c Side chains
 -        if (itype(i).ne.10 .and. itype(i).ne.21) then
 +        if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
            do j=1,3 
              epdriftij=
       &       dabs((d_a(j,i+nres)-d_a_old(j,i+nres))*gxcart(j,i))
@@@ -1381,7 -1391,7 +1394,7 @@@ c      write(iout,*) "fact", fac
          enddo
        enddo
        do i=nnt,nct
 -        if (itype(i).ne.10 .and. itype(i).ne.21) then
 +        if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
            inres=i+nres
            do j=1,3
              d_t(j,inres)=fact*d_t(j,inres)
@@@ -1436,8 -1446,7 +1449,8 @@@ c if the friction coefficients do not d
            stdforcp(i)=stdfp*dsqrt(gamp)
          enddo
          do i=nnt,nct
 -          stdforcsc(i)=stdfsc(itype(i))*dsqrt(gamsc(itype(i)))
 +          stdforcsc(i)=stdfsc(iabs(itype(i)))
 +     &                *dsqrt(gamsc(iabs(itype(i))))
          enddo
        endif
  c Open the pdb file for snapshotshots
@@@ -1511,11 -1520,13 +1524,13 @@@ c        statname=statname(:ilen(statna
         if (restart1file) then
           if (me.eq.king)
       &     inquire(file=mremd_rst_name,exist=file_exist)
+ #ifdef MPI
             write (*,*) me," Before broadcast: file_exist",file_exist
           call MPI_Bcast(file_exist,1,MPI_LOGICAL,king,CG_COMM,
       &          IERR)
           write (*,*) me," After broadcast: file_exist",file_exist
  c        inquire(file=mremd_rst_name,exist=file_exist)
+ #endif
          if(me.eq.king.or..not.out1file)
       &   write(iout,*) "Initial state read by master and distributed"
         else
@@@ -1828,7 -1839,7 +1843,7 @@@ c Transfer to the d_t vecto
          enddo
        enddo
        do i=nnt,nct
 -        if (itype(i).ne.10 .and. itype(i).ne.21) then
 +        if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
            do j=1,3
              ind=ind+1
              d_t(j,i+nres)=d_t_work(ind)
@@@ -2057,7 -2068,7 +2072,7 @@@ c      endd
          ind=ind+3
        enddo
        do i=nnt,nct
 -        if (itype(i).ne.10 .and. itype(i).ne.21) then
 +        if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
            do j=1,3
              dc_work(ind+j)=dc_old(j,i+nres)
              d_t_work(ind+j)=d_t_old(j,i+nres)
          ind=ind+3
        enddo
        do i=nnt,nct
 -        if (itype(i).ne.10 .and. itype(i).ne.21) then
 +        if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
            inres=i+nres
            do j=1,3
              d_t(j,inres)=d_t_work(ind+j)
@@@ -2323,7 -2334,7 +2338,7 @@@ c      endd
          ind=ind+3
        enddo
        do i=nnt,nct
 -        if (itype(i).ne.10 .and. itype(i).ne.21) then
 +        if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
            do j=1,3
              dc_work(ind+j)=dc_old(j,i+nres)
              d_t_work(ind+j)=d_t_old(j,i+nres)
          ind=ind+3
        enddo
        do i=nnt,nct
 -        if (itype(i).ne.10 .and. itype(i).ne.21) then
 +        if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
            inres=i+nres
            do j=1,3
              dc(j,inres)=dc_work(ind+j)
@@@ -2433,7 -2444,7 +2448,7 @@@ c          ddt2=ddt2+vrand_mat2(i,j)*st
          ind=ind+3
        enddo
        do i=nnt,nct
 -        if (itype(i).ne.10 .and. itype(i).ne.21) then
 +        if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
            inres=i+nres
            do j=1,3
              d_t(j,inres)=d_t_work(ind+j)
@@@ -525,9 -525,7 +525,9 @@@ c Variable time step algorithm
                ugamma_cache(i,ntwx_cache)=ugamma(i)
                uscdiff_cache(i,ntwx_cache)=uscdiff(i)
              enddo
 -
 +C            print *,'przed returnbox'
 +            call returnbox
 +C            call enerprint(remd_ene(0,i))
              do i=1,nres*2
               do j=1,3
                c_cache(j,i,ntwx_cache)=c(j,i)
@@@ -833,7 -831,7 +833,7 @@@ c     &          remd_t_bath(iex
                 call rescale_weights(remd_t_bath(iex))
  
  c               write (iout,*) "0,i",remd_t_bath(iex)
 -c               call enerprint(remd_ene(0,i))
 +               call enerprint(remd_ene(0,i))
  
                 call sum_energy(remd_ene(0,i),.false.)
  c               write (iout,*) "ene_i_iex",remd_ene(0,i)
@@@ -961,7 -959,7 +961,7 @@@ cd            write(iout,*) "########",
  
  cd            write(iout,*) "i=",i,i_temp,i_mult,i_iset,i_mset
  
-             i_dir=iran_num(1,3)
+              i_dir=iran_num(1,3)
  cd            write(iout,*) "i_dir=",i_dir
  
              if(i_dir.eq.1 .and. remd_m(i_temp+1).gt.0 )then            
@@@ -1172,7 -1170,7 +1172,7 @@@ co     &    " rescaling weights with te
           stdfp=dsqrt(2*Rb*t_bath/d_time)
           do i=1,ntyp
             stdfsc(i)=dsqrt(2*Rb*t_bath/d_time)
-          enddo 
+          enddo
  
  cde         write(iout,*) 'REMD after',me,t_bath
             time08=MPI_WTIME()
@@@ -1502,8 -1500,13 +1502,13 @@@ c end debuggin
            call xdrffloat_(ixdrf, real(t_restart1(4,il)), iret)
            call xdrfint_(ixdrf, nss, iret) 
            do j=1,nss
-            call xdrfint_(ixdrf, ihpb(j), iret)
-            call xdrfint_(ixdrf, jhpb(j), iret)
+            if (dyn_ss) then
+             call xdrfint(ixdrf, idssb(j)+nres, iret)
+             call xdrfint(ixdrf, jdssb(j)+nres, iret)
+            else
+             call xdrfint_(ixdrf, ihpb(j), iret)
+             call xdrfint_(ixdrf, jhpb(j), iret)
+            endif
            enddo
            call xdrfint_(ixdrf, nfrag+npair+3*nfrag_back, iret)
            call xdrfint_(ixdrf, iset_restart1(il), iret)
            call xdrffloat(ixdrf, real(t_restart1(4,il)), iret)
            call xdrfint(ixdrf, nss, iret) 
            do j=1,nss
-            call xdrfint(ixdrf, ihpb(j), iret)
-            call xdrfint(ixdrf, jhpb(j), iret)
+            if (dyn_ss) then
+             call xdrfint(ixdrf, idssb(j)+nres, iret)
+             call xdrfint(ixdrf, jdssb(j)+nres, iret)
+            else
+             call xdrfint(ixdrf, ihpb(j), iret)
+             call xdrfint(ixdrf, jhpb(j), iret)
+            endif
            enddo
            call xdrfint(ixdrf, nfrag+npair+3*nfrag_back, iret)
            call xdrfint(ixdrf, iset_restart1(il), iret)
@@@ -1863,228 -1871,4 +1873,228 @@@ c     &                (d_restart1(j,i+
          if(me.eq.king) close(irest2)
          return
          end
 +c------------------------------------------
 +      subroutine returnbox
 +      include 'DIMENSIONS'
 +      include 'mpif.h'
 +      include 'COMMON.CONTROL'
 +      include 'COMMON.VAR'
 +      include 'COMMON.MD'
 +#ifndef LANG0
 +      include 'COMMON.LANGEVIN'
 +#else
 +      include 'COMMON.LANGEVIN.lang0'
 +#endif
 +      include 'COMMON.CHAIN'
 +      include 'COMMON.DERIV'
 +      include 'COMMON.GEO'
 +      include 'COMMON.LOCAL'
 +      include 'COMMON.INTERACT'
 +      include 'COMMON.IOUNITS'
 +      include 'COMMON.NAMES'
 +      include 'COMMON.TIME1'
 +      include 'COMMON.REMD'
 +      include 'COMMON.SETUP'
 +      include 'COMMON.MUCA'
 +      include 'COMMON.HAIRPIN'
 +        j=1
 +        chain_beg=1
 +C        do i=1,nres
 +C       write(*,*) 'initial', i,j,c(j,i)
 +C        enddo
 +        do i=1,nres-1
 +         if ((itype(i).eq.ntyp1).and.(itype(i+1).eq.ntyp1)) then
 +          chain_end=i
 +          if (allareout.eq.1) then
 +            ireturnval=int(c(j,i)/boxxsize)
 +            if (c(j,i).le.0) ireturnval=ireturnval-1
 +            do k=chain_beg,chain_end
 +              c(j,k)=c(j,k)-ireturnval*boxxsize
 +              c(j,k+nres)=c(j,k+nres)-ireturnval*boxxsize
 +            enddo
 +           endif
 +           chain_beg=i+1
 +           allareout=1
 +         else
 +          if (int(c(j,i)/boxxsize).eq.0) allareout=0
 +         endif
 +        enddo
 +         if (allareout.eq.1) then
 +            ireturnval=int(c(j,i)/boxxsize)
 +            if (c(j,i).le.0) ireturnval=ireturnval-1
 +            do k=chain_beg,nres
 +              c(j,k)=c(j,k)-ireturnval*boxxsize
 +              c(j,k+nres)=c(j,k+nres)-ireturnval*boxxsize
 +            enddo
 +          endif
 +C NO JUMP 
 +C        do i=1,nres
 +C        write(*,*) 'befor no jump', i,j,c(j,i)
 +C        enddo
 +        nojumpval=0
 +        do i=2,nres
 +           if (itype(i).eq.ntyp1 .and. itype(i-1).eq.ntyp1) then
 +             difference=abs(c(j,i-1)-c(j,i))
 +C             print *,'diff', difference
 +             if (difference.gt.boxxsize/2.0) then
 +                if (c(j,i-1).gt.c(j,i)) then
 +                  nojumpval=1
 +                 else
 +                   nojumpval=-1
 +                 endif
 +              else
 +              nojumpval=0
 +              endif
 +              endif
 +              c(j,i)=c(j,i)+nojumpval*boxxsize
 +              c(j,i+nres)=c(j,i+nres)+nojumpval*boxxsize
 +         enddo
 +       nojumpval=0
 +        do i=2,nres
 +           if (itype(i).eq.ntyp1 .and. itype(i-1).eq.ntyp1) then
 +             difference=abs(c(j,i-1)-c(j,i))
 +             if (difference.gt.boxxsize/2.0) then
 +                if (c(j,i-1).gt.c(j,i)) then
 +                  nojumpval=1
 +                 else
 +                   nojumpval=-1
 +                 endif
 +              else
 +              nojumpval=0
 +              endif
 +             endif
 +              c(j,i)=c(j,i)+nojumpval*boxxsize
 +              c(j,i+nres)=c(j,i+nres)+nojumpval*boxxsize
 +         enddo
 +
 +C        do i=1,nres
 +C        write(*,*) 'after no jump', i,j,c(j,i)
 +C        enddo
 +
 +C NOW Y dimension
 +        j=2
 +        chain_beg=1
 +        do i=1,nres-1
 +         if ((itype(i).eq.ntyp1).and.(itype(i+1).eq.ntyp1)) then
 +          chain_end=i
 +          if (allareout.eq.1) then
 +            ireturnval=int(c(j,i)/boxysize)
 +            if (c(j,i).le.0) ireturnval=ireturnval-1
 +            do k=chain_beg,chain_end
 +              c(j,k)=c(j,k)-ireturnval*boxysize
 +              c(j,k+nres)=c(j,k+nres)-ireturnval*boxysize
 +            enddo
 +           endif
 +           chain_beg=i+1
 +           allareout=1
 +         else
 +          if (int(c(j,i)/boxysize).eq.0) allareout=0
 +         endif
 +        enddo
 +         if (allareout.eq.1) then
 +            ireturnval=int(c(j,i)/boxysize)
 +            if (c(j,i).le.0) ireturnval=ireturnval-1
 +            do k=chain_beg,nres
 +              c(j,k)=c(j,k)-ireturnval*boxysize
 +              c(j,k+nres)=c(j,k+nres)-ireturnval*boxysize
 +            enddo
 +          endif
 +        nojumpval=0
 +        do i=2,nres
 +           if (itype(i).eq.ntyp1 .and. itype(i-1).eq.ntyp1) then
 +             difference=abs(c(j,i-1)-c(j,i))
 +             if (difference.gt.boxysize/2.0) then
 +                if (c(j,i-1).gt.c(j,i)) then
 +                  nojumpval=1
 +                 else
 +                   nojumpval=-1
 +                 endif
 +              else
 +              nojumpval=0
 +              endif
 +           endif
 +              c(j,i)=c(j,i)+nojumpval*boxysize
 +              c(j,i+nres)=c(j,i+nres)+nojumpval*boxysize
 +         enddo
 +      nojumpval=0
 +        do i=2,nres
 +           if (itype(i).eq.ntyp1 .and. itype(i-1).eq.ntyp1) then
 +             difference=abs(c(j,i-1)-c(j,i))
 +             if (difference.gt.boxysize/2.0) then
 +                if (c(j,i-1).gt.c(j,i)) then
 +                  nojumpval=1
 +                 else
 +                   nojumpval=-1
 +                 endif
 +              else
 +              nojumpval=0
 +              endif
 +            endif
 +              c(j,i)=c(j,i)+nojumpval*boxysize
 +              c(j,i+nres)=c(j,i+nres)+nojumpval*boxysize
 +         enddo
  
 +        j=3
 +        chain_beg=1
 +        do i=1,nres-1
 +         if ((itype(i).eq.ntyp1).and.(itype(i+1).eq.ntyp1)) then
 +          chain_end=i
 +          if (allareout.eq.1) then
 +            ireturnval=int(c(j,i)/boxysize)
 +            if (c(j,i).le.0) ireturnval=ireturnval-1
 +            do k=chain_beg,chain_end
 +              c(j,k)=c(j,k)-ireturnval*boxzsize
 +              c(j,k+nres)=c(j,k+nres)-ireturnval*boxzsize
 +            enddo
 +           endif
 +           chain_beg=i+1
 +           allareout=1
 +         else
 +          if (int(c(j,i)/boxzsize).eq.0) allareout=0
 +         endif
 +        enddo
 +         if (allareout.eq.1) then
 +            ireturnval=int(c(j,i)/boxzsize)
 +            if (c(j,i).le.0) ireturnval=ireturnval-1
 +            do k=chain_beg,nres
 +              c(j,k)=c(j,k)-ireturnval*boxzsize
 +              c(j,k+nres)=c(j,k+nres)-ireturnval*boxzsize
 +            enddo
 +          endif
 +        nojumpval=0
 +        do i=2,nres
 +           if (itype(i).eq.ntyp1 .and. itype(i-1).eq.ntyp1) then
 +             difference=abs(c(j,i-1)-c(j,i))
 +             if (difference.gt.(boxzsize/2.0)) then
 +                if (c(j,i-1).gt.c(j,i)) then
 +                  nojumpval=1
 +                 else
 +                   nojumpval=-1
 +                 endif
 +              else
 +              nojumpval=0
 +              endif
 +            endif
 +              c(j,i)=c(j,i)+nojumpval*boxzsize
 +              c(j,i+nres)=c(j,i+nres)+nojumpval*boxzsize
 +         enddo
 +       nojumpval=0
 +        do i=2,nres
 +           if (itype(i).eq.ntyp1 .and. itype(i-1).eq.ntyp1) then
 +             difference=abs(c(j,i-1)-c(j,i))
 +             if (difference.gt.boxzsize/2.0) then
 +                if (c(j,i-1).gt.c(j,i)) then
 +                  nojumpval=1
 +                 else
 +                   nojumpval=-1
 +                 endif
 +              else
 +              nojumpval=0
 +              endif
 +            endif
 +              c(j,i)=c(j,i)+nojumpval*boxzsize
 +              c(j,i+nres)=c(j,i+nres)+nojumpval*boxzsize
 +         enddo
 +
 +        return
 +        end
@@@ -24,7 -24,6 +24,7 @@@ cMS$ATTRIBUTES C ::  proc_pro
        include 'COMMON.MD'
        include 'COMMON.CONTROL'
        include 'COMMON.TIME1'
 +      include 'COMMON.SPLITELE'
  #ifdef MPI      
  c      print*,"ETOTAL Processor",fg_rank," absolute rank",myrank,
  c     & " nfgtasks",nfgtasks
  C Calculate electrostatic (H-bonding) energy of the main chain.
  C
    107 continue
+ cmc
+ cmc Sep-06: egb takes care of dynamic ss bonds too
+ cmc
+ c      if (dyn_ss) call dyn_set_nss
  c      print *,"Processor",myrank," computed USCSC"
  #ifdef TIMING
        time01=MPI_Wtime() 
@@@ -152,9 -156,9 +157,9 @@@ c      print *,"Processor",myrank," lef
              eello_turn4=0.0d0
           endif
        else
 -c        write (iout,*) "Soft-spheer ELEC potential"
 -        call eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
 -     &   eello_turn4)
 +        write (iout,*) "Soft-spheer ELEC potential"
 +c        call eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
 +c     &   eello_turn4)
        endif
  c      print *,"Processor",myrank," computed UELEC"
  C
        energia(17)=estr
        energia(20)=Uconst+Uconst_back
        energia(21)=esccor
 +c    Here are the energies showed per procesor if the are more processors 
 +c    per molecule then we sum it up in sum_energy subroutine 
  c      print *," Processor",myrank," calls SUM_ENERGY"
        call sum_energy(energia,.true.)
+       if (dyn_ss) call dyn_set_nss
  c      print *," Processor",myrank," left SUM_ENERGY"
  #ifdef TIMING
        time_sumene=time_sumene+MPI_Wtime()-time00
@@@ -436,9 -439,9 +442,9 @@@ cMS$ATTRIBUTES C ::  proc_pro
  #endif
  #ifdef MPI
        include 'mpif.h'
+ #endif
        double precision gradbufc(3,maxres),gradbufx(3,maxres),
 -     &  glocbuf(4*maxres),gradbufc_sum(3,maxres)
 +     &  glocbuf(4*maxres),gradbufc_sum(3,maxres),gloc_scbuf(3,maxres)
- #endif
        include 'COMMON.SETUP'
        include 'COMMON.IOUNITS'
        include 'COMMON.FFIELD'
        include 'COMMON.CONTROL'
        include 'COMMON.TIME1'
        include 'COMMON.MAXGRAD'
 +      include 'COMMON.SCCOR'
  #ifdef TIMING
        time01=MPI_Wtime()
  #endif
@@@ -693,6 -695,7 +699,6 @@@ c      endd
       &   +wturn3*gel_loc_turn3(i)
       &   +wturn6*gel_loc_turn6(i)
       &   +wel_loc*gel_loc_loc(i)
 -     &   +wsccor*gsccor_loc(i)
        enddo
  #ifdef DEBUG
        write (iout,*) "gloc after adding corr"
          do i=1,4*nres
            glocbuf(i)=gloc(i,icg)
          enddo
 +c#define DEBUG
 +#ifdef DEBUG
 +      write (iout,*) "gloc_sc before reduce"
 +      do i=1,nres
 +       do j=1,1
 +        write (iout,*) i,j,gloc_sc(j,i,icg)
 +       enddo
 +      enddo
 +#endif
 +c#undef DEBUG
 +        do i=1,nres
 +         do j=1,3
 +          gloc_scbuf(j,i)=gloc_sc(j,i,icg)
 +         enddo
 +        enddo
          time00=MPI_Wtime()
          call MPI_Barrier(FG_COMM,IERR)
          time_barrier_g=time_barrier_g+MPI_Wtime()-time00
          call MPI_Reduce(glocbuf(1),gloc(1,icg),4*nres,
       &    MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
          time_reduce=time_reduce+MPI_Wtime()-time00
 +        call MPI_Reduce(gloc_scbuf(1,1),gloc_sc(1,1,icg),3*nres,
 +     &    MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
 +        time_reduce=time_reduce+MPI_Wtime()-time00
 +c#define DEBUG
 +#ifdef DEBUG
 +      write (iout,*) "gloc_sc after reduce"
 +      do i=1,nres
 +       do j=1,1
 +        write (iout,*) i,j,gloc_sc(j,i,icg)
 +       enddo
 +      enddo
 +#endif
 +c#undef DEBUG
  #ifdef DEBUG
        write (iout,*) "gloc after reduce"
        do i=1,4*nres
  c      write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
        evdw=0.0D0
        do i=iatsc_s,iatsc_e
 -        itypi=itype(i)
 -        if (itypi.eq.21) cycle
 -        itypi1=itype(i+1)
 +        itypi=iabs(itype(i))
 +        if (itypi.eq.ntyp1) cycle
 +        itypi1=iabs(itype(i+1))
          xi=c(1,nres+i)
          yi=c(2,nres+i)
          zi=c(3,nres+i)
  cd        write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
  cd   &                  'iend=',iend(i,iint)
            do j=istart(i,iint),iend(i,iint)
 -            itypj=itype(j)
 -            if (itypj.eq.21) cycle
 +            itypj=iabs(itype(j)) 
 +            if (itypj.eq.ntyp1) cycle
              xj=c(1,nres+j)-xi
              yj=c(2,nres+j)-yi
              zj=c(3,nres+j)-zi
  c     print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
        evdw=0.0D0
        do i=iatsc_s,iatsc_e
 -        itypi=itype(i)
 -        if (itypi.eq.21) cycle
 -        itypi1=itype(i+1)
 +        itypi=iabs(itype(i))
 +        if (itypi.eq.ntyp1) cycle
 +        itypi1=iabs(itype(i+1))
          xi=c(1,nres+i)
          yi=c(2,nres+i)
          zi=c(3,nres+i)
@@@ -1220,8 -1195,8 +1226,8 @@@ C Calculate SC interaction energy
  C
          do iint=1,nint_gr(i)
            do j=istart(i,iint),iend(i,iint)
 -            itypj=itype(j)
 -            if (itypj.eq.21) cycle
 +            itypj=iabs(itype(j))
 +            if (itypj.eq.ntyp1) cycle
              xj=c(1,nres+j)-xi
              yj=c(2,nres+j)-yi
              zj=c(3,nres+j)-zi
@@@ -1302,9 -1277,9 +1308,9 @@@ c     els
  c     endif
        ind=0
        do i=iatsc_s,iatsc_e
 -        itypi=itype(i)
 -        if (itypi.eq.21) cycle
 -        itypi1=itype(i+1)
 +        itypi=iabs(itype(i))
 +        if (itypi.eq.ntyp1) cycle
 +        itypi1=iabs(itype(i+1))
          xi=c(1,nres+i)
          yi=c(2,nres+i)
          zi=c(3,nres+i)
          do iint=1,nint_gr(i)
            do j=istart(i,iint),iend(i,iint)
              ind=ind+1
 -            itypj=itype(j)
 -            if (itypj.eq.21) cycle
 +            itypj=iabs(itype(j))
 +            if (itypj.eq.ntyp1) cycle
  c            dscj_inv=dsc_inv(itypj)
              dscj_inv=vbld_inv(j+nres)
              chi1=chi(itypi,itypj)
        include 'COMMON.IOUNITS'
        include 'COMMON.CALC'
        include 'COMMON.CONTROL'
 +      include 'COMMON.SPLITELE'
+       include 'COMMON.SBRIDGE'
        logical lprn
 +      integer xshift,yshift,zshift
        evdw=0.0D0
  ccccc      energy_dec=.false.
  c     print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
        lprn=.false.
  c     if (icall.eq.0) lprn=.false.
        ind=0
 +C the loop over all 27 posible neigbours (for xshift=0,yshift=0,zshift=0
 +C we have the original box)
 +C      do xshift=-1,1
 +C      do yshift=-1,1
 +C      do zshift=-1,1
        do i=iatsc_s,iatsc_e
 -        itypi=itype(i)
 -        if (itypi.eq.21) cycle
 -        itypi1=itype(i+1)
 +        itypi=iabs(itype(i))
 +        if (itypi.eq.ntyp1) cycle
 +        itypi1=iabs(itype(i+1))
          xi=c(1,nres+i)
          yi=c(2,nres+i)
          zi=c(3,nres+i)
 +C Return atom into box, boxxsize is size of box in x dimension
 +c  134   continue
 +c        if (xi.gt.((xshift+0.5d0)*boxxsize)) xi=xi-boxxsize
 +c        if (xi.lt.((xshift-0.5d0)*boxxsize)) xi=xi+boxxsize
 +C Condition for being inside the proper box
 +c        if ((xi.gt.((xshift+0.5d0)*boxxsize)).or.
 +c     &       (xi.lt.((xshift-0.5d0)*boxxsize))) then
 +c        go to 134
 +c        endif
 +c  135   continue
 +c        if (yi.gt.((yshift+0.5d0)*boxysize)) yi=yi-boxysize
 +c        if (yi.lt.((yshift-0.5d0)*boxysize)) yi=yi+boxysize
 +C Condition for being inside the proper box
 +c        if ((yi.gt.((yshift+0.5d0)*boxysize)).or.
 +c     &       (yi.lt.((yshift-0.5d0)*boxysize))) then
 +c        go to 135
 +c        endif
 +c  136   continue
 +c        if (zi.gt.((zshift+0.5d0)*boxzsize)) zi=zi-boxzsize
 +c        if (zi.lt.((zshift-0.5d0)*boxzsize)) zi=zi+boxzsize
 +C Condition for being inside the proper box
 +c        if ((zi.gt.((zshift+0.5d0)*boxzsize)).or.
 +c     &       (zi.lt.((zshift-0.5d0)*boxzsize))) then
 +c        go to 136
 +c        endif
 +          xi=mod(xi,boxxsize)
 +          if (xi.lt.0) xi=xi+boxxsize
 +          yi=mod(yi,boxysize)
 +          if (yi.lt.0) yi=yi+boxysize
 +          zi=mod(zi,boxzsize)
 +          if (zi.lt.0) zi=zi+boxzsize
 +C          xi=xi+xshift*boxxsize
 +C          yi=yi+yshift*boxysize
 +C          zi=zi+zshift*boxzsize
 +
          dxi=dc_norm(1,nres+i)
          dyi=dc_norm(2,nres+i)
          dzi=dc_norm(3,nres+i)
@@@ -1482,9 -1416,15 +1489,15 @@@ C Calculate SC interaction energy
  C
          do iint=1,nint_gr(i)
            do j=istart(i,iint),iend(i,iint)
+             IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
+               call dyn_ssbond_ene(i,j,evdwij)
+               evdw=evdw+evdwij
+               if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') 
+      &                        'evdw',i,j,evdwij,' ss'
+             ELSE
              ind=ind+1
 -            itypj=itype(j)
 -            if (itypj.eq.21) cycle
 +            itypj=iabs(itype(j))
 +            if (itypj.eq.ntyp1) cycle
  c            dscj_inv=dsc_inv(itypj)
              dscj_inv=vbld_inv(j+nres)
  c            write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,
@@@ -1510,88 -1450,17 +1523,88 @@@ c           chip12=0.0D
  c           alf1=0.0D0
  c           alf2=0.0D0
  c           alf12=0.0D0
 -            xj=c(1,nres+j)-xi
 -            yj=c(2,nres+j)-yi
 -            zj=c(3,nres+j)-zi
 +            xj=c(1,nres+j)
 +            yj=c(2,nres+j)
 +            zj=c(3,nres+j)
 +C Return atom J into box the original box
 +c  137   continue
 +c        if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize
 +c        if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize
 +C Condition for being inside the proper box
 +c        if ((xj.gt.((0.5d0)*boxxsize)).or.
 +c     &       (xj.lt.((-0.5d0)*boxxsize))) then
 +c        go to 137
 +c        endif
 +c  138   continue
 +c        if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize
 +c        if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize
 +C Condition for being inside the proper box
 +c        if ((yj.gt.((0.5d0)*boxysize)).or.
 +c     &       (yj.lt.((-0.5d0)*boxysize))) then
 +c        go to 138
 +c        endif
 +c  139   continue
 +c        if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize
 +c        if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize
 +C Condition for being inside the proper box
 +c        if ((zj.gt.((0.5d0)*boxzsize)).or.
 +c     &       (zj.lt.((-0.5d0)*boxzsize))) then
 +c        go to 139
 +c        endif
 +          xj=mod(xj,boxxsize)
 +          if (xj.lt.0) xj=xj+boxxsize
 +          yj=mod(yj,boxysize)
 +          if (yj.lt.0) yj=yj+boxysize
 +          zj=mod(zj,boxzsize)
 +          if (zj.lt.0) zj=zj+boxzsize
 +      dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
 +      xj_safe=xj
 +      yj_safe=yj
 +      zj_safe=zj
 +      subchap=0
 +      do xshift=-1,1
 +      do yshift=-1,1
 +      do zshift=-1,1
 +          xj=xj_safe+xshift*boxxsize
 +          yj=yj_safe+yshift*boxysize
 +          zj=zj_safe+zshift*boxzsize
 +          dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
 +          if(dist_temp.lt.dist_init) then
 +            dist_init=dist_temp
 +            xj_temp=xj
 +            yj_temp=yj
 +            zj_temp=zj
 +            subchap=1
 +          endif
 +       enddo
 +       enddo
 +       enddo
 +       if (subchap.eq.1) then
 +          xj=xj_temp-xi
 +          yj=yj_temp-yi
 +          zj=zj_temp-zi
 +       else
 +          xj=xj_safe-xi
 +          yj=yj_safe-yi
 +          zj=zj_safe-zi
 +       endif
              dxj=dc_norm(1,nres+j)
              dyj=dc_norm(2,nres+j)
              dzj=dc_norm(3,nres+j)
 +C            xj=xj-xi
 +C            yj=yj-yi
 +C            zj=zj-zi
  c            write (iout,*) "dcnorj",dxi*dxi+dyi*dyi+dzi*dzi
  c            write (iout,*) "j",j," dc_norm",
  c     &       dc_norm(1,nres+j),dc_norm(2,nres+j),dc_norm(3,nres+j)
              rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
              rij=dsqrt(rrij)
 +            sss=sscale((1.0d0/rij)/sigma(itypi,itypj))
 +            sssgrad=sscagrad((1.0d0/rij)/sigma(itypi,itypj))
 +             
 +c            write (iout,'(a7,4f8.3)') 
 +c    &      "ssscale",sss,((1.0d0/rij)/sigma(itypi,itypj)),r_cut,rlamb
 +            if (sss.gt.0.0d0) then
  C Calculate angle-dependent terms of energy and contributions to their
  C derivatives.
              call sc_angular
@@@ -1620,7 -1489,7 +1633,7 @@@ c--------------------------------------
  c            write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
  c     &        " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
              evdwij=evdwij*eps2rt*eps3rt
 -            evdw=evdw+evdwij
 +            evdw=evdw+evdwij*sss
              if (lprn) then
              sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
              epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
@@@ -1640,9 -1509,6 +1653,9 @@@ C Calculate gradient components
              fac=-expon*(e1+evdwij)*rij_shift
              sigder=fac*sigder
              fac=rij*fac
 +c            print '(2i4,6f8.4)',i,j,sss,sssgrad*
 +c     &      evdwij,fac,sigma(itypi,itypj),expon
 +            fac=fac+evdwij/sss*sssgrad/sigma(itypi,itypj)*rij
  c            fac=0.0d0
  C Calculate the radial part of the gradient
              gg(1)=xj*fac
              gg(3)=zj*fac
  C Calculate angular part of the gradient.
              call sc_grad
-             endif
+             ENDIF    ! dyn_ss            
            enddo      ! j
          enddo        ! iint
        enddo          ! i
 +C      enddo          ! zshift
 +C      enddo          ! yshift
 +C      enddo          ! xshift
  c      write (iout,*) "Number of loop steps in EGB:",ind
  cccc      energy_dec=.false.
        return
@@@ -1687,9 -1550,9 +1700,9 @@@ c     print *,'Entering EGB nnt=',nnt,
  c     if (icall.eq.0) lprn=.true.
        ind=0
        do i=iatsc_s,iatsc_e
 -        itypi=itype(i)
 -        if (itypi.eq.21) cycle
 -        itypi1=itype(i+1)
 +        itypi=iabs(itype(i))
 +        if (itypi.eq.ntyp1) cycle
 +        itypi1=iabs(itype(i+1))
          xi=c(1,nres+i)
          yi=c(2,nres+i)
          zi=c(3,nres+i)
          do iint=1,nint_gr(i)
            do j=istart(i,iint),iend(i,iint)
              ind=ind+1
 -            itypj=itype(j)
 -            if (itypj.eq.21) cycle
 +            itypj=iabs(itype(j))
 +            if (itypj.eq.ntyp1) cycle
  c            dscj_inv=dsc_inv(itypj)
              dscj_inv=vbld_inv(j+nres)
              sig0ij=sigma(itypi,itypj)
@@@ -1864,7 -1727,6 +1877,7 @@@ C--------------------------------------
        include 'COMMON.CALC'
        include 'COMMON.IOUNITS'
        double precision dcosom1(3),dcosom2(3)
 +cc      print *,'sss=',sss
        eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
        eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
        eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
@@@ -1883,16 -1745,16 +1896,16 @@@ c      write (iout,*) "eom1",eom1," eom
          dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
        enddo
        do k=1,3
 -        gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
 +        gg(k)=(gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k))*sss
        enddo 
  c      write (iout,*) "gg",(gg(k),k=1,3)
        do k=1,3
          gvdwx(k,i)=gvdwx(k,i)-gg(k)
       &            +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
 -     &            +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
 +     &            +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv*sss
          gvdwx(k,j)=gvdwx(k,j)+gg(k)
       &            +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
 -     &            +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
 +     &            +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv*sss
  c        write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
  c     &            +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
  c        write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
  cd    print *,'Entering Esoft_sphere nnt=',nnt,' nct=',nct
        evdw=0.0D0
        do i=iatsc_s,iatsc_e
 -        itypi=itype(i)
 -        if (itypi.eq.21) cycle
 -        itypi1=itype(i+1)
 +        itypi=iabs(itype(i))
 +        if (itypi.eq.ntyp1) cycle
 +        itypi1=iabs(itype(i+1))
          xi=c(1,nres+i)
          yi=c(2,nres+i)
          zi=c(3,nres+i)
  cd        write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
  cd   &                  'iend=',iend(i,iint)
            do j=istart(i,iint),iend(i,iint)
 -            itypj=itype(j)
 -            if (itypj.eq.21) cycle
 +            itypj=iabs(itype(j))
 +            if (itypj.eq.ntyp1) cycle
              xj=c(1,nres+j)-xi
              yj=c(2,nres+j)-yi
              zj=c(3,nres+j)-zi
        include 'COMMON.VECTORS'
        include 'COMMON.FFIELD'
        dimension ggg(3)
 -cd      write(iout,*) 'In EELEC_soft_sphere'
 +C      write(iout,*) 'In EELEC_soft_sphere'
        ees=0.0D0
        evdw1=0.0D0
        eel_loc=0.0d0 
        eello_turn4=0.0d0
        ind=0
        do i=iatel_s,iatel_e
 -        if (itype(i).eq.21 .or. itype(i+1).eq.21) cycle
 +        if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
          dxi=dc(1,i)
          dyi=dc(2,i)
          dzi=dc(3,i)
          xmedi=c(1,i)+0.5d0*dxi
          ymedi=c(2,i)+0.5d0*dyi
          zmedi=c(3,i)+0.5d0*dzi
 +          xmedi=mod(xmedi,boxxsize)
 +          if (xmedi.lt.0) xmedi=xmedi+boxxsize
 +          ymedi=mod(ymedi,boxysize)
 +          if (ymedi.lt.0) ymedi=ymedi+boxysize
 +          zmedi=mod(zmedi,boxzsize)
 +          if (zmedi.lt.0) zmedi=zmedi+boxzsize
          num_conti=0
  c        write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
          do j=ielstart(i),ielend(i)
 -          if (itype(j).eq.21 .or. itype(j+1).eq.21) cycle
 +          if (itype(j).eq.ntyp1 .or. itype(j+1).eq.ntyp1) cycle
            ind=ind+1
            iteli=itel(i)
            itelj=itel(j)
            dxj=dc(1,j)
            dyj=dc(2,j)
            dzj=dc(3,j)
 -          xj=c(1,j)+0.5D0*dxj-xmedi
 -          yj=c(2,j)+0.5D0*dyj-ymedi
 -          zj=c(3,j)+0.5D0*dzj-zmedi
 +          xj=c(1,j)+0.5D0*dxj
 +          yj=c(2,j)+0.5D0*dyj
 +          zj=c(3,j)+0.5D0*dzj
 +          xj=mod(xj,boxxsize)
 +          if (xj.lt.0) xj=xj+boxxsize
 +          yj=mod(yj,boxysize)
 +          if (yj.lt.0) yj=yj+boxysize
 +          zj=mod(zj,boxzsize)
 +          if (zj.lt.0) zj=zj+boxzsize
 +      dist_init=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
 +      xj_safe=xj
 +      yj_safe=yj
 +      zj_safe=zj
 +      isubchap=0
 +      do xshift=-1,1
 +      do yshift=-1,1
 +      do zshift=-1,1
 +          xj=xj_safe+xshift*boxxsize
 +          yj=yj_safe+yshift*boxysize
 +          zj=zj_safe+zshift*boxzsize
 +          dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
 +          if(dist_temp.lt.dist_init) then
 +            dist_init=dist_temp
 +            xj_temp=xj
 +            yj_temp=yj
 +            zj_temp=zj
 +            isubchap=1
 +          endif
 +       enddo
 +       enddo
 +       enddo
 +       if (isubchap.eq.1) then
 +          xj=xj_temp-xmedi
 +          yj=yj_temp-ymedi
 +          zj=zj_temp-zmedi
 +       else
 +          xj=xj_safe-xmedi
 +          yj=yj_safe-ymedi
 +          zj=zj_safe-zmedi
 +       endif
            rij=xj*xj+yj*yj+zj*zj
 +            sss=sscale(sqrt(rij))
 +            sssgrad=sscagrad(sqrt(rij))
            if (rij.lt.r0ijsq) then
              evdw1ij=0.25d0*(rij-r0ijsq)**2
              fac=rij-r0ijsq
              evdw1ij=0.0d0
              fac=0.0d0
            endif
 -          evdw1=evdw1+evdw1ij
 +          evdw1=evdw1+evdw1ij*sss
  C
  C Calculate contributions to the Cartesian gradient.
  C
 -          ggg(1)=fac*xj
 -          ggg(2)=fac*yj
 -          ggg(3)=fac*zj
 +          ggg(1)=fac*xj*sssgrad
 +          ggg(2)=fac*yj*sssgrad
 +          ggg(3)=fac*zj*sssgrad
            do k=1,3
              gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
              gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
@@@ -2494,13 -2311,13 +2507,13 @@@ c        if (i.gt. iatel_s+2 .and. i.lt
          if (i.gt. nnt+2 .and. i.lt.nct+2) then
            iti = itortyp(itype(i-2))
          else
 -          iti=ntortyp+1
 +          iti=ntortyp
          endif
  c        if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
          if (i.gt. nnt+1 .and. i.lt.nct+1) then
            iti1 = itortyp(itype(i-1))
          else
 -          iti1=ntortyp+1
 +          iti1=ntortyp
          endif
  cd        write (iout,*) '*******i',i,' iti1',iti
  cd        write (iout,*) 'b1',b1(:,iti)
@@@ -2538,13 -2355,9 +2551,13 @@@ c        if (i .gt. iatel_s+2) the
          enddo
  c        if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
          if (i.gt. nnt+1 .and. i.lt.nct+1) then
 -          iti1 = itortyp(itype(i-1))
 +          if (itype(i-1).le.ntyp) then
 +            iti1 = itortyp(itype(i-1))
 +          else
 +            iti1=ntortyp
 +          endif
          else
 -          iti1=ntortyp+1
 +          iti1=ntortyp
          endif
          do k=1,2
            mu(k,i-2)=Ub2(k,i-2)+b1(k,iti1)
        include 'COMMON.VECTORS'
        include 'COMMON.FFIELD'
        include 'COMMON.TIME1'
 +      include 'COMMON.SPLITELE'
        dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
       &          erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
        double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
@@@ -2956,14 -2768,9 +2969,14 @@@ c 9/27/08 AL Split the interaction loo
  C
  C Loop over i,i+2 and i,i+3 pairs of the peptide groups
  C
 +C 14/01/2014 TURN3,TUNR4 does no go under periodic boundry condition
        do i=iturn3_start,iturn3_end
 -        if (itype(i).eq.21 .or. itype(i+1).eq.21 
 -     &  .or. itype(i+2).eq.21 .or. itype(i+3).eq.21) cycle
 +        if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
 +     &  .or. itype(i+2).eq.ntyp1
 +     &  .or. itype(i+3).eq.ntyp1
 +     &  .or. itype(i-1).eq.ntyp1
 +     &  .or. itype(i+4).eq.ntyp1
 +     &  ) cycle
          dxi=dc(1,i)
          dyi=dc(2,i)
          dzi=dc(3,i)
          xmedi=c(1,i)+0.5d0*dxi
          ymedi=c(2,i)+0.5d0*dyi
          zmedi=c(3,i)+0.5d0*dzi
 +          xmedi=mod(xmedi,boxxsize)
 +          if (xmedi.lt.0) xmedi=xmedi+boxxsize
 +          ymedi=mod(ymedi,boxysize)
 +          if (ymedi.lt.0) ymedi=ymedi+boxysize
 +          zmedi=mod(zmedi,boxzsize)
 +          if (zmedi.lt.0) zmedi=zmedi+boxzsize
          num_conti=0
          call eelecij(i,i+2,ees,evdw1,eel_loc)
          if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
          num_cont_hb(i)=num_conti
        enddo
        do i=iturn4_start,iturn4_end
 -        if (itype(i).eq.21 .or. itype(i+1).eq.21
 -     &    .or. itype(i+3).eq.21
 -     &    .or. itype(i+4).eq.21) cycle
 +        if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
 +     &    .or. itype(i+3).eq.ntyp1
 +     &    .or. itype(i+4).eq.ntyp1
 +     &    .or. itype(i+5).eq.ntyp1
 +     &    .or. itype(i).eq.ntyp1
 +     &    .or. itype(i-1).eq.ntyp1
 +     &                             ) cycle
          dxi=dc(1,i)
          dyi=dc(2,i)
          dzi=dc(3,i)
          xmedi=c(1,i)+0.5d0*dxi
          ymedi=c(2,i)+0.5d0*dyi
          zmedi=c(3,i)+0.5d0*dzi
 +C Return atom into box, boxxsize is size of box in x dimension
 +c  194   continue
 +c        if (xmedi.gt.((0.5d0)*boxxsize)) xmedi=xmedi-boxxsize
 +c        if (xmedi.lt.((-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize
 +C Condition for being inside the proper box
 +c        if ((xmedi.gt.((0.5d0)*boxxsize)).or.
 +c     &       (xmedi.lt.((-0.5d0)*boxxsize))) then
 +c        go to 194
 +c        endif
 +c  195   continue
 +c        if (ymedi.gt.((0.5d0)*boxysize)) ymedi=ymedi-boxysize
 +c        if (ymedi.lt.((-0.5d0)*boxysize)) ymedi=ymedi+boxysize
 +C Condition for being inside the proper box
 +c        if ((ymedi.gt.((0.5d0)*boxysize)).or.
 +c     &       (ymedi.lt.((-0.5d0)*boxysize))) then
 +c        go to 195
 +c        endif
 +c  196   continue
 +c        if (zmedi.gt.((0.5d0)*boxzsize)) zmedi=zmedi-boxzsize
 +c        if (zmedi.lt.((-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize
 +C Condition for being inside the proper box
 +c        if ((zmedi.gt.((0.5d0)*boxzsize)).or.
 +c     &       (zmedi.lt.((-0.5d0)*boxzsize))) then
 +c        go to 196
 +c        endif
 +          xmedi=mod(xmedi,boxxsize)
 +          if (xmedi.lt.0) xmedi=xmedi+boxxsize
 +          ymedi=mod(ymedi,boxysize)
 +          if (ymedi.lt.0) ymedi=ymedi+boxysize
 +          zmedi=mod(zmedi,boxzsize)
 +          if (zmedi.lt.0) zmedi=zmedi+boxzsize
 +
          num_conti=num_cont_hb(i)
          call eelecij(i,i+3,ees,evdw1,eel_loc)
 -        if (wturn4.gt.0.0d0 .and. itype(i+2).ne.21) 
 +        if (wturn4.gt.0.0d0 .and. itype(i+2).ne.ntyp1) 
       &   call eturn4(i,eello_turn4)
          num_cont_hb(i)=num_conti
        enddo   ! i
 +C Loop over all neighbouring boxes
 +C      do xshift=-1,1
 +C      do yshift=-1,1
 +C      do zshift=-1,1
  c
  c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
  c
        do i=iatel_s,iatel_e
 -        if (itype(i).eq.21 .or. itype(i+1).eq.21) cycle
 +        if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
 +     &  .or. itype(i+2).eq.ntyp1
 +     &  .or. itype(i-1).eq.ntyp1
 +     &                ) cycle
          dxi=dc(1,i)
          dyi=dc(2,i)
          dzi=dc(3,i)
          xmedi=c(1,i)+0.5d0*dxi
          ymedi=c(2,i)+0.5d0*dyi
          zmedi=c(3,i)+0.5d0*dzi
 +          xmedi=mod(xmedi,boxxsize)
 +          if (xmedi.lt.0) xmedi=xmedi+boxxsize
 +          ymedi=mod(ymedi,boxysize)
 +          if (ymedi.lt.0) ymedi=ymedi+boxysize
 +          zmedi=mod(zmedi,boxzsize)
 +          if (zmedi.lt.0) zmedi=zmedi+boxzsize
 +C          xmedi=xmedi+xshift*boxxsize
 +C          ymedi=ymedi+yshift*boxysize
 +C          zmedi=zmedi+zshift*boxzsize
 +
 +C Return tom into box, boxxsize is size of box in x dimension
 +c  164   continue
 +c        if (xmedi.gt.((xshift+0.5d0)*boxxsize)) xmedi=xmedi-boxxsize
 +c        if (xmedi.lt.((xshift-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize
 +C Condition for being inside the proper box
 +c        if ((xmedi.gt.((xshift+0.5d0)*boxxsize)).or.
 +c     &       (xmedi.lt.((xshift-0.5d0)*boxxsize))) then
 +c        go to 164
 +c        endif
 +c  165   continue
 +c        if (ymedi.gt.((yshift+0.5d0)*boxysize)) ymedi=ymedi-boxysize
 +c        if (ymedi.lt.((yshift-0.5d0)*boxysize)) ymedi=ymedi+boxysize
 +C Condition for being inside the proper box
 +c        if ((ymedi.gt.((yshift+0.5d0)*boxysize)).or.
 +c     &       (ymedi.lt.((yshift-0.5d0)*boxysize))) then
 +c        go to 165
 +c        endif
 +c  166   continue
 +c        if (zmedi.gt.((zshift+0.5d0)*boxzsize)) zmedi=zmedi-boxzsize
 +c        if (zmedi.lt.((zshift-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize
 +cC Condition for being inside the proper box
 +c        if ((zmedi.gt.((zshift+0.5d0)*boxzsize)).or.
 +c     &       (zmedi.lt.((zshift-0.5d0)*boxzsize))) then
 +c        go to 166
 +c        endif
 +
  c        write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
          num_conti=num_cont_hb(i)
          do j=ielstart(i),ielend(i)
  c          write (iout,*) i,j,itype(i),itype(j)
 -          if (itype(j).eq.21 .or. itype(j+1).eq.21) cycle
 +          if (itype(j).eq.ntyp1.or. itype(j+1).eq.ntyp1
 +     & .or.itype(j+2).eq.ntyp1
 +     & .or.itype(j-1).eq.ntyp1
 +     &) cycle
            call eelecij(i,j,ees,evdw1,eel_loc)
          enddo ! j
          num_cont_hb(i)=num_conti
        enddo   ! i
 +C     enddo   ! zshift
 +C      enddo   ! yshift
 +C      enddo   ! xshift
 +
  c      write (iout,*) "Number of loop steps in EELEC:",ind
  cd      do i=1,nres
  cd        write (iout,'(i3,3f10.5,5x,3f10.5)') 
@@@ -3142,7 -2857,6 +3155,7 @@@ C--------------------------------------
        include 'COMMON.VECTORS'
        include 'COMMON.FFIELD'
        include 'COMMON.TIME1'
 +      include 'COMMON.SPLITELE'
        dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
       &          erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
        double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
@@@ -3177,84 -2891,10 +3190,84 @@@ c          ind=ind+
            dx_normj=dc_norm(1,j)
            dy_normj=dc_norm(2,j)
            dz_normj=dc_norm(3,j)
 -          xj=c(1,j)+0.5D0*dxj-xmedi
 -          yj=c(2,j)+0.5D0*dyj-ymedi
 -          zj=c(3,j)+0.5D0*dzj-zmedi
 +C          xj=c(1,j)+0.5D0*dxj-xmedi
 +C          yj=c(2,j)+0.5D0*dyj-ymedi
 +C          zj=c(3,j)+0.5D0*dzj-zmedi
 +          xj=c(1,j)+0.5D0*dxj
 +          yj=c(2,j)+0.5D0*dyj
 +          zj=c(3,j)+0.5D0*dzj
 +          xj=mod(xj,boxxsize)
 +          if (xj.lt.0) xj=xj+boxxsize
 +          yj=mod(yj,boxysize)
 +          if (yj.lt.0) yj=yj+boxysize
 +          zj=mod(zj,boxzsize)
 +          if (zj.lt.0) zj=zj+boxzsize
 +          if ((zj.lt.0).or.(xj.lt.0).or.(yj.lt.0)) write (*,*) "CHUJ"
 +      dist_init=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
 +      xj_safe=xj
 +      yj_safe=yj
 +      zj_safe=zj
 +      isubchap=0
 +      do xshift=-1,1
 +      do yshift=-1,1
 +      do zshift=-1,1
 +          xj=xj_safe+xshift*boxxsize
 +          yj=yj_safe+yshift*boxysize
 +          zj=zj_safe+zshift*boxzsize
 +          dist_temp=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
 +          if(dist_temp.lt.dist_init) then
 +            dist_init=dist_temp
 +            xj_temp=xj
 +            yj_temp=yj
 +            zj_temp=zj
 +            isubchap=1
 +          endif
 +       enddo
 +       enddo
 +       enddo
 +       if (isubchap.eq.1) then
 +          xj=xj_temp-xmedi
 +          yj=yj_temp-ymedi
 +          zj=zj_temp-zmedi
 +       else
 +          xj=xj_safe-xmedi
 +          yj=yj_safe-ymedi
 +          zj=zj_safe-zmedi
 +       endif
 +C        if ((i+3).lt.j) then !this condition keeps for turn3 and turn4 not subject to PBC
 +c  174   continue
 +c        if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize
 +c        if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize
 +C Condition for being inside the proper box
 +c        if ((xj.gt.((0.5d0)*boxxsize)).or.
 +c     &       (xj.lt.((-0.5d0)*boxxsize))) then
 +c        go to 174
 +c        endif
 +c  175   continue
 +c        if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize
 +c        if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize
 +C Condition for being inside the proper box
 +c        if ((yj.gt.((0.5d0)*boxysize)).or.
 +c     &       (yj.lt.((-0.5d0)*boxysize))) then
 +c        go to 175
 +c        endif
 +c  176   continue
 +c        if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize
 +c        if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize
 +C Condition for being inside the proper box
 +c        if ((zj.gt.((0.5d0)*boxzsize)).or.
 +c     &       (zj.lt.((-0.5d0)*boxzsize))) then
 +c        go to 176
 +c        endif
 +C        endif !endPBC condintion
 +C        xj=xj-xmedi
 +C        yj=yj-ymedi
 +C        zj=zj-zmedi
            rij=xj*xj+yj*yj+zj*zj
 +
 +            sss=sscale(sqrt(rij))
 +            sssgrad=sscagrad(sqrt(rij))
 +c            if (sss.gt.0.0d0) then  
            rrmij=1.0D0/rij
            rij=dsqrt(rij)
            rmij=1.0D0/rij
@@@ -3270,24 -2910,21 +3283,24 @@@ c 4/26/02 - AL scaling down 1,4 repulsi
            ev2=bbb*r6ij
            fac3=ael6i*r6ij
            fac4=ael3i*r3ij
 -          evdwij=ev1+ev2
 +          evdwij=(ev1+ev2)
            el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
            el2=fac4*fac       
 -          eesij=el1+el2
 +C MARYSIA
 +          eesij=(el1+el2)
  C 12/26/95 - for the evaluation of multi-body H-bonding interactions
            ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
            ees=ees+eesij
 -          evdw1=evdw1+evdwij
 +          evdw1=evdw1+evdwij*sss
  cd          write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
  cd     &      iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
  cd     &      1.0D0/dsqrt(rrmij),evdwij,eesij,
  cd     &      xmedi,ymedi,zmedi,xj,yj,zj
  
            if (energy_dec) then 
 -              write (iout,'(a6,2i5,0pf7.3)') 'evdw1',i,j,evdwij
 +              write (iout,'(a6,2i5,0pf7.3,2i5,2e11.3)') 
 +     &'evdw1',i,j,evdwij
 +     &,iteli,itelj,aaa,evdw1
                write (iout,'(a6,2i5,0pf7.3)') 'ees',i,j,eesij
            endif
  
  C Calculate contributions to the Cartesian gradient.
  C
  #ifdef SPLITELE
 -          facvdw=-6*rrmij*(ev1+evdwij)
 +          facvdw=-6*rrmij*(ev1+evdwij)*sss
            facel=-3*rrmij*(el1+eesij)
            fac1=fac
            erij(1)=xj*rmij
@@@ -3325,15 -2962,9 +3338,15 @@@ cgrad            do l=1,
  cgrad              gelc(l,k)=gelc(l,k)+ggg(l)
  cgrad            enddo
  cgrad          enddo
 -          ggg(1)=facvdw*xj
 -          ggg(2)=facvdw*yj
 -          ggg(3)=facvdw*zj
 +          if (sss.gt.0.0) then
 +          ggg(1)=facvdw*xj+sssgrad*rmij*evdwij*xj
 +          ggg(2)=facvdw*yj+sssgrad*rmij*evdwij*yj
 +          ggg(3)=facvdw*zj+sssgrad*rmij*evdwij*zj
 +          else
 +          ggg(1)=0.0
 +          ggg(2)=0.0
 +          ggg(3)=0.0
 +          endif
  c          do k=1,3
  c            ghalf=0.5D0*ggg(k)
  c            gvdwpp(k,i)=gvdwpp(k,i)+ghalf
@@@ -3353,9 -2984,8 +3366,9 @@@ cgrad              gvdwpp(l,k)=gvdwpp(l
  cgrad            enddo
  cgrad          enddo
  #else
 -          facvdw=ev1+evdwij 
 -          facel=el1+eesij  
 +C MARYSIA
 +          facvdw=(ev1+evdwij)*sss
 +          facel=(el1+eesij)
            fac1=fac
            fac=-3*rrmij*(facvdw+facvdw+facel)
            erij(1)=xj*rmij
@@@ -3386,9 -3016,9 +3399,9 @@@ cgrad              gelc(l,k)=gelc(l,k)+
  cgrad            enddo
  cgrad          enddo
  c 9/28/08 AL Gradient compotents will be summed only at the end
 -          ggg(1)=facvdw*xj
 -          ggg(2)=facvdw*yj
 -          ggg(3)=facvdw*zj
 +          ggg(1)=facvdw*xj+sssgrad*rmij*evdwij*xj
 +          ggg(2)=facvdw*yj+sssgrad*rmij*evdwij*yj
 +          ggg(3)=facvdw*zj+sssgrad*rmij*evdwij*zj
            do k=1,3
              gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
              gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
@@@ -3427,16 -3057,14 +3440,16 @@@ cgrad            endd
  cgrad          enddo
            do k=1,3
              gelc(k,i)=gelc(k,i)
 -     &               +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
 -     &               + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
 +     &           +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
 +     &           + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
              gelc(k,j)=gelc(k,j)
 -     &               +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
 -     &               + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
 +     &           +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
 +     &           + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
              gelc_long(k,j)=gelc_long(k,j)+ggg(k)
              gelc_long(k,i)=gelc_long(k,i)-ggg(k)
            enddo
 +C MARYSIA
 +c          endif !sscale
            IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
       &        .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 
       &        .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
@@@ -3624,14 -3252,10 +3637,14 @@@ cgrad            endi
  C Contribution to the local-electrostatic energy coming from the i-j pair
            eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
       &     +a33*muij(4)
 -cd          write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
 +c          write (iout,*) 'i',i,' j',j,itype(i),itype(j),
 +c     &                     ' eel_loc_ij',eel_loc_ij
  
            if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
       &            'eelloc',i,j,eel_loc_ij
 +c           if (eel_loc_ij.ne.0)
 +c     &      write (iout,'(a4,2i4,8f9.5)')'chuj',
 +c     &     i,j,a22,muij(1),a23,muij(2),a32,muij(3),a33,muij(4)
  
            eel_loc=eel_loc+eel_loc_ij
  C Partial derivatives in virtual-bond dihedral angles gamma
@@@ -3659,14 -3283,14 +3672,14 @@@ cgrad            endd
  cgrad          enddo
  C Remaining derivatives of eello
            do l=1,3
 -            gel_loc(l,i)=gel_loc(l,i)+aggi(l,1)*muij(1)+
 -     &          aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4)
 -            gel_loc(l,i+1)=gel_loc(l,i+1)+aggi1(l,1)*muij(1)+
 -     &          aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4)
 -            gel_loc(l,j)=gel_loc(l,j)+aggj(l,1)*muij(1)+
 -     &          aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4)
 -            gel_loc(l,j1)=gel_loc(l,j1)+aggj1(l,1)*muij(1)+
 -     &          aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4)
 +            gel_loc(l,i)=gel_loc(l,i)+(aggi(l,1)*muij(1)+
 +     &        aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4))
 +            gel_loc(l,i+1)=gel_loc(l,i+1)+(aggi1(l,1)*muij(1)+
 +     &     aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4))
 +            gel_loc(l,j)=gel_loc(l,j)+(aggj(l,1)*muij(1)+
 +     &       aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4))
 +            gel_loc(l,j1)=gel_loc(l,j1)+(aggj1(l,1)*muij(1)+
 +     &     aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4))
            enddo
            ENDIF
  C Change 12/26/95 to calculate four-body contributions to H-bonding energy
@@@ -4020,9 -3644,8 +4033,9 @@@ c        write(iout,*) "iti1",iti1," it
          call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
          s3=0.5d0*(pizda(1,1)+pizda(2,2))
          eello_turn4=eello_turn4-(s1+s2+s3)
 -        if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
 -     &      'eturn4',i,j,-(s1+s2+s3)
 +c             write(iout,*)'chujOWO', auxvec(1),b1(1,iti2)
 +        if (energy_dec) write (iout,'(a6,2i5,0pf7.3,3f7.3)')
 +     &      'eturn4',i,j,-(s1+s2+s3),s1,s2,s3
  cd        write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
  cd     &    ' eello_turn4_num',8*eello_turn4_num
  C Derivatives in gamma(i)
        r0_scp=4.5d0
  cd    print '(a)','Enter ESCP'
  cd    write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
 +C      do xshift=-1,1
 +C      do yshift=-1,1
 +C      do zshift=-1,1
        do i=iatscp_s,iatscp_e
 -        if (itype(i).eq.21 .or. itype(i+1).eq.21) cycle
 +        if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
          iteli=itel(i)
          xi=0.5D0*(c(1,i)+c(1,i+1))
          yi=0.5D0*(c(2,i)+c(2,i+1))
          zi=0.5D0*(c(3,i)+c(3,i+1))
 -
 +C Return atom into box, boxxsize is size of box in x dimension
 +c  134   continue
 +c        if (xi.gt.((xshift+0.5d0)*boxxsize)) xi=xi-boxxsize
 +c        if (xi.lt.((xshift-0.5d0)*boxxsize)) xi=xi+boxxsize
 +C Condition for being inside the proper box
 +c        if ((xi.gt.((xshift+0.5d0)*boxxsize)).or.
 +c     &       (xi.lt.((xshift-0.5d0)*boxxsize))) then
 +c        go to 134
 +c        endif
 +c  135   continue
 +c        if (yi.gt.((yshift+0.5d0)*boxysize)) yi=yi-boxysize
 +c        if (yi.lt.((yshift-0.5d0)*boxysize)) yi=yi+boxysize
 +C Condition for being inside the proper box
 +c        if ((yi.gt.((yshift+0.5d0)*boxysize)).or.
 +c     &       (yi.lt.((yshift-0.5d0)*boxysize))) then
 +c        go to 135
 +c c       endif
 +c  136   continue
 +c        if (zi.gt.((zshift+0.5d0)*boxzsize)) zi=zi-boxzsize
 +c        if (zi.lt.((zshift-0.5d0)*boxzsize)) zi=zi+boxzsize
 +cC Condition for being inside the proper box
 +c        if ((zi.gt.((zshift+0.5d0)*boxzsize)).or.
 +c     &       (zi.lt.((zshift-0.5d0)*boxzsize))) then
 +c        go to 136
 +c        endif
 +          xi=mod(xi,boxxsize)
 +          if (xi.lt.0) xi=xi+boxxsize
 +          yi=mod(yi,boxysize)
 +          if (yi.lt.0) yi=yi+boxysize
 +          zi=mod(zi,boxzsize)
 +          if (zi.lt.0) zi=zi+boxzsize
 +C          xi=xi+xshift*boxxsize
 +C          yi=yi+yshift*boxysize
 +C          zi=zi+zshift*boxzsize
          do iint=1,nscp_gr(i)
  
          do j=iscpstart(i,iint),iscpend(i,iint)
 -          if (itype(j).eq.21) cycle
 -          itypj=itype(j)
 +          if (itype(j).eq.ntyp1) cycle
 +          itypj=iabs(itype(j))
  C Uncomment following three lines for SC-p interactions
  c         xj=c(1,nres+j)-xi
  c         yj=c(2,nres+j)-yi
  c         zj=c(3,nres+j)-zi
  C Uncomment following three lines for Ca-p interactions
 -          xj=c(1,j)-xi
 -          yj=c(2,j)-yi
 -          zj=c(3,j)-zi
 +          xj=c(1,j)
 +          yj=c(2,j)
 +          zj=c(3,j)
 +c  174   continue
 +c        if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize
 +c        if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize
 +C Condition for being inside the proper box
 +c        if ((xj.gt.((0.5d0)*boxxsize)).or.
 +c     &       (xj.lt.((-0.5d0)*boxxsize))) then
 +c        go to 174
 +c        endif
 +c  175   continue
 +c        if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize
 +c        if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize
 +cC Condition for being inside the proper box
 +c        if ((yj.gt.((0.5d0)*boxysize)).or.
 +c     &       (yj.lt.((-0.5d0)*boxysize))) then
 +c        go to 175
 +c        endif
 +c  176   continue
 +c        if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize
 +c        if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize
 +C Condition for being inside the proper box
 +c        if ((zj.gt.((0.5d0)*boxzsize)).or.
 +c     &       (zj.lt.((-0.5d0)*boxzsize))) then
 +c        go to 176
 +          xj=mod(xj,boxxsize)
 +          if (xj.lt.0) xj=xj+boxxsize
 +          yj=mod(yj,boxysize)
 +          if (yj.lt.0) yj=yj+boxysize
 +          zj=mod(zj,boxzsize)
 +          if (zj.lt.0) zj=zj+boxzsize
 +      dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
 +      xj_safe=xj
 +      yj_safe=yj
 +      zj_safe=zj
 +      subchap=0
 +      do xshift=-1,1
 +      do yshift=-1,1
 +      do zshift=-1,1
 +          xj=xj_safe+xshift*boxxsize
 +          yj=yj_safe+yshift*boxysize
 +          zj=zj_safe+zshift*boxzsize
 +          dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
 +          if(dist_temp.lt.dist_init) then
 +            dist_init=dist_temp
 +            xj_temp=xj
 +            yj_temp=yj
 +            zj_temp=zj
 +            subchap=1
 +          endif
 +       enddo
 +       enddo
 +       enddo
 +       if (subchap.eq.1) then
 +          xj=xj_temp-xi
 +          yj=yj_temp-yi
 +          zj=zj_temp-zi
 +       else
 +          xj=xj_safe-xi
 +          yj=yj_safe-yi
 +          zj=zj_safe-zi
 +       endif
 +c c       endif
 +C          xj=xj-xi
 +C          yj=yj-yi
 +C          zj=zj-zi
            rij=xj*xj+yj*yj+zj*zj
 +
            r0ij=r0_scp
            r0ijsq=r0ij*r0ij
            if (rij.lt.r0ijsq) then
@@@ -4364,9 -3886,6 +4377,9 @@@ cgrad          endd
  
          enddo ! iint
        enddo ! i
 +C      enddo !zshift
 +C      enddo !yshift
 +C      enddo !xshift
        return
        end
  C-----------------------------------------------------------------------------
        include 'COMMON.FFIELD'
        include 'COMMON.IOUNITS'
        include 'COMMON.CONTROL'
 +      include 'COMMON.SPLITELE'
        dimension ggg(3)
        evdw2=0.0D0
        evdw2_14=0.0d0
 +c        print *,boxxsize,boxysize,boxzsize,'wymiary pudla'
  cd    print '(a)','Enter ESCP'
  cd    write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
 +C      do xshift=-1,1
 +C      do yshift=-1,1
 +C      do zshift=-1,1
        do i=iatscp_s,iatscp_e
 -        if (itype(i).eq.21 .or. itype(i+1).eq.21) cycle
 +        if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
          iteli=itel(i)
          xi=0.5D0*(c(1,i)+c(1,i+1))
          yi=0.5D0*(c(2,i)+c(2,i+1))
          zi=0.5D0*(c(3,i)+c(3,i+1))
 +          xi=mod(xi,boxxsize)
 +          if (xi.lt.0) xi=xi+boxxsize
 +          yi=mod(yi,boxysize)
 +          if (yi.lt.0) yi=yi+boxysize
 +          zi=mod(zi,boxzsize)
 +          if (zi.lt.0) zi=zi+boxzsize
 +c          xi=xi+xshift*boxxsize
 +c          yi=yi+yshift*boxysize
 +c          zi=zi+zshift*boxzsize
 +c        print *,xi,yi,zi,'polozenie i'
 +C Return atom into box, boxxsize is size of box in x dimension
 +c  134   continue
 +c        if (xi.gt.((xshift+0.5d0)*boxxsize)) xi=xi-boxxsize
 +c        if (xi.lt.((xshift-0.5d0)*boxxsize)) xi=xi+boxxsize
 +C Condition for being inside the proper box
 +c        if ((xi.gt.((xshift+0.5d0)*boxxsize)).or.
 +c     &       (xi.lt.((xshift-0.5d0)*boxxsize))) then
 +c        go to 134
 +c        endif
 +c  135   continue
 +c          print *,xi,boxxsize,"pierwszy"
  
 +c        if (yi.gt.((yshift+0.5d0)*boxysize)) yi=yi-boxysize
 +c        if (yi.lt.((yshift-0.5d0)*boxysize)) yi=yi+boxysize
 +C Condition for being inside the proper box
 +c        if ((yi.gt.((yshift+0.5d0)*boxysize)).or.
 +c     &       (yi.lt.((yshift-0.5d0)*boxysize))) then
 +c        go to 135
 +c        endif
 +c  136   continue
 +c        if (zi.gt.((zshift+0.5d0)*boxzsize)) zi=zi-boxzsize
 +c        if (zi.lt.((zshift-0.5d0)*boxzsize)) zi=zi+boxzsize
 +C Condition for being inside the proper box
 +c        if ((zi.gt.((zshift+0.5d0)*boxzsize)).or.
 +c     &       (zi.lt.((zshift-0.5d0)*boxzsize))) then
 +c        go to 136
 +c        endif
          do iint=1,nscp_gr(i)
  
          do j=iscpstart(i,iint),iscpend(i,iint)
 -          itypj=itype(j)
 -          if (itypj.eq.21) cycle
 +          itypj=iabs(itype(j))
 +          if (itypj.eq.ntyp1) cycle
  C Uncomment following three lines for SC-p interactions
  c         xj=c(1,nres+j)-xi
  c         yj=c(2,nres+j)-yi
  c         zj=c(3,nres+j)-zi
  C Uncomment following three lines for Ca-p interactions
 -          xj=c(1,j)-xi
 -          yj=c(2,j)-yi
 -          zj=c(3,j)-zi
 +          xj=c(1,j)
 +          yj=c(2,j)
 +          zj=c(3,j)
 +          xj=mod(xj,boxxsize)
 +          if (xj.lt.0) xj=xj+boxxsize
 +          yj=mod(yj,boxysize)
 +          if (yj.lt.0) yj=yj+boxysize
 +          zj=mod(zj,boxzsize)
 +          if (zj.lt.0) zj=zj+boxzsize
 +c  174   continue
 +c        if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize
 +c        if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize
 +C Condition for being inside the proper box
 +c        if ((xj.gt.((0.5d0)*boxxsize)).or.
 +c     &       (xj.lt.((-0.5d0)*boxxsize))) then
 +c        go to 174
 +c        endif
 +c  175   continue
 +c        if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize
 +c        if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize
 +cC Condition for being inside the proper box
 +c        if ((yj.gt.((0.5d0)*boxysize)).or.
 +c     &       (yj.lt.((-0.5d0)*boxysize))) then
 +c        go to 175
 +c        endif
 +c  176   continue
 +c        if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize
 +c        if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize
 +C Condition for being inside the proper box
 +c        if ((zj.gt.((0.5d0)*boxzsize)).or.
 +c     &       (zj.lt.((-0.5d0)*boxzsize))) then
 +c        go to 176
 +c        endif
 +CHERE IS THE CALCULATION WHICH MIRROR IMAGE IS THE CLOSEST ONE
 +      dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
 +      xj_safe=xj
 +      yj_safe=yj
 +      zj_safe=zj
 +      subchap=0
 +      do xshift=-1,1
 +      do yshift=-1,1
 +      do zshift=-1,1
 +          xj=xj_safe+xshift*boxxsize
 +          yj=yj_safe+yshift*boxysize
 +          zj=zj_safe+zshift*boxzsize
 +          dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
 +          if(dist_temp.lt.dist_init) then
 +            dist_init=dist_temp
 +            xj_temp=xj
 +            yj_temp=yj
 +            zj_temp=zj
 +            subchap=1
 +          endif
 +       enddo
 +       enddo
 +       enddo
 +       if (subchap.eq.1) then
 +          xj=xj_temp-xi
 +          yj=yj_temp-yi
 +          zj=zj_temp-zi
 +       else
 +          xj=xj_safe-xi
 +          yj=yj_safe-yi
 +          zj=zj_safe-zi
 +       endif
 +c          print *,xj,yj,zj,'polozenie j'
            rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
 +c          print *,rrij
 +          sss=sscale(1.0d0/(dsqrt(rrij)))
 +c          print *,r_cut,1.0d0/dsqrt(rrij),sss,'tu patrz'
 +c          if (sss.eq.0) print *,'czasem jest OK'
 +          if (sss.le.0.0d0) cycle
 +          sssgrad=sscagrad(1.0d0/(dsqrt(rrij)))
            fac=rrij**expon2
            e1=fac*fac*aad(itypj,iteli)
            e2=fac*bad(itypj,iteli)
            if (iabs(j-i) .le. 2) then
              e1=scal14*e1
              e2=scal14*e2
 -            evdw2_14=evdw2_14+e1+e2
 +            evdw2_14=evdw2_14+(e1+e2)*sss
            endif
            evdwij=e1+e2
 -          evdw2=evdw2+evdwij
 -          if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
 -     &        'evdw2',i,j,evdwij
 +          evdw2=evdw2+evdwij*sss
 +          if (energy_dec) write (iout,'(a6,2i5,0pf7.3,2i3,3e11.3)')
 +     &        'evdw2',i,j,evdwij,iteli,itypj,fac,aad(itypj,iteli),
 +     &       bad(itypj,iteli)
  C
  C Calculate contributions to the gradient in the virtual-bond and SC vectors.
  C
 -          fac=-(evdwij+e1)*rrij
 +          fac=-(evdwij+e1)*rrij*sss
 +          fac=fac+(evdwij)*sssgrad*dsqrt(rrij)/expon
            ggg(1)=xj*fac
            ggg(2)=yj*fac
            ggg(3)=zj*fac
@@@ -4575,14 -3982,10 +4588,14 @@@ cgrad          endd
              gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
              gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
            enddo
 -        enddo
 +c        endif !endif for sscale cutoff
 +        enddo ! j
  
          enddo ! iint
        enddo ! i
 +c      enddo !zshift
 +c      enddo !yshift
 +c      enddo !xshift
        do i=1,nct
          do j=1,3
            gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
@@@ -4632,50 -4035,56 +4645,59 @@@ C iii and jjj point to the residues fo
            iii=ii
            jjj=jj
          endif
- cd        write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj
+ c        write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj,
+ c     &    dhpb(i),dhpb1(i),forcon(i)
  C 24/11/03 AL: SS bridges handled separately because of introducing a specific
  C    distance and angle dependent SS bond potential.
 +        if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
 +     & iabs(itype(jjj)).eq.1) then
+ cmc        if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
+ C 18/07/06 MC: Use the convention that the first nss pairs are SS bonds
+         if (.not.dyn_ss .and. i.le.nss) then
+ C 15/02/13 CC dynamic SSbond - additional check
+          if (ii.gt.nres 
+      &       .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then 
++>>>>>>> f5379d3246c4bd95e946c4d35d4a1c13e329c4cb
            call ssbond_ene(iii,jjj,eij)
            ehpb=ehpb+2*eij
+          endif
  cd          write (iout,*) "eij",eij
          else
  C Calculate the distance between the two points and its difference from the
  C target distance.
-         dd=dist(ii,jj)
-         rdis=dd-dhpb(i)
+           dd=dist(ii,jj)
+             rdis=dd-dhpb(i)
  C Get the force constant corresponding to this distance.
-         waga=forcon(i)
+             waga=forcon(i)
  C Calculate the contribution to energy.
-         ehpb=ehpb+waga*rdis*rdis
+             ehpb=ehpb+waga*rdis*rdis
  C
  C Evaluate gradient.
  C
-         fac=waga*rdis/dd
+             fac=waga*rdis/dd
  cd      print *,'i=',i,' ii=',ii,' jj=',jj,' dhpb=',dhpb(i),' dd=',dd,
  cd   &   ' waga=',waga,' fac=',fac
-         do j=1,3
-           ggg(j)=fac*(c(j,jj)-c(j,ii))
-         enddo
+             do j=1,3
+               ggg(j)=fac*(c(j,jj)-c(j,ii))
+             enddo
  cd      print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
  C If this is a SC-SC distance, we need to calculate the contributions to the
  C Cartesian gradient in the SC vectors (ghpbx).
-         if (iii.lt.ii) then
+           if (iii.lt.ii) then
            do j=1,3
              ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
              ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
            enddo
-         endif
+           endif
  cgrad        do j=iii,jjj-1
  cgrad          do k=1,3
  cgrad            ghpbc(k,j)=ghpbc(k,j)+ggg(k)
  cgrad          enddo
  cgrad        enddo
-         do k=1,3
-           ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
-           ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
-         enddo
+           do k=1,3
+             ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
+             ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
+           enddo
          endif
        enddo
        ehpb=0.5D0*ehpb
        include 'COMMON.VAR'
        include 'COMMON.IOUNITS'
        double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
 -      itypi=itype(i)
 +      itypi=iabs(itype(i))
        xi=c(1,nres+i)
        yi=c(2,nres+i)
        zi=c(3,nres+i)
        dzi=dc_norm(3,nres+i)
  c      dsci_inv=dsc_inv(itypi)
        dsci_inv=vbld_inv(nres+i)
 -      itypj=itype(j)
 +      itypj=iabs(itype(j))
  c      dscj_inv=dsc_inv(itypj)
        dscj_inv=vbld_inv(nres+j)
        xj=c(1,nres+j)-xi
        estr=0.0d0
        estr1=0.0d0
        do i=ibondp_start,ibondp_end
 -        if (itype(i-1).eq.21 .or. itype(i).eq.21) then
 -          estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
 -          do j=1,3
 -          gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
 -     &      *dc(j,i-1)/vbld(i)
 -          enddo
 -          if (energy_dec) write(iout,*) 
 -     &       "estr1",i,gnmr1(vbld(i),-1.0d0,distchainmax)
 -        else
 +        if (itype(i-1).eq.ntyp1 .and. itype(i).eq.ntyp1) cycle
 +c          estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
 +c          do j=1,3
 +c          gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
 +c     &      *dc(j,i-1)/vbld(i)
 +c          enddo
 +c          if (energy_dec) write(iout,*) 
 +c     &       "estr1",i,gnmr1(vbld(i),-1.0d0,distchainmax)
 +c        else
 +C       Checking if it involves dummy (NH3+ or COO-) group
 +         if (itype(i-1).eq.ntyp1 .or. itype(i).eq.ntyp1) then
 +C YES   vbldpDUM is the equlibrium length of spring for Dummy atom
 +        diff = vbld(i)-vbldpDUM
 +         else
 +C NO    vbldp0 is the equlibrium lenght of spring for peptide group
          diff = vbld(i)-vbldp0
 -        if (energy_dec) write (iout,*) 
 +         endif 
 +        if (energy_dec)    write (iout,'(a7,i5,4f7.3)') 
       &     "estr bb",i,vbld(i),vbldp0,diff,AKP*diff*diff
          estr=estr+diff*diff
          do j=1,3
            gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
          enddo
  c        write (iout,'(i5,3f10.5)') i,(gradb(j,i-1),j=1,3)
 -        endif
 +c        endif
        enddo
        estr=0.5d0*AKP*estr+estr1
  c
  c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
  c
        do i=ibond_start,ibond_end
 -        iti=itype(i)
 -        if (iti.ne.10 .and. iti.ne.21) then
 +        iti=iabs(itype(i))
 +        if (iti.ne.10 .and. iti.ne.ntyp1) then
            nbi=nbondterm(iti)
            if (nbi.eq.1) then
              diff=vbld(i+nres)-vbldsc0(1,iti)
 -            if (energy_dec) write (iout,*) 
 +            if (energy_dec)  write (iout,*) 
       &      "estr sc",i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
       &      AKSC(1,iti),AKSC(1,iti)*diff*diff
              estr=estr+0.5d0*AKSC(1,iti)*diff*diff
@@@ -4896,25 -4298,11 +4918,25 @@@ c      time12=1.0d
        etheta=0.0D0
  c     write (*,'(a,i2)') 'EBEND ICG=',icg
        do i=ithet_start,ithet_end
 -        if (itype(i-1).eq.21) cycle
 +        if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
 +     &  .or.itype(i).eq.ntyp1) cycle
  C Zero the energy function and its derivative at 0 or pi.
          call splinthet(theta(i),0.5d0*delta,ss,ssd)
          it=itype(i-1)
 -        if (i.gt.3 .and. itype(i-2).ne.21) then
 +        ichir1=isign(1,itype(i-2))
 +        ichir2=isign(1,itype(i))
 +         if (itype(i-2).eq.10) ichir1=isign(1,itype(i-1))
 +         if (itype(i).eq.10) ichir2=isign(1,itype(i-1))
 +         if (itype(i-1).eq.10) then
 +          itype1=isign(10,itype(i-2))
 +          ichir11=isign(1,itype(i-2))
 +          ichir12=isign(1,itype(i-2))
 +          itype2=isign(10,itype(i))
 +          ichir21=isign(1,itype(i))
 +          ichir22=isign(1,itype(i))
 +         endif
 +
 +        if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
  #ifdef OSF
          phii=phi(i)
            if (phii.ne.phii) phii=150.0
            y(1)=0.0D0
            y(2)=0.0D0
          endif
 -        if (i.lt.nres .and. itype(i).ne.21) then
 +        if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
  #ifdef OSF
          phii1=phi(i+1)
            if (phii1.ne.phii1) phii1=150.0
            z(1)=cos(phii1)
  #else
            phii1=phi(i+1)
 -          z(1)=dcos(phii1)
  #endif
 +          z(1)=dcos(phii1)
            z(2)=dsin(phii1)
          else
            z(1)=0.0D0
@@@ -4947,28 -4335,15 +4969,28 @@@ C dependent on the adjacent virtual-bon
  C In following comments this theta will be referred to as t_c.
          thet_pred_mean=0.0d0
          do k=1,2
 -          athetk=athet(k,it)
 -          bthetk=bthet(k,it)
 -          thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
 +            athetk=athet(k,it,ichir1,ichir2)
 +            bthetk=bthet(k,it,ichir1,ichir2)
 +          if (it.eq.10) then
 +             athetk=athet(k,itype1,ichir11,ichir12)
 +             bthetk=bthet(k,itype2,ichir21,ichir22)
 +          endif
 +         thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
 +c         write(iout,*) 'chuj tu', y(k),z(k)
          enddo
          dthett=thet_pred_mean*ssd
          thet_pred_mean=thet_pred_mean*ss+a0thet(it)
  C Derivatives of the "mean" values in gamma1 and gamma2.
 -        dthetg1=(-athet(1,it)*y(2)+athet(2,it)*y(1))*ss
 -        dthetg2=(-bthet(1,it)*z(2)+bthet(2,it)*z(1))*ss
 +        dthetg1=(-athet(1,it,ichir1,ichir2)*y(2)
 +     &+athet(2,it,ichir1,ichir2)*y(1))*ss
 +         dthetg2=(-bthet(1,it,ichir1,ichir2)*z(2)
 +     &          +bthet(2,it,ichir1,ichir2)*z(1))*ss
 +         if (it.eq.10) then
 +      dthetg1=(-athet(1,itype1,ichir11,ichir12)*y(2)
 +     &+athet(2,itype1,ichir11,ichir12)*y(1))*ss
 +        dthetg2=(-bthet(1,itype2,ichir21,ichir22)*z(2)
 +     &         +bthet(2,itype2,ichir21,ichir22)*z(1))*ss
 +         endif
          if (theta(i).gt.pi-delta) then
            call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
       &         E_tc0)
       &        E_theta,E_tc)
          endif
          etheta=etheta+ethetai
 -        if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
 -     &      'ebend',i,ethetai
 +        if (energy_dec) write (iout,'(a6,i5,0pf7.3,f7.3,i5)')
 +     &      'ebend',i,ethetai,theta(i),itype(i)
          if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
          if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
 -        gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
 +        gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)+gloc(nphi+i-2,icg)
        enddo
  C Ufff.... We've done all this!!! 
        return
@@@ -5013,8 -4388,7 +5035,8 @@@ C--------------------------------------
  C Calculate the contributions to both Gaussian lobes.
  C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
  C The "polynomial part" of the "standard deviation" of this part of 
 -C the distribution.
 +C the distributioni.
 +ccc        write (iout,*) thetai,thet_pred_mean
          sig=polthet(3,it)
          do j=2,0,-1
            sig=sig*thet_pred_mean+polthet(j,it)
@@@ -5044,7 -4418,6 +5066,7 @@@ C Following variable is sigma(t_c)**(-2
          delthe0=thetai-theta0i
          term1=-0.5D0*sigcsq*delthec*delthec
          term2=-0.5D0*sig0inv*delthe0*delthe0
 +C        write (iout,*)'term1',term1,term2,sigcsq,delthec,sig0inv,delthe0
  C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
  C NaNs in taking the logarithm. We extract the largest exponent which is added
  C to the energy (this being the log of the distribution) at the end of energy
@@@ -5072,7 -4445,6 +5094,7 @@@ C Contribution of the bending energy fr
  C the sum of the contributions from the two lobes and the pre-exponential
  C factor. Simple enough, isn't it?
          ethetai=(-dlog(termexp)-termm+dlog(termpre))
 +C       write (iout,*) 'termexp',termexp,termm,termpre,i
  C NOW the derivatives!!!
  C 6/6/97 Take into account the deformation.
          E_theta=(delthec*sigcsq*term1
        logical lprn /.false./, lprn1 /.false./
        etheta=0.0D0
        do i=ithet_start,ithet_end
 -        if (itype(i-1).eq.21) cycle
 +c        print *,i,itype(i-1),itype(i),itype(i-2)
 +        if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
 +     &  .or.itype(i).eq.ntyp1) cycle
 +C In current verion the ALL DUMMY ATOM POTENTIALS ARE OFF
 +
 +        if (iabs(itype(i+1)).eq.20) iblock=2
 +        if (iabs(itype(i+1)).ne.20) iblock=1
          dethetai=0.0d0
          dephii=0.0d0
          dephii1=0.0d0
          theti2=0.5d0*theta(i)
 -        ityp2=ithetyp(itype(i-1))
 +        ityp2=ithetyp((itype(i-1)))
          do k=1,nntheterm
            coskt(k)=dcos(k*theti2)
            sinkt(k)=dsin(k*theti2)
          enddo
 -        if (i.gt.3 .and. itype(i-2).ne.21) then
 +        if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
  #ifdef OSF
            phii=phi(i)
            if (phii.ne.phii) phii=150.0
  #else
            phii=phi(i)
  #endif
 -          ityp1=ithetyp(itype(i-2))
 +          ityp1=ithetyp((itype(i-2)))
 +C propagation of chirality for glycine type
            do k=1,nsingle
              cosph1(k)=dcos(k*phii)
              sinph1(k)=dsin(k*phii)
              sinph1(k)=0.0d0
            enddo 
          endif
 -        if (i.lt.nres .and. itype(i).ne.21) then
 +        if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
  #ifdef OSF
            phii1=phi(i+1)
            if (phii1.ne.phii1) phii1=150.0
  #else
            phii1=phi(i+1)
  #endif
 -          ityp3=ithetyp(itype(i))
 +          ityp3=ithetyp((itype(i)))
            do k=1,nsingle
              cosph2(k)=dcos(k*phii1)
              sinph2(k)=dsin(k*phii1)
              sinph2(k)=0.0d0
            enddo
          endif  
 -        ethetai=aa0thet(ityp1,ityp2,ityp3)
 +        ethetai=aa0thet(ityp1,ityp2,ityp3,iblock)
          do k=1,ndouble
            do l=1,k-1
              ccl=cosph1(l)*cosph2(k-l)
          enddo
          endif
          do k=1,ntheterm
 -          ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3)*sinkt(k)
 -          dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3)
 +          ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3,iblock)*sinkt(k)
 +          dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3,iblock)
       &      *coskt(k)
            if (lprn)
 -     &    write (iout,*) "k",k," aathet",aathet(k,ityp1,ityp2,ityp3),
 +     &    write (iout,*) "k",k,"
 +     &     aathet",aathet(k,ityp1,ityp2,ityp3,iblock),
       &     " ethetai",ethetai
          enddo
          if (lprn) then
          endif
          do m=1,ntheterm2
            do k=1,nsingle
 -            aux=bbthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)
 -     &         +ccthet(k,m,ityp1,ityp2,ityp3)*sinph1(k)
 -     &         +ddthet(k,m,ityp1,ityp2,ityp3)*cosph2(k)
 -     &         +eethet(k,m,ityp1,ityp2,ityp3)*sinph2(k)
 +            aux=bbthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)
 +     &         +ccthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k)
 +     &         +ddthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)
 +     &         +eethet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k)
              ethetai=ethetai+sinkt(m)*aux
              dethetai=dethetai+0.5d0*m*aux*coskt(m)
              dephii=dephii+k*sinkt(m)*(
 -     &          ccthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)-
 -     &          bbthet(k,m,ityp1,ityp2,ityp3)*sinph1(k))
 +     &          ccthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)-
 +     &          bbthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k))
              dephii1=dephii1+k*sinkt(m)*(
 -     &          eethet(k,m,ityp1,ityp2,ityp3)*cosph2(k)-
 -     &          ddthet(k,m,ityp1,ityp2,ityp3)*sinph2(k))
 +     &          eethet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)-
 +     &          ddthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k))
              if (lprn)
       &      write (iout,*) "m",m," k",k," bbthet",
 -     &         bbthet(k,m,ityp1,ityp2,ityp3)," ccthet",
 -     &         ccthet(k,m,ityp1,ityp2,ityp3)," ddthet",
 -     &         ddthet(k,m,ityp1,ityp2,ityp3)," eethet",
 -     &         eethet(k,m,ityp1,ityp2,ityp3)," ethetai",ethetai
 +     &         bbthet(k,m,ityp1,ityp2,ityp3,iblock)," ccthet",
 +     &         ccthet(k,m,ityp1,ityp2,ityp3,iblock)," ddthet",
 +     &         ddthet(k,m,ityp1,ityp2,ityp3,iblock)," eethet",
 +     &         eethet(k,m,ityp1,ityp2,ityp3,iblock)," ethetai",ethetai
            enddo
          enddo
          if (lprn)
          do m=1,ntheterm3
            do k=2,ndouble
              do l=1,k-1
 -              aux=ffthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
 -     &            ffthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l)+
 -     &            ggthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
 -     &            ggthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)
 +              aux=ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
 +     &            ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l)+
 +     &            ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
 +     &            ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)
                ethetai=ethetai+sinkt(m)*aux
                dethetai=dethetai+0.5d0*m*coskt(m)*aux
                dephii=dephii+l*sinkt(m)*(
 -     &           -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)-
 -     &            ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
 -     &            ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
 -     &            ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
 +     &           -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)-
 +     &            ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
 +     &            ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
 +     &            ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
                dephii1=dephii1+(k-l)*sinkt(m)*(
 -     &           -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
 -     &            ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
 -     &            ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)-
 -     &            ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
 +     &           -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
 +     &            ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
 +     &            ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)-
 +     &            ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
                if (lprn) then
                write (iout,*) "m",m," k",k," l",l," ffthet",
 -     &            ffthet(l,k,m,ityp1,ityp2,ityp3),
 -     &            ffthet(k,l,m,ityp1,ityp2,ityp3)," ggthet",
 -     &            ggthet(l,k,m,ityp1,ityp2,ityp3),
 -     &            ggthet(k,l,m,ityp1,ityp2,ityp3)," ethetai",ethetai
 +     &            ffthet(l,k,m,ityp1,ityp2,ityp3,iblock),
 +     &            ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)," ggthet",
 +     &            ggthet(l,k,m,ityp1,ityp2,ityp3,iblock),
 +     &            ggthet(k,l,m,ityp1,ityp2,ityp3,iblock),
 +     &            " ethetai",ethetai
                write (iout,*) cosph1ph2(l,k)*sinkt(m),
       &            cosph1ph2(k,l)*sinkt(m),
       &            sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
            enddo
          enddo
  10      continue
 -        if (lprn1) write (iout,'(i2,3f8.1,9h ethetai ,f10.5)') 
 +c        lprn1=.true.
 +        if (lprn1) 
 +     &    write (iout,'(i2,3f8.1,9h ethetai ,f10.5)') 
       &   i,theta(i)*rad2deg,phii*rad2deg,
       &   phii1*rad2deg,ethetai
 +c        lprn1=.false.
          etheta=etheta+ethetai
          if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
          if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
 -        gloc(nphi+i-2,icg)=wang*dethetai
 +        gloc(nphi+i-2,icg)=wang*dethetai+ gloc(nphi+i-2,icg)
        enddo
        return
        end
@@@ -5339,9 -4699,9 +5361,9 @@@ C ALPHA and OMEGA
  c     write (iout,'(a)') 'ESC'
        do i=loc_start,loc_end
          it=itype(i)
 -        if (it.eq.21) cycle
 +        if (it.eq.ntyp1) cycle
          if (it.eq.10) goto 1
 -        nlobit=nlob(it)
 +        nlobit=nlob(iabs(it))
  c       print *,'i=',i,' it=',it,' nlobit=',nlobit
  c       write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
          theti=theta(i+1)-pipol
@@@ -5498,11 -4858,11 +5520,11 @@@ C Compute the contribution to SC energ
  
            do j=1,nlobit
  #ifdef OSF
 -            adexp=bsc(j,it)-0.5D0*contr(j,iii)+emin
 +            adexp=bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin
              if(adexp.ne.adexp) adexp=1.0
              expfac=dexp(adexp)
  #else
 -            expfac=dexp(bsc(j,it)-0.5D0*contr(j,iii)+emin)
 +            expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin)
  #endif
  cd          print *,'j=',j,' expfac=',expfac
              escloc_i=escloc_i+expfac
@@@ -5584,7 -4944,7 +5606,7 @@@ C Compute the contribution to SC energ
  
        dersc12=0.0d0
        do j=1,nlobit
 -        expfac=dexp(bsc(j,it)-0.5D0*contr(j)+emin)
 +        expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j)+emin)
          escloc_i=escloc_i+expfac
          do k=1,2
            dersc(k)=dersc(k)+Ax(k,j)*expfac
        delta=0.02d0*pi
        escloc=0.0D0
        do i=loc_start,loc_end
 -        if (itype(i).eq.21) cycle
 +        if (itype(i).eq.ntyp1) cycle
          costtab(i+1) =dcos(theta(i+1))
          sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
          cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
          cosfac=dsqrt(cosfac2)
          sinfac2=0.5d0/(1.0d0-costtab(i+1))
          sinfac=dsqrt(sinfac2)
 -        it=itype(i)
 +        it=iabs(itype(i))
          if (it.eq.10) goto 1
  c
  C  Compute the axes of tghe local cartesian coordinates system; store in
@@@ -5665,7 -5025,7 +5687,7 @@@ C     &   dc_norm(3,i+nres
            y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
          enddo
          do j = 1,3
 -          z_prime(j) = -uz(j,i-1)
 +          z_prime(j) = -uz(j,i-1)*dsign(1.0d0,dfloat(itype(i)))
          enddo     
  c       write (2,*) "i",i
  c       write (2,*) "x_prime",(x_prime(j),j=1,3)
  C Compute the energy of the ith side cbain
  C
  c        write (2,*) "xx",xx," yy",yy," zz",zz
 -        it=itype(i)
 +        it=iabs(itype(i))
          do j = 1,65
            x(j) = sc_parmin(j,it) 
          enddo
  Cc diagnostics - remove later
          xx1 = dcos(alph(2))
          yy1 = dsin(alph(2))*dcos(omeg(2))
 -        zz1 = -dsin(alph(2))*dsin(omeg(2))
 +        zz1 = -dsign(1.0,dfloat(itype(i)))*dsin(alph(2))*dsin(omeg(2))
          write(2,'(3f8.1,3f9.3,1x,3f9.3)') 
       &    alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
       &    xx1,yy1,zz1
@@@ -5747,9 -5107,7 +5769,9 @@@ c     &   sumene4
  c     &   dscp1,dscp2,sumene
  c        sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
          escloc = escloc + sumene
 -c        write (2,*) "i",i," escloc",sumene,escloc
 +c        write (2,*) "i",i," escloc",sumene,escloc,it,itype(i)
 +c     & ,zz,xx,yy
 +c#define DEBUG
  #ifdef DEBUG
  C
  C This section to check the numerical derivatives of the energy of ith side
@@@ -5793,7 -5151,6 +5815,7 @@@ C End of diagnostics section
  C        
  C Compute the gradient of esc
  C
 +c        zz=zz*dsign(1.0,dfloat(itype(i)))
          pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
          pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
          pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
       &        +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
       &        +(pom1+pom2)*pom_dx
  #ifdef DEBUG
 -        write(2,*), "de_dxx = ", de_dxx,de_dxx_num
 +        write(2,*), "de_dxx = ", de_dxx,de_dxx_num,itype(i)
  #endif
  C
          sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
       &        +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
       &        +(pom1-pom2)*pom_dy
  #ifdef DEBUG
 -        write(2,*), "de_dyy = ", de_dyy,de_dyy_num
 +        write(2,*), "de_dyy = ", de_dyy,de_dyy_num,itype(i)
  #endif
  C
          de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
       &  +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
       &  + ( x(14) + 2*x(17)*zz+  x(18)*xx + x(20)*yy)*(s2+s2_6)
  #ifdef DEBUG
 -        write(2,*), "de_dzz = ", de_dzz,de_dzz_num
 +        write(2,*), "de_dzz = ", de_dzz,de_dzz_num,itype(i)
  #endif
  C
          de_dt =  0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6) 
       &  -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
       &  +pom1*pom_dt1+pom2*pom_dt2
  #ifdef DEBUG
 -        write(2,*), "de_dt = ", de_dt,de_dt_num
 +        write(2,*), "de_dt = ", de_dt,de_dt_num,itype(i)
  #endif
 +c#undef DEBUG
  c 
  C
         cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
@@@ -5879,16 -5235,13 +5901,16 @@@ c     &   (dC_norm(j,i-1),j=1,3)," vbld
           dZZ_Ci1(k)=0.0d0
           dZZ_Ci(k)=0.0d0
           do j=1,3
 -           dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)*dC_norm(j,i+nres)
 -           dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)*dC_norm(j,i+nres)
 +           dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)
 +     &     *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
 +           dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)
 +     &     *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
           enddo
            
           dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
           dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
 -         dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
 +         dZZ_XYZ(k)=vbld_inv(i+nres)*
 +     &   (z_prime(k)-zz*dC_norm(k,i+nres))
  c
           dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
           dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
@@@ -6073,10 -5426,10 +6095,10 @@@ c      lprn=.true
        etors=0.0D0
        do i=iphi_start,iphi_end
        etors_ii=0.0D0
 -        if (itype(i-2).eq.21 .or. itype(i-1).eq.21 
 -     &      .or. itype(i).eq.21) cycle
 -      itori=itortyp(itype(i-2))
 -      itori1=itortyp(itype(i-1))
 +        if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
 +     &      .or. itype(i).eq.ntyp1 .or. itype(i-3).eq.ntyp1) cycle
 +        itori=itortyp(itype(i-2))
 +        itori1=itortyp(itype(i-1))
          phii=phi(i)
          gloci=0.0D0
  C Proline-Proline pair is a special case...
@@@ -6170,29 -5523,17 +6192,29 @@@ C Set lprn=.true. for debuggin
  c     lprn=.true.
        etors=0.0D0
        do i=iphi_start,iphi_end
 -        if (itype(i-2).eq.21 .or. itype(i-1).eq.21 
 -     &       .or. itype(i).eq.21) cycle
 -      etors_ii=0.0D0
 +C ANY TWO ARE DUMMY ATOMS in row CYCLE
 +c        if (((itype(i-3).eq.ntyp1).and.(itype(i-2).eq.ntyp1)).or.
 +c     &      ((itype(i-2).eq.ntyp1).and.(itype(i-1).eq.ntyp1))  .or.
 +c     &      ((itype(i-1).eq.ntyp1).and.(itype(i).eq.ntyp1))) cycle
 +        if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
 +     &      .or. itype(i).eq.ntyp1 .or. itype(i-3).eq.ntyp1) cycle
 +C In current verion the ALL DUMMY ATOM POTENTIALS ARE OFF
 +C For introducing the NH3+ and COO- group please check the etor_d for reference
 +C and guidance
 +        etors_ii=0.0D0
 +         if (iabs(itype(i)).eq.20) then
 +         iblock=2
 +         else
 +         iblock=1
 +         endif
          itori=itortyp(itype(i-2))
          itori1=itortyp(itype(i-1))
          phii=phi(i)
          gloci=0.0D0
  C Regular cosine and sine terms
 -        do j=1,nterm(itori,itori1)
 -          v1ij=v1(j,itori,itori1)
 -          v2ij=v2(j,itori,itori1)
 +        do j=1,nterm(itori,itori1,iblock)
 +          v1ij=v1(j,itori,itori1,iblock)
 +          v2ij=v2(j,itori,itori1,iblock)
            cosphi=dcos(j*phii)
            sinphi=dsin(j*phii)
            etors=etors+v1ij*cosphi+v2ij*sinphi
@@@ -6207,7 -5548,7 +6229,7 @@@ C          [v2 cos(phi/2)+v3 sin(phi/2)
  C
          cosphi=dcos(0.5d0*phii)
          sinphi=dsin(0.5d0*phii)
 -        do j=1,nlor(itori,itori1)
 +        do j=1,nlor(itori,itori1,iblock)
            vl1ij=vlor1(j,itori,itori1)
            vl2ij=vlor2(j,itori,itori1)
            vl3ij=vlor3(j,itori,itori1)
            gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
          enddo
  C Subtract the constant term
 -        etors=etors-v0(itori,itori1)
 +        etors=etors-v0(itori,itori1,iblock)
            if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
 -     &         'etor',i,etors_ii-v0(itori,itori1)
 +     &         'etor',i,etors_ii-v0(itori,itori1,iblock)
          if (lprn)
       &  write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
       &  restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
 -     &  (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
 +     &  (v1(j,itori,itori1,iblock),j=1,6),
 +     &  (v2(j,itori,itori1,iblock),j=1,6)
          gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
  c       write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
        enddo
@@@ -6277,17 -5617,9 +6299,17 @@@ C Set lprn=.true. for debuggin
        lprn=.false.
  c     lprn=.true.
        etors_d=0.0D0
 +c      write(iout,*) "a tu??"
        do i=iphid_start,iphid_end
 -        if (itype(i-2).eq.21 .or. itype(i-1).eq.21
 -     &      .or. itype(i).eq.21 .or. itype(i+1).eq.21) cycle
 +C ANY TWO ARE DUMMY ATOMS in row CYCLE
 +C        if (((itype(i-3).eq.ntyp1).and.(itype(i-2).eq.ntyp1)).or.
 +C     &      ((itype(i-2).eq.ntyp1).and.(itype(i-1).eq.ntyp1)).or.
 +C     &      ((itype(i-1).eq.ntyp1).and.(itype(i).eq.ntyp1))  .or.
 +C     &      ((itype(i).eq.ntyp1).and.(itype(i+1).eq.ntyp1))) cycle
 +         if ((itype(i-2).eq.ntyp1).or.itype(i-3).eq.ntyp1.or.
 +     &  (itype(i-1).eq.ntyp1).or.(itype(i).eq.ntyp1).or.
 +     &  (itype(i+1).eq.ntyp1)) cycle
 +C In current verion the ALL DUMMY ATOM POTENTIALS ARE OFF
          itori=itortyp(itype(i-2))
          itori1=itortyp(itype(i-1))
          itori2=itortyp(itype(i))
          phii1=phi(i+1)
          gloci1=0.0D0
          gloci2=0.0D0
 +        iblock=1
 +        if (iabs(itype(i+1)).eq.20) iblock=2
 +C Iblock=2 Proline type
 +C ADASKO: WHEN PARAMETERS FOR THIS TYPE OF BLOCKING GROUP IS READY UNCOMMENT
 +C CHECK WEATHER THERE IS NECCESITY FOR iblock=3 for COO-
 +C        if (itype(i+1).eq.ntyp1) iblock=3
 +C The problem of NH3+ group can be resolved by adding new parameters please note if there
 +C IS or IS NOT need for this
 +C IF Yes uncomment below and add to parmread.F appropriate changes and to v1cij and so on
 +C        is (itype(i-3).eq.ntyp1) ntblock=2
 +C        ntblock is N-terminal blocking group
 +
  C Regular cosine and sine terms
 -        do j=1,ntermd_1(itori,itori1,itori2)
 -          v1cij=v1c(1,j,itori,itori1,itori2)
 -          v1sij=v1s(1,j,itori,itori1,itori2)
 -          v2cij=v1c(2,j,itori,itori1,itori2)
 -          v2sij=v1s(2,j,itori,itori1,itori2)
 +        do j=1,ntermd_1(itori,itori1,itori2,iblock)
 +C Example of changes for NH3+ blocking group
 +C       do j=1,ntermd_1(itori,itori1,itori2,iblock,ntblock)
 +C          v1cij=v1c(1,j,itori,itori1,itori2,iblock,ntblock)
 +          v1cij=v1c(1,j,itori,itori1,itori2,iblock)
 +          v1sij=v1s(1,j,itori,itori1,itori2,iblock)
 +          v2cij=v1c(2,j,itori,itori1,itori2,iblock)
 +          v2sij=v1s(2,j,itori,itori1,itori2,iblock)
            cosphi1=dcos(j*phii)
            sinphi1=dsin(j*phii)
            cosphi2=dcos(j*phii1)
            gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
            gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
          enddo
 -        do k=2,ntermd_2(itori,itori1,itori2)
 +        do k=2,ntermd_2(itori,itori1,itori2,iblock)
            do l=1,k-1
 -            v1cdij = v2c(k,l,itori,itori1,itori2)
 -            v2cdij = v2c(l,k,itori,itori1,itori2)
 -            v1sdij = v2s(k,l,itori,itori1,itori2)
 -            v2sdij = v2s(l,k,itori,itori1,itori2)
 +            v1cdij = v2c(k,l,itori,itori1,itori2,iblock)
 +            v2cdij = v2c(l,k,itori,itori1,itori2,iblock)
 +            v1sdij = v2s(k,l,itori,itori1,itori2,iblock)
 +            v2sdij = v2s(l,k,itori,itori1,itori2,iblock)
              cosphi1p2=dcos(l*phii+(k-l)*phii1)
              cosphi1m2=dcos(l*phii-(k-l)*phii1)
              sinphi1p2=dsin(l*phii+(k-l)*phii1)
@@@ -6375,53 -5692,29 +6397,53 @@@ c        amino-acid residues
  C Set lprn=.true. for debugging
        lprn=.false.
  c      lprn=.true.
 -c      write (iout,*) "EBACK_SC_COR",iphi_start,iphi_end,nterm_sccor
 +c      write (iout,*) "EBACK_SC_COR",itau_start,itau_end
        esccor=0.0D0
 -      do i=iphi_start,iphi_end
 -        if (itype(i-2).eq.21 .or. itype(i-1).eq.21) cycle
 +      do i=itau_start,itau_end
 +        if ((itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)) cycle
          esccor_ii=0.0D0
 -        itori=itype(i-2)
 -        itori1=itype(i-1)
 +        isccori=isccortyp(itype(i-2))
 +        isccori1=isccortyp(itype(i-1))
 +c      write (iout,*) "EBACK_SC_COR",i,nterm_sccor(isccori,isccori1)
          phii=phi(i)
 +        do intertyp=1,3 !intertyp
 +cc Added 09 May 2012 (Adasko)
 +cc  Intertyp means interaction type of backbone mainchain correlation: 
 +c   1 = SC...Ca...Ca...Ca
 +c   2 = Ca...Ca...Ca...SC
 +c   3 = SC...Ca...Ca...SCi
          gloci=0.0D0
 -        do j=1,nterm_sccor
 -          v1ij=v1sccor(j,itori,itori1)
 -          v2ij=v2sccor(j,itori,itori1)
 -          cosphi=dcos(j*phii)
 -          sinphi=dsin(j*phii)
 +        if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
 +     &      (itype(i-1).eq.10).or.(itype(i-2).eq.ntyp1).or.
 +     &      (itype(i-1).eq.ntyp1)))
 +     &    .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
 +     &     .or.(itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)
 +     &     .or.(itype(i).eq.ntyp1)))
 +     &    .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
 +     &      (itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
 +     &      (itype(i-3).eq.ntyp1)))) cycle
 +        if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.ntyp1)) cycle
 +        if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.ntyp1))
 +     & cycle
 +       do j=1,nterm_sccor(isccori,isccori1)
 +          v1ij=v1sccor(j,intertyp,isccori,isccori1)
 +          v2ij=v2sccor(j,intertyp,isccori,isccori1)
 +          cosphi=dcos(j*tauangle(intertyp,i))
 +          sinphi=dsin(j*tauangle(intertyp,i))
            esccor=esccor+v1ij*cosphi+v2ij*sinphi
            gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
          enddo
 +c      write (iout,*) "EBACK_SC_COR",i,v1ij*cosphi+v2ij*sinphi,intertyp
 +        gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
          if (lprn)
       &  write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
 -     &  restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
 -     &  (v1sccor(j,itori,itori1),j=1,6),(v2sccor(j,itori,itori1),j=1,6)
 +     &  restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,isccori,isccori1,
 +     &  (v1sccor(j,intertyp,isccori,isccori1),j=1,6)
 +     & ,(v2sccor(j,intertyp,isccori,isccori1),j=1,6)
          gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
 +       enddo !intertyp
        enddo
 +
        return
        end
  c----------------------------------------------------------------------------
@@@ -7426,7 -6719,7 +7448,7 @@@ C--------------------------------------
        if (j.lt.nres-1) then
          itj1 = itortyp(itype(j+1))
        else
 -        itj1=ntortyp+1
 +        itj1=ntortyp
        endif
        do iii=1,2
          dipi(iii,1)=Ub2(iii,i)
@@@ -7516,14 -6809,14 +7538,14 @@@ C parallel orientation of the two CA-CA
          if (i.gt.1) then
            iti=itortyp(itype(i))
          else
 -          iti=ntortyp+1
 +          iti=ntortyp
          endif
          itk1=itortyp(itype(k+1))
          itj=itortyp(itype(j))
          if (l.lt.nres-1) then
            itl1=itortyp(itype(l+1))
          else
 -          itl1=ntortyp+1
 +          itl1=ntortyp
          endif
  C A1 kernel(j+1) A2T
  cd        do iii=1,2
@@@ -7669,7 -6962,7 +7691,7 @@@ C Antiparallel orientation of the two C
          if (i.gt.1) then
            iti=itortyp(itype(i))
          else
 -          iti=ntortyp+1
 +          iti=ntortyp
          endif
          itk1=itortyp(itype(k+1))
          itl=itortyp(itype(l))
          if (j.lt.nres-1) then
            itj1=itortyp(itype(j+1))
          else 
 -          itj1=ntortyp+1
 +          itj1=ntortyp
          endif
  C A2 kernel(j-1)T A1T
          call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
  C          o             o                                                     C
  C     \   /l\           /j\   /                                                C
  C      \ /   \         /   \ /                                                 C
- C       o| o |         | o |o                                                  C
+ C       o| o |         | o |o                                                  C                
  C     \ j|/k\|      \  |/k\|l                                                  C
  C      \ /   \       \ /   \                                                   C
  C       o             o                                                        C
- C       i             i                                                        C
- C                                                                              C
+ C       i             i                                                        C 
+ C                                                                              C           
  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  cd      write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
  C AL 7/4/01 s1 would occur in the sixth-order moment, 
@@@ -8811,10 -8104,10 +8833,10 @@@ c--------------------------------------
        double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
        logical swap
  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
- C                                                                              C
+ C                                                                              C 
  C      Parallel       Antiparallel                                             C
  C                                                                              C
- C          o             o                                                     C
+ C          o             o                                                     C 
  C         /l\   /   \   /j\                                                    C 
  C        /   \ /     \ /   \                                                   C
  C       /| o |o       o| o |\                                                  C
@@@ -8831,14 -8124,14 +8853,14 @@@ C           energy moment and not to th
        if (j.lt.nres-1) then
          itj1=itortyp(itype(j+1))
        else
 -        itj1=ntortyp+1
 +        itj1=ntortyp
        endif
        itk=itortyp(itype(k))
        itk1=itortyp(itype(k+1))
        if (l.lt.nres-1) then
          itl1=itortyp(itype(l+1))
        else
 -        itl1=ntortyp+1
 +        itl1=ntortyp
        endif
  #ifdef MOMENT
        s1=dip(4,jj,i)*dip(4,kk,k)
@@@ -8928,7 -8221,7 +8950,7 @@@ c--------------------------------------
       & auxvec1(2),auxmat1(2,2)
        logical swap
  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
- C                                                                              C
+ C                                                                              C                       
  C      Parallel       Antiparallel                                             C
  C                                                                              C
  C          o             o                                                     C
@@@ -8936,10 -8229,10 +8958,10 @@@ C         /l\   /   \   /j
  C        /   \ /     \ /   \                                                   C
  C       /| o |o       o| o |\                                                  C
  C     \ j|/k\|      \  |/k\|l                                                  C
- C      \ /   \       \ /   \                                                   C
+ C      \ /   \       \ /   \                                                   C 
  C       o     \       o     \                                                  C
  C       i             i                                                        C
- C                                                                              C
+ C                                                                              C 
  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  C
  C 4/7/01 AL Component s1 was removed, because it pertains to the respective 
@@@ -8950,19 -8243,19 +8972,19 @@@ cd      write (2,*) 'eello_graph4: wtur
        if (j.lt.nres-1) then
          itj1=itortyp(itype(j+1))
        else
 -        itj1=ntortyp+1
 +        itj1=ntortyp
        endif
        itk=itortyp(itype(k))
        if (k.lt.nres-1) then
          itk1=itortyp(itype(k+1))
        else
 -        itk1=ntortyp+1
 +        itk1=ntortyp
        endif
        itl=itortyp(itype(l))
        if (l.lt.nres-1) then
          itl1=itortyp(itype(l+1))
        else
 -        itl1=ntortyp+1
 +        itl1=ntortyp
        endif
  cd      write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
  cd      write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
@@@ -80,9 -80,15 +80,15 @@@ cmodel      write (iunit,'(a5,i6)') 'MO
  
        if (nss.gt.0) then
          do i=1,nss
+          if (dyn_ss) then
            write(iunit,'(a6,i4,1x,a3,i7,4x,a3,i7)') 
-      &         'SSBOND',i,'CYS',ihpb(i)-1-nres,
-      &                    'CYS',jhpb(i)-1-nres
+      &         'SSBOND',i,'CYS',idssb(i)-nnt+1,
+      &                    'CYS',jdssb(i)-nnt+1
+          else
+           write(iunit,'(a6,i4,1x,a3,i7,4x,a3,i7)') 
+      &         'SSBOND',i,'CYS',ihpb(i)-nnt+1-nres,
+      &                    'CYS',jhpb(i)-nnt+1-nres
+          endif
          enddo
        endif
        
@@@ -91,7 -97,7 +97,7 @@@
        ires=0
        do i=nnt,nct
          iti=itype(i)
 -        if (iti.eq.21) then
 +        if ((iti.eq.ntyp1).and.((itype(i+1)).eq.ntyp1)) then
            ichain=ichain+1
            ires=0
            write (iunit,'(a)') 'TER'
          ires=ires+1
          iatom=iatom+1
          ica(i)=iatom
 +        if (iti.ne.ntyp1) then
          write (iunit,10) iatom,restyp(iti),chainid(ichain),
       &     ires,(c(j,i),j=1,3),vtot(i)
          if (iti.ne.10) then
            write (iunit,20) iatom,restyp(iti),chainid(ichain),
       &      ires,(c(j,nres+i),j=1,3),
       &      vtot(i+nres)
 +         endif
          endif
          endif
        enddo
        write (iunit,'(a)') 'TER'
        do i=nnt,nct-1
 -        if (itype(i).eq.21) cycle
 -        if (itype(i).eq.10 .and. itype(i+1).ne.21) then
 +        if (itype(i).eq.ntyp1) cycle
 +        if (itype(i).eq.10 .and. itype(i+1).ne.ntyp1) then
            write (iunit,30) ica(i),ica(i+1)
 -        else if (itype(i).ne.10 .and. itype(i+1).ne.21) then
 +        else if (itype(i).ne.10 .and. itype(i+1).ne.ntyp1) then
            write (iunit,30) ica(i),ica(i+1),ica(i)+1
 -        else if (itype(i).ne.10 .and. itype(i+1).eq.21) then
 +        else if (itype(i).ne.10 .and. itype(i+1).eq.ntyp1) then
            write (iunit,30) ica(i),ica(i)+1
          endif
        enddo
          write (iunit,30) ica(nct),ica(nct)+1
        endif
        do i=1,nss
+        if (dyn_ss) then
+         write (iunit,30) ica(idssb(i))+1,ica(jdssb(i))+1
+        else
          write (iunit,30) ica(ihpb(i)-nres)+1,ica(jhpb(i)-nres)+1
+        endif
        enddo
        write (iunit,'(a6)') 'ENDMDL'     
    10  FORMAT ('ATOM',I7,'  CA  ',A3,1X,A1,I4,4X,3F8.3,f15.3)
@@@ -202,7 -210,6 +212,7 @@@ c--------------------------------------
        include 'COMMON.INTERACT'
        include 'COMMON.NAMES'
        include 'COMMON.GEO'
 +      include 'COMMON.TORSION'
        write (iout,'(/a)') 'Geometry of the virtual chain.'
        write (iout,'(7a)') '  Res  ','         d','     Theta',
       & '       Phi','       Dsc','     Alpha','      Omega'
@@@ -281,8 -288,13 +291,13 @@@ c--------------------------------------
        open(icart,file=cartname,access="append")
  #endif
        write (icart,'(e15.8,2e15.5,f12.5,$)') time,potE,uconst,t_bath
-       write (icart,'(i4,$)')
+       if (dyn_ss) then
+        write (icart,'(i4,$)')
+      &   nss,(idssb(j)+nres,jdssb(j)+nres,j=1,nss)       
+       else
+        write (icart,'(i4,$)')
       &   nss,(ihpb(j),jhpb(j),j=1,nss)
+        endif
         write (icart,'(i4,20f7.4)') nfrag+npair+3*nfrag_back,
       & (qfrag(i),i=1,nfrag),(qpair(i),i=1,npair),
       & (utheta(i),ugamma(i),uscdiff(i),i=1,nfrag_back)
@@@ -324,8 -336,13 +339,13 @@@ c--------------------------------------
        call xdrffloat_(ixdrf, real(t_bath), iret)
        call xdrfint_(ixdrf, nss, iret) 
        do j=1,nss
+        if (dyn_ss) then
+         call xdrfint_(ixdrf, idssb(j)+nres, iret)
+         call xdrfint_(ixdrf, jdssb(j)+nres, iret)
+        else
          call xdrfint_(ixdrf, ihpb(j), iret)
          call xdrfint_(ixdrf, jhpb(j), iret)
+        endif
        enddo
        call xdrfint_(ixdrf, nfrag+npair+3*nfrag_back, iret)
        do i=1,nfrag
        call xdrffloat(ixdrf, real(t_bath), iret)
        call xdrfint(ixdrf, nss, iret) 
        do j=1,nss
+        if (dyn_ss) then
+         call xdrfint(ixdrf, idssb(j)+nres, iret)
+         call xdrfint(ixdrf, jdssb(j)+nres, iret)
+        else
          call xdrfint(ixdrf, ihpb(j), iret)
          call xdrfint(ixdrf, jhpb(j), iret)
+        endif
        enddo
        call xdrfint(ixdrf, nfrag+npair+3*nfrag_back, iret)
        do i=1,nfrag
@@@ -80,9 -80,7 +80,9 @@@
        igeom=  8
        intin=  9
        ithep= 11
 +      ithep_pdb=51
        irotam=12
 +      irotam_pdb=52
        itorp= 13
        itordp= 23
        ielep= 14
@@@ -163,14 -161,10 +163,14 @@@ c      call memmon_print_usage(
        rr0(i)=0.0D0
        a0thet(i)=0.0D0
        do j=1,2
 -        athet(j,i)=0.0D0
 -        bthet(j,i)=0.0D0
 +         do ichir1=-1,1
 +          do ichir2=-1,1
 +          athet(j,i,ichir1,ichir2)=0.0D0
 +          bthet(j,i,ichir1,ichir2)=0.0D0
 +          enddo
 +         enddo
          enddo
 -      do j=0,3
 +        do j=0,3
          polthet(j,i)=0.0D0
          enddo
        do j=1,3
        enddo
        nlob(ntyp1)=0
        dsc(ntyp1)=0.0D0
 -      do i=1,maxtor
 -      itortyp(i)=0
 -      do j=1,maxtor
 -        do k=1,maxterm
 -          v1(k,j,i)=0.0D0
 -          v2(k,j,i)=0.0D0
 +      do i=-maxtor,maxtor
 +        itortyp(i)=0
 +cc      write (iout,*) "TU DOCHODZE",i,itortyp(i)
 +       do iblock=1,2
 +        do j=-maxtor,maxtor
 +          do k=1,maxterm
 +            v1(k,j,i,iblock)=0.0D0
 +            v2(k,j,i,iblock)=0.0D0
            enddo
          enddo
 +        enddo
        enddo
 +      do iblock=1,2
 +       do i=-maxtor,maxtor
 +        do j=-maxtor,maxtor
 +         do k=-maxtor,maxtor
 +          do l=1,maxtermd_1
 +            v1c(1,l,i,j,k,iblock)=0.0D0
 +            v1s(1,l,i,j,k,iblock)=0.0D0
 +            v1c(2,l,i,j,k,iblock)=0.0D0
 +            v1s(2,l,i,j,k,iblock)=0.0D0
 +          enddo !l
 +          do l=1,maxtermd_2
 +           do m=1,maxtermd_2
 +            v2c(m,l,i,j,k,iblock)=0.0D0
 +            v2s(m,l,i,j,k,iblock)=0.0D0
 +           enddo !m
 +          enddo !l
 +        enddo !k
 +       enddo !j
 +      enddo !i
 +      enddo !iblock
 +
        do i=1,maxres
        itype(i)=0
        itel(i)=0
@@@ -245,22 -215,6 +245,22 @@@ C Initialize the bridge array
        ihpb(i)=0
        jhpb(i)=0
        enddo
 +C Initialize correlation arrays
 +      do i=-maxtor,maxtor
 +       do k=1,2
 +        b1(k,i)=0.0
 +        b2(k,i)=0.0
 +        b1tilde(k,i)=0.0
 +c        b2tilde(k,i)=0.0
 +        do j=1,2
 +        CC(j,k,i)=0.0
 +        Ctilde(j,k,i)=0.0
 +        DD(j,k,i)=0.0
 +        Dtilde(j,k,i)=0.0
 +        EE(j,k,i)=0.0
 +        enddo
 +       enddo
 +      enddo
  C
  C Initialize timing.
  C
  C Initialize constants used to split the energy into long- and short-range
  C components
  C
 -      r_cut=2.0d0
 -      rlamb=0.3d0
 +C      r_cut=2.0d0
 +C      rlamb=0.3d0
  #ifndef SPLITELE
        nprint_ene=nprint_ene-1
  #endif
@@@ -297,17 -251,11 +297,17 @@@ c--------------------------------------
        include 'COMMON.NAMES'
        include 'COMMON.FFIELD'
        data restyp /
 +     &'DD','DAU','DAI','DDB','DSM','DPR','DLY','DAR','DHI','DAS','DGL',
 +     & 'DSG','DGN','DSN','DTH',
 +     &'DYY','DAL','DTY','DTR','DVA','DLE','DIL','DPN','MED','DCY','ZER',
       &'CYS','MET','PHE','ILE','LEU','VAL','TRP','TYR','ALA','GLY','THR',
 -     &'SER','GLN','ASN','GLU','ASP','HIS','ARG','LYS','PRO','D'/
 +     &'SER','GLN','ASN','GLU','ASP','HIS','ARG','LYS','PRO','SME','DBZ',
 +     &'AIB','ABU','D'/
        data onelet /
 +     &'z','z','z','z','z','p','k','r','h','d','e','n','q','s','t','g',
 +     &'a','y','w','v','l','i','f','m','c','x',
       &'C','M','F','I','L','V','W','Y','A','G','T',
 -     &'S','Q','N','E','D','H','R','K','P','X'/
 +     &'S','Q','N','E','D','H','R','K','P','z','z','z','z','X'/
        data potname /'LJ','LJK','BP','GB','GBV'/
        data ename /
       &   "EVDW SC-SC","EVDW2 SC-p","EES p-p","ECORR4 ","ECORR5 ",
@@@ -393,6 -341,7 +393,7 @@@ cd    write (iout,*) 'ns=',ns,' nss=',n
  cd   &   (ihpb(i),jhpb(i),i=1,nss)
        do i=nnt,nct-1
          scheck=.false.
+         if (dyn_ss) goto 10
          do ii=1,nss
            if (ihpb(ii).eq.i+nres) then
              scheck=.true.
@@@ -612,9 -561,6 +613,9 @@@ C Partition local interaction
        iphi_end=iturn3_end+2
        iturn3_start=iturn3_start-1
        iturn3_end=iturn3_end-1
 +      call int_bounds(nres-3,itau_start,itau_end)
 +      itau_start=itau_start+3
 +      itau_end=itau_end+3
        call int_bounds(nres-3,iphi1_start,iphi1_end)
        iphi1_start=iphi1_start+3
        iphi1_end=iphi1_end+3
@@@ -1143,8 -1089,6 +1144,8 @@@ c        write (iout,*) "MPI_ROTAT2",MP
        idihconstr_end=ndih_constr
        iphid_start=iphi_start
        iphid_end=iphi_end-1
 +      itau_start=4
 +      itau_end=nres
        ibond_start=2
        ibond_end=nres-1
        ibondp_start=nnt
@@@ -8,7 -8,6 +8,7 @@@
        include 'COMMON.CONTROL'
        include 'COMMON.SBRIDGE'
        include 'COMMON.IOUNITS'
 +      include 'COMMON.SPLITELE'
        logical file_exist
  C Read force-field parameters except weights
        call parmread
@@@ -80,7 -79,6 +80,7 @@@
        include 'COMMON.FFIELD'
        include 'COMMON.INTERACT'
        include 'COMMON.SETUP'
 +      include 'COMMON.SPLITELE'
        COMMON /MACHSW/ KDIAG,ICORFL,IXDR
        character*8 diagmeth(0:3) /'Library','EVVRSP','Givens','Jacobi'/
        character*80 ucase
@@@ -215,15 -213,7 +215,15 @@@ cfmc        modecalc=1
        i2ndstr=index(controlcard,'USE_SEC_PRED')
        gradout=index(controlcard,'GRADOUT').gt.0
        gnorm_check=index(controlcard,'GNORM_CHECK').gt.0
 +C  DISTCHAINMAX become obsolete for periodic boundry condition
        call reada(controlcard,'DISTCHAINMAX',distchainmax,5.0d0)
 +C Reading the dimensions of box in x,y,z coordinates
 +      call reada(controlcard,'BOXX',boxxsize,100.0d0)
 +      call reada(controlcard,'BOXY',boxysize,100.0d0)
 +      call reada(controlcard,'BOXZ',boxzsize,100.0d0)
 +c Cutoff range for interactions
 +      call reada(controlcard,"R_CUT",r_cut,15.0d0)
 +      call reada(controlcard,"LAMBDA",rlamb,0.3d0)
        if (me.eq.king .or. .not.out1file ) 
       &  write (iout,*) "DISTCHAINMAX",distchainmax
        
@@@ -305,11 -295,11 +305,11 @@@ cd       endi
            do i=1,nrep
             iremd_m_total=iremd_m_total+remd_m(i)
            enddo
-           write (iout,*) 'Total number of replicas ',iremd_m_total
+            write (iout,*) 'Total number of replicas ',iremd_m_total
+           endif
           endif
-       endif
        if(me.eq.king.or..not.out1file) 
-      & write (iout,'(/30(1h=),a,29(1h=)/)') " End of REMD run setup "
+      &   write (iout,'(/30(1h=),a,29(1h=)/)') " End of REMD run setup "
        return
        end
  c--------------------------------------------------------------------------
        ntime_split0=ntime_split
        call readi(controlcard,"MAXTIME_SPLIT",maxtime_split,64)
        ntime_split0=ntime_split
 -      call reada(controlcard,"R_CUT",r_cut,2.0d0)
 -      call reada(controlcard,"LAMBDA",rlamb,0.3d0)
 +c      call reada(controlcard,"R_CUT",r_cut,2.0d0)
 +c      call reada(controlcard,"LAMBDA",rlamb,0.3d0)
        rest = index(controlcard,"REST").gt.0
        tbf = index(controlcard,"TBF").gt.0
        usampl = index(controlcard,"USAMPL").gt.0
        mdpdb = index(controlcard,"MDPDB").gt.0
        call reada(controlcard,"T_BATH",t_bath,300.0d0)
        call reada(controlcard,"TAU_BATH",tau_bath,1.0d-1) 
  C Body
  C
  C Read weights of the subsequent energy terms.
-       call card_concat(weightcard)
-       call reada(weightcard,'WLONG',wlong,1.0D0)
-       call reada(weightcard,'WSC',wsc,wlong)
-       call reada(weightcard,'WSCP',wscp,wlong)
-       call reada(weightcard,'WELEC',welec,1.0D0)
-       call reada(weightcard,'WVDWPP',wvdwpp,welec)
-       call reada(weightcard,'WEL_LOC',wel_loc,1.0D0)
-       call reada(weightcard,'WCORR4',wcorr4,0.0D0)
-       call reada(weightcard,'WCORR5',wcorr5,0.0D0)
-       call reada(weightcard,'WCORR6',wcorr6,0.0D0)
-       call reada(weightcard,'WTURN3',wturn3,1.0D0)
-       call reada(weightcard,'WTURN4',wturn4,1.0D0)
-       call reada(weightcard,'WTURN6',wturn6,1.0D0)
-       call reada(weightcard,'WSCCOR',wsccor,1.0D0)
-       call reada(weightcard,'WSTRAIN',wstrain,1.0D0)
-       call reada(weightcard,'WBOND',wbond,1.0D0)
-       call reada(weightcard,'WTOR',wtor,1.0D0)
-       call reada(weightcard,'WTORD',wtor_d,1.0D0)
-       call reada(weightcard,'WANG',wang,1.0D0)
-       call reada(weightcard,'WSCLOC',wscloc,1.0D0)
-       call reada(weightcard,'SCAL14',scal14,0.4D0)
-       call reada(weightcard,'SCALSCP',scalscp,1.0d0)
-       call reada(weightcard,'CUTOFF',cutoff_corr,7.0d0)
-       call reada(weightcard,'DELT_CORR',delt_corr,0.5d0)
-       call reada(weightcard,'TEMP0',temp0,300.0d0)
-       if (index(weightcard,'SOFT').gt.0) ipot=6
+        call card_concat(weightcard)
+        call reada(weightcard,'WLONG',wlong,1.0D0)
+        call reada(weightcard,'WSC',wsc,wlong)
+        call reada(weightcard,'WSCP',wscp,wlong)
+        call reada(weightcard,'WELEC',welec,1.0D0)
+        call reada(weightcard,'WVDWPP',wvdwpp,welec)
+        call reada(weightcard,'WEL_LOC',wel_loc,1.0D0)
+        call reada(weightcard,'WCORR4',wcorr4,0.0D0)
+        call reada(weightcard,'WCORR5',wcorr5,0.0D0)
+        call reada(weightcard,'WCORR6',wcorr6,0.0D0)
+        call reada(weightcard,'WTURN3',wturn3,1.0D0)
+        call reada(weightcard,'WTURN4',wturn4,1.0D0)
+        call reada(weightcard,'WTURN6',wturn6,1.0D0)
+        call reada(weightcard,'WSCCOR',wsccor,1.0D0)
+        call reada(weightcard,'WSTRAIN',wstrain,1.0D0)
+        call reada(weightcard,'WBOND',wbond,1.0D0)
+        call reada(weightcard,'WTOR',wtor,1.0D0)
+        call reada(weightcard,'WTORD',wtor_d,1.0D0)
+        call reada(weightcard,'WANG',wang,1.0D0)
+        call reada(weightcard,'WSCLOC',wscloc,1.0D0)
+        call reada(weightcard,'SCAL14',scal14,0.4D0)
+        call reada(weightcard,'SCALSCP',scalscp,1.0d0)
+        call reada(weightcard,'CUTOFF',cutoff_corr,7.0d0)
+        call reada(weightcard,'DELT_CORR',delt_corr,0.5d0)
+        call reada(weightcard,'TEMP0',temp0,300.0d0)
+        if (index(weightcard,'SOFT').gt.0) ipot=6
  C 12/1/95 Added weight for the multi-body term WCORR
-       call reada(weightcard,'WCORRH',wcorr,1.0D0)
-       if (wcorr4.gt.0.0d0) wcorr=wcorr4
-       weights(1)=wsc
-       weights(2)=wscp
-       weights(3)=welec
-       weights(4)=wcorr
-       weights(5)=wcorr5
-       weights(6)=wcorr6
-       weights(7)=wel_loc
-       weights(8)=wturn3
-       weights(9)=wturn4
-       weights(10)=wturn6
-       weights(11)=wang
-       weights(12)=wscloc
-       weights(13)=wtor
-       weights(14)=wtor_d
-       weights(15)=wstrain
-       weights(16)=wvdwpp
-       weights(17)=wbond
-       weights(18)=scal14
-       weights(21)=wsccor
+        call reada(weightcard,'WCORRH',wcorr,1.0D0)
+        if (wcorr4.gt.0.0d0) wcorr=wcorr4
+        weights(1)=wsc
+        weights(2)=wscp
+        weights(3)=welec
+        weights(4)=wcorr
+        weights(5)=wcorr5
+        weights(6)=wcorr6
+        weights(7)=wel_loc
+        weights(8)=wturn3
+        weights(9)=wturn4
+        weights(10)=wturn6
+        weights(11)=wang
+        weights(12)=wscloc
+        weights(13)=wtor
+        weights(14)=wtor_d
+        weights(15)=wstrain
+        weights(16)=wvdwpp
+        weights(17)=wbond
+        weights(18)=scal14
+        weights(21)=wsccor
        if(me.eq.king.or..not.out1file)
       & write (iout,10) wsc,wscp,welec,wvdwpp,wbond,wang,wscloc,wtor,
       &  wtor_d,wstrain,wel_loc,wcorr,wcorr5,wcorr6,wsccor,wturn3,
       &  'General scaling factor of SC-p interactions:',scalscp
        endif
        r0_corr=cutoff_corr-delt_corr
 -      do i=1,20
 +      do i=1,ntyp
          aad(i,1)=scalscp*aad(i,1)
          aad(i,2)=scalscp*aad(i,2)
          bad(i,1)=scalscp*bad(i,1)
        call reada(weightcard,"V2SS",v2ss,7.61d0)
        call reada(weightcard,"V3SS",v3ss,13.7d0)
        call reada(weightcard,"EBR",ebr,-5.50D0)
+       dyn_ss=(index(weightcard,'DYN_SS').gt.0)
+       do i=1,maxres
+         dyn_ss_mask(i)=.false.
+       enddo
+       do i=1,maxres-1
+         do j=i+1,maxres
+           dyn_ssbond_ij(i,j)=1.0d300
+         enddo
+       enddo
+       call reada(weightcard,"HT",Ht,0.0D0)
+       if (dyn_ss) then
+         ss_depth=ebr/wsc-0.25*eps(1,1)
+         Ht=Ht/wsc-0.25*eps(1,1)
+         akcm=akcm*wstrain/wsc
+         akth=akth*wstrain/wsc
+         akct=akct*wstrain/wsc
+         v1ss=v1ss*wstrain/wsc
+         v2ss=v2ss*wstrain/wsc
+         v3ss=v3ss*wstrain/wsc
+       else
+         ss_depth=ebr/wstrain-0.25*eps(1,1)*wsc/wstrain
+       endif
        if(me.eq.king.or..not.out1file) then
         write (iout,*) "Parameters of the SS-bond potential:"
         write (iout,*) "D0CM",d0cm," AKCM",akcm," AKTH",akth,
       & " AKCT",akct
         write (iout,*) "V1SS",v1ss," V2SS",v2ss," V3SS",v3ss
-        write (iout,*) "EBR",ebr
- c       print *,'indpdb=',indpdb,' pdbref=',pdbref
+        write (iout,*) "EBR",ebr," SS_DEPTH",ss_depth
+        write (iout,*)" HT",Ht
+        print *,'indpdb=',indpdb,' pdbref=',pdbref
        endif
        if (indpdb.gt.0 .or. pdbref) then
          read(inp,'(a)') pdbfile
@@@ -727,7 -742,7 +752,7 @@@ c        print *,'Finished reading pdb 
           maxsi=1000
           do i=2,nres-1
            iti=itype(i)
 -          if (iti.ne.10 .and. itype(i).ne.21) then
 +          if (iti.ne.10 .and. itype(i).ne.ntyp1) then
              nsi=0
              fail=.true.
              do while (fail.and.nsi.le.maxsi)
@@@ -759,8 -774,8 +784,8 @@@ C Assign initial virtual bond length
            vbld_inv(i)=vblinv
          enddo
          do i=2,nres-1
 -          vbld(i+nres)=dsc(itype(i))
 -          vbld_inv(i+nres)=dsc_inv(itype(i))
 +          vbld(i+nres)=dsc(iabs(itype(i)))
 +          vbld_inv(i+nres)=dsc_inv(iabs(itype(i)))
  c          write (iout,*) "i",i," itype",itype(i),
  c     &      " dsc",dsc(itype(i))," vbld",vbld(i),vbld(i+nres)
          enddo
@@@ -769,15 -784,15 +794,15 @@@ c      print *,nre
  c      print '(20i4)',(itype(i),i=1,nres)
        do i=1,nres
  #ifdef PROCOR
 -        if (itype(i).eq.21 .or. itype(i+1).eq.21) then
 +        if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) then
  #else
 -        if (itype(i).eq.21) then
 +        if (itype(i).eq.ntyp1) then
  #endif
            itel(i)=0
  #ifdef PROCOR
 -        else if (itype(i+1).ne.20) then
 +        else if (iabs(itype(i+1)).ne.20) then
  #else
 -        else if (itype(i).ne.20) then
 +        else if (iabs(itype(i)).ne.20) then
  #endif
          itel(i)=1
          else
@@@ -834,8 -849,8 +859,8 @@@ C 8/13/98 Set limits to generating the 
  #endif
        nct=nres
  cd      print *,'NNT=',NNT,' NCT=',NCT
 -      if (itype(1).eq.21) nnt=2
 -      if (itype(nres).eq.21) nct=nct-1
 +      if (itype(1).eq.ntyp1) nnt=2
 +      if (itype(nres).eq.ntyp1) nct=nct-1
        if (pdbref) then
          if(me.eq.king.or..not.out1file)
       &   write (iout,'(a,i3)') 'nsup=',nsup
@@@ -952,7 -967,7 +977,7 @@@ C initial geometry
                enddo
              enddo
              do i=nnt,nct
 -              if (itype(i).ne.10 .and. itype(i).ne.21) then
 +              if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
                  do j=1,3
                    dc(j,i+nres)=c(j,i+nres)-c(j,i) 
                    dc_norm(j,i+nres)=dc_norm(j,i+nres)*vbld_inv(i+nres)
           enddo
           do i=2,nres-1
            omeg(i)=-120d0*deg2rad
 +          if (itype(i).le.0) omeg(i)=-omeg(i)
           enddo
          else
            if(me.eq.king.or..not.out1file)
     40       continue
            endif
  #else
-           do itrial=1,100
-             itmp=1
-             call gen_rand_conf(itmp,*30)
-             goto 40
-    30       write (iout,*) 'Failed to generate random conformation',
-      &        ', itrial=',itrial
-             write (*,*) 'Failed to generate random conformation',
-      &        ', itrial=',itrial
-           enddo
-           write (iout,'(a,i3,a)') 'Processor:',me,
-      &      ' error in generating random conformation.'
-           write (*,'(a,i3,a)') 'Processor:',me,
+           write (*,'(a)') 
       &      ' error in generating random conformation.'
            stop
     40     continue
@@@ -1065,18 -1068,35 +1079,35 @@@ C Generate distance constraints, if th
          write (iout,'(/a,i3,a)') 
       &  'The chain contains',ns,' disulfide-bridging cysteines.'
          write (iout,'(20i4)') (iss(i),i=1,ns)
+        if (dyn_ss) then
+           write(iout,*)"Running with dynamic disulfide-bond formation"
+        else
          write (iout,'(/a/)') 'Pre-formed links are:' 
        do i=1,nss
          i1=ihpb(i)-nres
          i2=jhpb(i)-nres
          it1=itype(i1)
          it2=itype(i2)
-         if (me.eq.king.or..not.out1file)
-      &    write (iout,'(2a,i3,3a,i3,a,3f10.3)')
+           write (iout,'(2a,i3,3a,i3,a,3f10.3)')
       &    restyp(it1),'(',i1,') -- ',restyp(it2),'(',i2,')',dhpb(i),
       &    ebr,forcon(i)
        enddo
        write (iout,'(a)')
+        endif
+       endif
+       if (ns.gt.0.and.dyn_ss) then
+           do i=nss+1,nhpb
+             ihpb(i-nss)=ihpb(i)
+             jhpb(i-nss)=jhpb(i)
+             forcon(i-nss)=forcon(i)
+             dhpb(i-nss)=dhpb(i)
+           enddo
+           nhpb=nhpb-nss
+           nss=0
+           call hpb_partition
+           do i=1,ns
+             dyn_ss_mask(iss(i))=.true.
+           enddo
        endif
        if (i2ndstr.gt.0) call secstrp2dihc
  c      call geom_to_var(nvar,x)
@@@ -1133,17 -1153,19 +1164,19 @@@ C Read information about disulfide brid
        include 'COMMON.SETUP'
  C Read bridging residues.
        read (inp,*) ns,(iss(i),i=1,ns)
- c      print *,'ns=',ns
+       print *,'ns=',ns
        if(me.eq.king.or..not.out1file)
       &  write (iout,*) 'ns=',ns,' iss:',(iss(i),i=1,ns)
  C Check whether the specified bridging residues are cystines.
        do i=1,ns
        if (itype(iss(i)).ne.1) then
          if (me.eq.king.or..not.out1file) write (iout,'(2a,i3,a)') 
-      &   'Do you REALLY think that the residue ',restyp(iss(i)),i,
+      &   'Do you REALLY think that the residue ',
+      &    restyp(itype(iss(i))),i,
       &   ' can form a disulfide bridge?!!!'
          write (*,'(2a,i3,a)') 
-      &   'Do you REALLY think that the residue ',restyp(iss(i)),i,
+      &   'Do you REALLY think that the residue ',
+      &    restyp(itype(iss(i))),i,
       &   ' can form a disulfide bridge?!!!'
  #ifdef MPI
         call MPI_Finalize(MPI_COMM_WORLD,ierror)
  C Read preformed bridges.
        if (ns.gt.0) then
        read (inp,*) nss,(ihpb(i),jhpb(i),i=1,nss)
-       write (iout,*) 'nss=',nss,' ihpb,jhpb: ',(ihpb(i),jhpb(i),i=1,nss)
+       if(fg_rank.eq.0)
+      & write(iout,*)'nss=',nss,' ihpb,jhpb: ',(ihpb(i),jhpb(i),i=1,nss)
        if (nss.gt.0) then
          nhpb=nss
  C Check if the residues involved in bridges are in the specified list of
          enddo
        enddo
        do i=nnt,nct
 -        if (itype(i).ne.10 .and. itype(i).ne.21) then
 +        if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
            do j=1,3
              dc(j,i+nres)=c(j,i+nres)-c(j,i)
              dc_norm(j,i+nres)=dc(j,i+nres)*vbld_inv(i+nres)
@@@ -1302,7 -1325,7 +1336,7 @@@ C Set up variable list
        nvar=ntheta+nphi
        nside=0
        do i=2,nres-1
 -        if (itype(i).ne.10 .and. itype(i).ne.21) then
 +        if (itype(i).ne.10 .and. itype(i).ne.ntyp1) then
          nside=nside+1
            ialph(i,1)=nvar+nside
          ialph(nside,2)=i
@@@ -1926,22 -1949,12 +1960,22 @@@ C Get parameter filenames and open the 
        open (itordp,file=tordname,status='old',readonly)
        call getenv_loc('SCCORPAR',sccorname)
        open (isccor,file=sccorname,status='old',readonly)
 +#ifndef CRYST_THETA
 +      call getenv_loc('THETPARPDB',thetname_pdb)
 +      print *,"thetname_pdb ",thetname_pdb
 +      open (ithep_pdb,file=thetname_pdb,status='old',action='read')
 +      print *,ithep_pdb," opened"
 +#endif
        call getenv_loc('FOURIER',fouriername)
        open (ifourier,file=fouriername,status='old',readonly)
        call getenv_loc('ELEPAR',elename)
        open (ielep,file=elename,status='old',readonly)
        call getenv_loc('SIDEPAR',sidename)
        open (isidep,file=sidename,status='old',readonly)
 +#ifndef CRYST_SC
 +      call getenv_loc('ROTPARPDB',rotname_pdb)
 +      open (irotam_pdb,file=rotname_pdb,status='old',action='read')
 +#endif
  #endif
  #ifndef OLDSCP
  C
@@@ -2012,7 -2025,7 +2046,7 @@@ c      print *,"Processor",myrank," fg_
        mol2name=prefix(:lenpre)//'_'//pot(:lenpot)//'.mol2'
        statname=prefix(:lenpre)//'_'//pot(:lenpot)//'.stat'
        if (lentmp.gt.0)
-      &  call copy_to_tmp(pref_orig(:ile(pref_orig))//'_'//pot(:lenpot)//
+      &  call copy_to_tmp(pref_orig(:ilen(pref_orig))//'_'//pot(:lenpot)
       &    //'.stat')
        rest2name=prefix(:ilen(prefix))//'.rst'
        if(usampl) then 
@@@ -2103,8 -2116,6 +2137,8 @@@ C Write file name
       &  thetname(:ilen(thetname))
        write (iout,*) "Rotamer parameter file          : ",
       &  rotname(:ilen(rotname))
 +      write (iout,*) "Thetpdb parameter file          : ",
 +     &  thetname_pdb(:ilen(thetname_pdb))
        write (iout,*) "Threading database              : ",
       &  patname(:ilen(patname))
        if (lentmp.ne.0) 
@@@ -2246,11 -2257,11 +2280,11 @@@ c        write (iout,*) i,ifrag_(1,i),i
  c            write (iout,*) "j",j," k",k
              ddjk=dist(j,k)
              if (constr_dist.eq.1) then
-               nhpb=nhpb+1
-               ihpb(nhpb)=j
-               jhpb(nhpb)=k
+             nhpb=nhpb+1
+             ihpb(nhpb)=j
+             jhpb(nhpb)=k
                dhpb(nhpb)=ddjk
-               forcon(nhpb)=wfrag_(i) 
+             forcon(nhpb)=wfrag_(i) 
              else if (constr_dist.eq.2) then
                if (ddjk.le.dist_cut) then
                  nhpb=nhpb+1
  #endif
        if (OKRandom) then
  c        r1 = prng_next(me)
-          r1=ran_number(0.0D0,1.0D0)
+         r1=ran_number(0.0D0,1.0D0)
          if(me.eq.king)
       &   write (iout,*) 'ran_num',r1
          if (r1.lt.0.0d0) OKRandom=.false.
@@@ -15,7 -15,9 +15,9 @@@ crc      implicit non
  c     Includes
        implicit real*8 (a-h,o-z)
        include 'DIMENSIONS'
+ #ifdef MPI
        include 'mpif.h'
+ #endif
        include 'COMMON.GEO'
        include 'COMMON.VAR'
        include 'COMMON.HEADER'
@@@ -211,7 -213,7 +213,7 @@@ c     Define what is meant by "neighbou
  
  c     Don't do glycine or ends
        i=itype(res_pick)
 -      if (i.eq.10 .or. i.eq.21) return
 +      if (i.eq.10 .or. i.eq.ntyp1) return
  
  c     Freeze everything (later will relax only selected side-chains)
        mask_r=.true.
@@@ -253,7 -255,7 +255,7 @@@ cd      print *,'new       ',(energy(k)
        n_try=0
        do while (n_try.lt.n_maxtry .and. orig_e-cur_e.lt.e_drop)
  c     Move the selected residue (don't worry if it fails)
 -        call gen_side(itype(res_pick),theta(res_pick+1),
 +        call gen_side(iabs(itype(res_pick)),theta(res_pick+1),
       +       alph(res_pick),omeg(res_pick),fail)
  
  c     Minimize the side-chains starting from the new arrangement
@@@ -717,8 -719,8 +719,8 @@@ c     if (icall.eq.0) lprn=.true
        do i=iatsc_s,iatsc_e
  
  
 -        itypi=itype(i)
 -        itypi1=itype(i+1)
 +        itypi=iabs(itype(i))
 +        itypi1=iabs(itype(i+1))
          xi=c(1,nres+i)
          yi=c(2,nres+i)
          zi=c(3,nres+i)
            do j=istart(i,iint),iend(i,iint)
            IF (mask_side(j).eq.1.or.mask_side(i).eq.1) THEN
              ind=ind+1
 -            itypj=itype(j)
 +            itypj=iabs(itype(j))
              dscj_inv=dsc_inv(itypj)
              sig0ij=sigma(itypi,itypj)
              chi1=chi(itypi,itypj)
@@@ -103,7 -103,12 +103,12 @@@ C Fine-grain slaves just do energy and 
        else if (modecalc.eq.12) then
          call exec_MD
        else if (modecalc.eq.14) then
+ #ifdef MPI
          call exec_MREMD
+ #else
+         write (iout,*) "Need a parallel version to run MREMD."
+         stop
+ #endif
        else
          write (iout,'(a)') 'This calculation type is not supported',
       &   ModeCalc
@@@ -139,6 -144,7 +144,7 @@@ c--------------------------------------
        return
        end
  c---------------------------------------------------------------------------
+ #ifdef MPI
        subroutine exec_MREMD
        include 'DIMENSIONS'
  #ifdef MPI
        endif
        return
        end
+ #endif
  c---------------------------------------------------------------------------
        subroutine exec_eeval_or_minim
        implicit real*8 (a-h,o-z)
        double precision energy(0:n_ene)
        double precision energy_long(0:n_ene),energy_short(0:n_ene)
        double precision varia(maxvar)
++<<<<<<< HEAD
 +      if (indpdb.eq.0)     call chainbuild
 +      time00=MPI_Wtime()
 +      print *,'dc',c(1,1)
 +      if (indpdb.ne.0) then
 +      dc(1,0)=c(1,1)
 +      dc(2,0)=c(2,1)
 +      dc(3,0)=c(3,1)
 +      endif
++=======
+       if (indpdb.eq.0) call chainbuild
+ #ifdef MPI
+       time00=MPI_Wtime()
+ #else
+       time00=tcpu()
+ #endif
++>>>>>>> f5379d3246c4bd95e946c4d35d4a1c13e329c4cb
        call chainbuild_cart
 +      print *,'dc',dc(1,0),dc(2,0),dc(3,0)
        if (split_ene) then
         print *,"Processor",myrank," after chainbuild"
         icall=1
         call enerprint(energy(0))
        endif
        call etotal(energy(0))
+ #ifdef MPI
        time_ene=MPI_Wtime()-time00
+ #else 
+       time_ene=tcpu()-time00
+ #endif
        write (iout,*) "Time for energy evaluation",time_ene
        print *,"after etotal"
        etota = energy(0)
        etot =etota
        call enerprint(energy(0))
        call hairpin(.true.,nharp,iharp)
 +        print *,'after hairpin'
        call secondary2(.true.)
 +        print *,'after secondary'
        if (minim) then
  crc overlap test
          if (overlapsc) then 
  
          if (dccart) then
            print *, 'Calling MINIM_DC'
+ #ifdef MPI
            time1=MPI_WTIME()
+ #else
+           time1=tcpu()
+ #endif
            call minim_dc(etot,iretcode,nfun)
          else
            if (indpdb.ne.0) then 
            endif
            call geom_to_var(nvar,varia)
            print *,'Calling MINIMIZE.'
+ #ifdef MPI
            time1=MPI_WTIME()
+ #else
+           time1=tcpu()
+ #endif
            call minimize(etot,varia,iretcode,nfun)
          endif
          print *,'SUMSL return code is',iretcode,' eval ',nfun
+ #ifdef MPI
          evals=nfun/(MPI_WTIME()-time1)
+ #else
+         evals=nfun/(tcpu()-time1)
+ #endif
          print *,'# eval/s',evals
          print *,'refstr=',refstr
 -        call hairpin(.true.,nharp,iharp)
 +        call hairpin(.false.,nharp,iharp)
 +        print *,'after hairpin'
          call secondary2(.true.)
 +        print *,'after secondary'
          call etotal(energy(0))
          etot = energy(0)
          call enerprint(energy(0))
@@@ -622,7 -638,7 +654,7 @@@ c Broadcast the order to compute intern
        endif
        do while (.not. eof)
            if (read_cart) then
-             read (intin,'(e15.10,e15.5)',end=1100,err=1100) time,ene
+             read (intin,'(e15.10,e15.5)',end=11,err=11) time,ene
              call read_x(intin,*11)
  #ifdef MPI
  c Broadcast the order to compute internal coordinates to the slaves.
  #endif
              call int_from_cart1(.false.)
            else
-             read (intin,'(i5)',end=1100,err=1100) iconf
+             read (intin,'(i5)',end=11,err=11) iconf
              call read_angles(intin,*11)
              call geom_to_var(nvar,varia)
              call chainbuild
@@@ -59,6 -59,7 +59,7 @@@ set(UNRES_MD_SRC
        parmread.F 
        pinorm.f 
        printmat.f 
+       prng_32.F
        q_measure.F 
        randgens.f 
        rattle.F 
        ssMD.F
  )
  
- if(Fortran_COMPILER_NAME STREQUAL "ifort")
-   set(UNRES_MD_SRC0 ${UNRES_MD_SRC0} prng.f ) 
- elseif(Fortran_COMPILER_NAME STREQUAL "mpif90")
-   set(UNRES_MD_SRC0 ${UNRES_MD_SRC0} prng.f )
- elseif(Fortran_COMPILER_NAME STREQUAL "f95")
-   set(UNRES_MD_SRC0 ${UNRES_MD_SRC0} prng.f )
- elseif(Fortran_COMPILER_NAME STREQUAL "gfortran")
-   set(UNRES_MD_SRC0 ${UNRES_MD_SRC0} prng.f )
- else()
-   set(UNRES_MD_SRC0 ${UNRES_MD_SRC0} prng_32.F )
- endif (Fortran_COMPILER_NAME STREQUAL "ifort")
  set(UNRES_MD_SRC3 
        energy_p_new_barrier.F 
        energy_p_new-sep_barrier.F 
@@@ -124,6 -112,7 +112,7 @@@ set(UNRES_MD_PP_SR
        MP.F 
        MREMD.F 
        parmread.F 
+       prng_32.F
        q_measure1.F 
        q_measure3.F 
        q_measure.F
        proc_proc.c 
  ) 
  
- if(NOT Fortran_COMPILER_NAME STREQUAL "ifort")
-   set(UNRES_MD_PP_SRC ${UNRES_MD_PP_SRC} prng_32.F) 
- endif(NOT Fortran_COMPILER_NAME STREQUAL "ifort")
  #================================================
  # Set comipiler flags for different sourcefiles  
  #================================================
@@@ -161,20 -145,15 +145,20 @@@ elseif (Fortran_COMPILER_NAME STREQUAL 
    set(FFLAGS2 "-std=legacy -I. ")
    #set(FFLAGS3 "-c -w -O3 -ipo -ipo_obj -opt_report" )
    set(FFLAGS3 "-std=legacy -I. " )
 +elseif (Fortran_COMPILER_NAME STREQUAL "g77")
 +  set(FFLAGS0 "-I ${CMAKE_CURRENT_SOURCE_DIR} " ) 
 +  set(FFLAGS1 "-g -I ${CMAKE_CURRENT_SOURCE_DIR} " ) 
 +  set(FFLAGS2 "-I ${CMAKE_CURRENT_SOURCE_DIR} ")
 +  set(FFLAGS3 "-I ${CMAKE_CURRENT_SOURCE_DIR} " )
  endif (Fortran_COMPILER_NAME STREQUAL "ifort")
  
  
  # Add MPI compiler flags
  if(UNRES_WITH_MPI)
-   set(FFLAGS0 "${FFLAGS0} -I${MPIF_INCLUDE_DIRECTORIES}")
-   set(FFLAGS1 "${FFLAGS1} -I${MPIF_INCLUDE_DIRECTORIES}")
-   set(FFLAGS2 "${FFLAGS2} -I${MPIF_INCLUDE_DIRECTORIES}")
-   set(FFLAGS3 "${FFLAGS3} -I${MPIF_INCLUDE_DIRECTORIES}")
+   set(FFLAGS0 "${FFLAGS0} -I${MPI_Fortran_INCLUDE_PATH}")
+   set(FFLAGS1 "${FFLAGS1} -I${MPI_Fortran_INCLUDE_PATH}")
+   set(FFLAGS2 "${FFLAGS2} -I${MPI_Fortran_INCLUDE_PATH}")
+   set(FFLAGS3 "${FFLAGS3} -I${MPI_Fortran_INCLUDE_PATH}")
  endif(UNRES_WITH_MPI)
  
  set_property(SOURCE ${UNRES_MD_SRC0} APPEND PROPERTY COMPILE_FLAGS ${FFLAGS0} )
@@@ -187,14 -166,14 +171,14 @@@ set_property(SOURCE ${UNRES_MD_SRC3} PR
  #=========================================
  if(UNRES_MD_FF STREQUAL "GAB" )
    # set preprocesor flags   
 -  set(CPPFLAGS "PROCOR -DUNRES -DISNAN -DSPLITELE -DLANG0 -DCRYST_BOND -DCRYST_THETA -DCRYST_SC" )
 +  set(CPPFLAGS "PROCOR -DUNRES -DISNAN -DSPLITELE -DLANG0 -DCRYST_BOND -DCRYST_THETA -DCRYST_SC -DSCCORPDB" )
  
  #=========================================
  #  Settings for E0LL2Y force field
  #=========================================
  elseif(UNRES_MD_FF STREQUAL "E0LL2Y")
    # set preprocesor flags   
 -  set(CPPFLAGS "PROCOR -DUNRES -DISNAN -DSPLITELE -DLANG0" )
 +  set(CPPFLAGS "PROCOR -DUNRES -DISNAN -DSPLITELE -DLANG0 -DSCCORPDB" )
  endif(UNRES_MD_FF STREQUAL "GAB")
  
  #=========================================
@@@ -217,12 -196,6 +201,12 @@@ elseif (Fortran_COMPILER_NAME STREQUAL 
  elseif (Fortran_COMPILER_NAME STREQUAL "gfortran")
    # Add old gfortran flags
    set(CPPFLAGS "${CPPFLAGS} -DG77") 
 +elseif (Fortran_COMPILER_NAME STREQUAL "g77")
 +  # Add old gfortran flags
 +  set(CPPFLAGS "${CPPFLAGS} -DG77")
 +else(Fortran_COMPILER_NAME STREQUAL "ifort")
 +  # Default preprocessor flag
 +  set(CPPFLAGS "${CPPFLAGS} -DPGI")
  endif (Fortran_COMPILER_NAME STREQUAL "ifort")
  
  #=========================================
@@@ -233,6 -206,13 +217,13 @@@ if (UNRES_WITH_MPI
  endif(UNRES_WITH_MPI)
  
  #=========================================
+ # Add 64-bit specific preprocessor flags
+ #=========================================
+ if (architektura STREQUAL "64")
+   set(CPPFLAGS "${CPPFLAGS} -DAMD64")
+ endif (architektura STREQUAL "64")
+ #=========================================
  # Apply preprocesor flags to *.F files
  #=========================================
  set_property(SOURCE ${UNRES_MD_PP_SRC} PROPERTY COMPILE_DEFINITIONS ${CPPFLAGS} )  
  #========================================
  if(UNRES_WITH_MPI) 
    # binary with mpi
-   set(UNRES_BIN "unres_${Fortran_COMPILER_NAME}_MPICH_${UNRES_MD_FF}.exe")
+   set(UNRES_BIN "unresMD_${Fortran_COMPILER_NAME}_MPICH_${UNRES_MD_FF}.exe")
  else(UNRES_WITH_MPI)
    # binary without mpi
-   set(UNRES_BIN "unres_${Fortran_COMPILER_NAME}_single_${UNRES_MD_FF}.exe")
+   set(UNRES_BIN "unresMD_${Fortran_COMPILER_NAME}_single_${UNRES_MD_FF}.exe")
  endif(UNRES_WITH_MPI)  
  
  #=========================================
@@@ -292,7 -272,7 +283,7 @@@ set(UNRES_MD_SRCS ${UNRES_MD_SRC0} ${UN
  #=========================================
  add_executable(UNRES_BIN-MD ${UNRES_MD_SRCS} )
  set_target_properties(UNRES_BIN-MD PROPERTIES OUTPUT_NAME ${UNRES_BIN})
- #set_property(TARGET ${UNRES_BIN} PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/unres/MD )
+ set_property(TARGET UNRES_BIN-MD PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
  #add_dependencies (${UNRES_BIN} ${UNRES_XDRFLIB})
  
  
  #=========================================
  # link MPI library (libmpich.a)  
  if(UNRES_WITH_MPI)
-   target_link_libraries( UNRES_BIN-MD ${MPIF_LIBRARIES} )
+   target_link_libraries( UNRES_BIN-MD ${MPI_Fortran_LIBRARIES} )
  endif(UNRES_WITH_MPI)
  # link libxdrf.a 
  #message("UNRES_XDRFLIB=${UNRES_XDRFLIB}")
  target_link_libraries( UNRES_BIN-MD xdrf )
  
  #=========================================
+ # Install Path
+ #=========================================
+ install(TARGETS UNRES_BIN-MD DESTINATION ${CMAKE_INSTALL_PREFIX}) 
+ #=========================================
  # TESTS 
  #=========================================
  
@@@ -337,7 -322,7 +333,7 @@@ FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/
  export POT=GB
  export PREFIX=ala10
  #-----------------------------------------------------------------------------
- UNRES_BIN=./${UNRES_BIN}
+ UNRES_BIN=${CMAKE_BINARY_DIR}/bin/${UNRES_BIN}
  #-----------------------------------------------------------------------------
  DD=${CMAKE_SOURCE_DIR}/PARAM
  export BONDPAR=$DD/bond.parm
@@@ -2,17 -2,16 +2,17 @@@ cc Parameters of the SCCOR ter
        double precision v1sccor,v2sccor,vlor1sccor,
       &                 vlor2sccor,vlor3sccor,gloc_sc,
       &                 dcostau,dsintau,dtauangle,dcosomicron,
-      &                 domicron
+      &                 domicron,v0sccor
        integer nterm_sccor,isccortyp,nsccortyp,nlor_sccor
 -      common/sccor/v1sccor(maxterm_sccor,3,20,20),
 -     &    v2sccor(maxterm_sccor,3,20,20),
 +      common/sccor/v1sccor(maxterm_sccor,3,-ntyp:ntyp,-ntyp:ntyp),
 +     &    v2sccor(maxterm_sccor,3,-ntyp:ntyp,-ntyp:ntyp),
 +     &    v0sccor(maxterm_sccor,-ntyp:ntyp,-ntyp:ntyp),
 +     &    nterm_sccor(-ntyp:ntyp,-ntyp:ntyp),isccortyp(-ntyp:ntyp),
 +     &    nsccortyp,
 +     &    nlor_sccor(-ntyp:ntyp,-ntyp:ntyp),
       &    vlor1sccor(maxterm_sccor,20,20),
       &    vlor2sccor(maxterm_sccor,20,20),
       &    vlor3sccor(maxterm_sccor,20,20),gloc_sc(3,0:maxres2,10),
 -     &    v0sccor(ntyp,ntyp),
       &    dcostau(3,3,3,maxres2),dsintau(3,3,3,maxres2),
       &    dtauangle(3,3,3,maxres2),dcosomicron(3,3,3,maxres2),
 -     &    domicron(3,3,3,maxres2),
 -     &    nterm_sccor(ntyp,ntyp),isccortyp(ntyp),nsccortyp,
 -     &    nlor_sccor(ntyp,ntyp)
 +     &    domicron(3,3,3,maxres2)
          do iint=1,nint_gr(i)
            do j=istart(i,iint),iend(i,iint)
              ind=ind+1
 -            itypj=itype(j)
 +            itypj=iabs(itype(j))
  c            dscj_inv=dsc_inv(itypj)
              dscj_inv=vbld_inv(j+nres)
              chi1=chi(itypi,itypj)
                evdw=evdw+evdwij
                if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') 
       &                        'evdw',i,j,evdwij,' ss'
 +C triple bond artifac removal
 +             do k=j+1,iend(i,iint) 
 +C search over all next residues
 +              if (dyn_ss_mask(k)) then
 +C check if they are cysteins
 +C              write(iout,*) 'k=',k
 +              call triple_ssbond_ene(i,j,k,evdwij)
 +C call the energy function that removes the artifical triple disulfide
 +C bond the soubroutine is located in ssMD.F
 +              evdw=evdw+evdwij             
 +              if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)')
 +     &                        'evdw',i,j,evdwij,'tss'
 +              endif!dyn_ss_mask(k)
 +             enddo! k
              ELSE
 +C            cycle
              ind=ind+1
              itypj=itype(j)
  c            dscj_inv=dsc_inv(itypj)
@@@ -4584,18 -4569,6 +4584,18 @@@ c     write (*,'(a,i2)') 'EBEND ICG=',i
  C Zero the energy function and its derivative at 0 or pi.
          call splinthet(theta(i),0.5d0*delta,ss,ssd)
          it=itype(i-1)
 +        ichir1=isign(1,itype(i-2))
 +        ichir2=isign(1,itype(i))
 +         if (itype(i-2).eq.10) ichir1=isign(1,itype(i-1))
 +         if (itype(i).eq.10) ichir2=isign(1,itype(i-1))
 +         if (itype(i-1).eq.10) then
 +          itype1=isign(10,itype(i-2))
 +          ichir11=isign(1,itype(i-2))
 +          ichir12=isign(1,itype(i-2))
 +          itype2=isign(10,itype(i))
 +          ichir21=isign(1,itype(i))
 +          ichir22=isign(1,itype(i))
 +         endif
          if (i.gt.3) then
  #ifdef OSF
          phii=phi(i)
@@@ -4629,27 -4602,15 +4629,27 @@@ C dependent on the adjacent virtual-bon
  C In following comments this theta will be referred to as t_c.
          thet_pred_mean=0.0d0
          do k=1,2
 -          athetk=athet(k,it)
 -          bthetk=bthet(k,it)
 +            athetk=athet(k,it,ichir1,ichir2)
 +            bthetk=bthet(k,it,ichir1,ichir2)
 +          if (it.eq.10) then
 +             athetk=athet(k,itype1,ichir11,ichir12)
 +             bthetk=bthet(k,itype2,ichir21,ichir22)
 +          endif
            thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
          enddo
          dthett=thet_pred_mean*ssd
          thet_pred_mean=thet_pred_mean*ss+a0thet(it)
  C Derivatives of the "mean" values in gamma1 and gamma2.
 -        dthetg1=(-athet(1,it)*y(2)+athet(2,it)*y(1))*ss
 -        dthetg2=(-bthet(1,it)*z(2)+bthet(2,it)*z(1))*ss
 +        dthetg1=(-athet(1,it,ichir1,ichir2)*y(2)
 +     &+athet(2,it,ichir1,ichir2)*y(1))*ss
 +         dthetg2=(-bthet(1,it,ichir1,ichir2)*z(2)
 +     &          +bthet(2,it,ichir1,ichir2)*z(1))*ss
 +         if (it.eq.10) then
 +      dthetg1=(-athet(1,itype1,ichir11,ichir12)*y(2)
 +     &+athet(2,itype1,ichir11,ichir12)*y(1))*ss
 +        dthetg2=(-bthet(1,itype2,ichir21,ichir22)*z(2)
 +     &         +bthet(2,itype2,ichir21,ichir22)*z(1))*ss
 +         endif
          if (theta(i).gt.pi-delta) then
            call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
       &         E_tc0)
            enddo 
          endif
          if (i.lt.nres) then
 +
 +        if (iabs(itype(i+1)).eq.20) iblock=2
 +        if (iabs(itype(i+1)).ne.20) iblock=1
  #ifdef OSF
            phii1=phi(i+1)
            if (phii1.ne.phii1) phii1=150.0
              sinph2(k)=0.0d0
            enddo
          endif  
 -        ethetai=aa0thet(ityp1,ityp2,ityp3)
 +         ethetai=aa0thet(ityp1,ityp2,ityp3,iblock)
          do k=1,ndouble
            do l=1,k-1
              ccl=cosph1(l)*cosph2(k-l)
          enddo
          endif
          do k=1,ntheterm
 -          ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3)*sinkt(k)
 -          dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3)
 +          ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3,iblock)*sinkt(k)
 +          dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3,iblock)
       &      *coskt(k)
            if (lprn)
 -     &    write (iout,*) "k",k," aathet",aathet(k,ityp1,ityp2,ityp3),
 +     &    write (iout,*) "k",k,
 +     &    "aathet",aathet(k,ityp1,ityp2,ityp3,iblock),
       &     " ethetai",ethetai
          enddo
          if (lprn) then
          endif
          do m=1,ntheterm2
            do k=1,nsingle
 -            aux=bbthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)
 -     &         +ccthet(k,m,ityp1,ityp2,ityp3)*sinph1(k)
 -     &         +ddthet(k,m,ityp1,ityp2,ityp3)*cosph2(k)
 -     &         +eethet(k,m,ityp1,ityp2,ityp3)*sinph2(k)
 +            aux=bbthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)
 +     &         +ccthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k)
 +     &         +ddthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)
 +     &         +eethet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k)
              ethetai=ethetai+sinkt(m)*aux
              dethetai=dethetai+0.5d0*m*aux*coskt(m)
              dephii=dephii+k*sinkt(m)*(
 -     &          ccthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)-
 -     &          bbthet(k,m,ityp1,ityp2,ityp3)*sinph1(k))
 +     &          ccthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)-
 +     &          bbthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k))
              dephii1=dephii1+k*sinkt(m)*(
 -     &          eethet(k,m,ityp1,ityp2,ityp3)*cosph2(k)-
 -     &          ddthet(k,m,ityp1,ityp2,ityp3)*sinph2(k))
 +     &          eethet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)-
 +     &          ddthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k))
              if (lprn)
       &      write (iout,*) "m",m," k",k," bbthet",
 -     &         bbthet(k,m,ityp1,ityp2,ityp3)," ccthet",
 -     &         ccthet(k,m,ityp1,ityp2,ityp3)," ddthet",
 -     &         ddthet(k,m,ityp1,ityp2,ityp3)," eethet",
 -     &         eethet(k,m,ityp1,ityp2,ityp3)," ethetai",ethetai
 +     &         bbthet(k,m,ityp1,ityp2,ityp3,iblock)," ccthet",
 +     &         ccthet(k,m,ityp1,ityp2,ityp3,iblock)," ddthet",
 +     &         ddthet(k,m,ityp1,ityp2,ityp3,iblock)," eethet",
 +     &         eethet(k,m,ityp1,ityp2,ityp3,iblock)," ethetai",ethetai
            enddo
          enddo
          if (lprn)
          do m=1,ntheterm3
            do k=2,ndouble
              do l=1,k-1
 -              aux=ffthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
 -     &            ffthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l)+
 -     &            ggthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
 -     &            ggthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)
 +       aux=ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
 +     & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l)+
 +     & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
 +     & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)
 +
                ethetai=ethetai+sinkt(m)*aux
                dethetai=dethetai+0.5d0*m*coskt(m)*aux
                dephii=dephii+l*sinkt(m)*(
 -     &           -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)-
 -     &            ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
 -     &            ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
 -     &            ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
 +     & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)-
 +     &  ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
 +     &  ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
 +     &  ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
 +
                dephii1=dephii1+(k-l)*sinkt(m)*(
 -     &           -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
 -     &            ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
 -     &            ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)-
 -     &            ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
 +     &-ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
 +     & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
 +     & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)-
 +     & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
 +
                if (lprn) then
                write (iout,*) "m",m," k",k," l",l," ffthet",
 -     &            ffthet(l,k,m,ityp1,ityp2,ityp3),
 -     &            ffthet(k,l,m,ityp1,ityp2,ityp3)," ggthet",
 -     &            ggthet(l,k,m,ityp1,ityp2,ityp3),
 -     &            ggthet(k,l,m,ityp1,ityp2,ityp3)," ethetai",ethetai
 +     &            ffthet(l,k,m,ityp1,ityp2,ityp3,iblock),
 +     &            ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)," ggthet",
 +     &            ggthet(l,k,m,ityp1,ityp2,ityp3,iblock),
 +     &            ggthet(k,l,m,ityp1,ityp2,ityp3,iblock),
 +     &            " ethetai",ethetai
 +
                write (iout,*) cosph1ph2(l,k)*sinkt(m),
       &            cosph1ph2(k,l)*sinkt(m),
       &            sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
            enddo
          enddo
  10      continue
-         if (lprn1) write (iout,'(i2,3f8.1,9h ethetai ,f10.5)') 
-      &   i,theta(i)*rad2deg,phii*rad2deg,
+ c        lprn1=.true.
+         if (lprn1) write (iout,'(a4,i2,3f8.1,9h ethetai ,f10.5)') 
+      &  'ebe', i,theta(i)*rad2deg,phii*rad2deg,
       &   phii1*rad2deg,ethetai
+ c        lprn1=.false.
          etheta=etheta+ethetai
          if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
          if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
          cosfac=dsqrt(cosfac2)
          sinfac2=0.5d0/(1.0d0-costtab(i+1))
          sinfac=dsqrt(sinfac2)
 -        it=itype(i)
 +        it=iabs(itype(i))
          if (it.eq.10) goto 1
  c
  C  Compute the axes of tghe local cartesian coordinates system; store in
@@@ -5337,7 -5291,7 +5339,7 @@@ C     &   dc_norm(3,i+nres
            y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
          enddo
          do j = 1,3
 -          z_prime(j) = -uz(j,i-1)
 +          z_prime(j) = -uz(j,i-1)*dsign(1.0d0,dfloat(itype(i)))
          enddo     
  c       write (2,*) "i",i
  c       write (2,*) "x_prime",(x_prime(j),j=1,3)
  C Compute the energy of the ith side cbain
  C
  c        write (2,*) "xx",xx," yy",yy," zz",zz
 -        it=itype(i)
 +        it=iabs(itype(i))
          do j = 1,65
            x(j) = sc_parmin(j,it) 
          enddo
  Cc diagnostics - remove later
          xx1 = dcos(alph(2))
          yy1 = dsin(alph(2))*dcos(omeg(2))
 -        zz1 = -dsin(alph(2))*dsin(omeg(2))
 +        zz1 = -dsign(1.0, dfloat(itype(i)))*dsin(alph(2))*dsin(omeg(2))
          write(2,'(3f8.1,3f9.3,1x,3f9.3)') 
       &    alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
       &    xx1,yy1,zz1
@@@ -5547,10 -5501,8 +5549,10 @@@ c     &   (dC_norm(j,i-1),j=1,3)," vbld
           dZZ_Ci1(k)=0.0d0
           dZZ_Ci(k)=0.0d0
           do j=1,3
 -           dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)*dC_norm(j,i+nres)
 -           dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)*dC_norm(j,i+nres)
 +           dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)
 +     &     *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
 +           dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)
 +     &     *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
           enddo
            
           dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
@@@ -5835,22 -5787,15 +5837,22 @@@ C Set lprn=.true. for debuggin
  c     lprn=.true.
        etors=0.0D0
        do i=iphi_start,iphi_end
 -      etors_ii=0.0D0
 +        if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1 
 +     &       .or. itype(i).eq.ntyp1) cycle
 +        etors_ii=0.0D0
 +         if (iabs(itype(i)).eq.20) then
 +         iblock=2
 +         else
 +         iblock=1
 +         endif
          itori=itortyp(itype(i-2))
          itori1=itortyp(itype(i-1))
          phii=phi(i)
          gloci=0.0D0
  C Regular cosine and sine terms
 -        do j=1,nterm(itori,itori1)
 -          v1ij=v1(j,itori,itori1)
 -          v2ij=v2(j,itori,itori1)
 +        do j=1,nterm(itori,itori1,iblock)
 +          v1ij=v1(j,itori,itori1,iblock)
 +          v2ij=v2(j,itori,itori1,iblock)
            cosphi=dcos(j*phii)
            sinphi=dsin(j*phii)
            etors=etors+v1ij*cosphi+v2ij*sinphi
@@@ -5865,7 -5810,7 +5867,7 @@@ C          [v2 cos(phi/2)+v3 sin(phi/2)
  C
          cosphi=dcos(0.5d0*phii)
          sinphi=dsin(0.5d0*phii)
 -        do j=1,nlor(itori,itori1)
 +        do j=1,nlor(itori,itori1,iblock)
            vl1ij=vlor1(j,itori,itori1)
            vl2ij=vlor2(j,itori,itori1)
            vl3ij=vlor3(j,itori,itori1)
            gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
          enddo
  C Subtract the constant term
 -        etors=etors-v0(itori,itori1)
 +        etors=etors-v0(itori,itori1,iblock)
            if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
 -     &         'etor',i,etors_ii-v0(itori,itori1)
 +     &         'etor',i,etors_ii-v0(itori,itori1,iblock)
          if (lprn)
       &  write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
       &  restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
 -     &  (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
 +     &  (v1(j,itori,itori1,iblock),j=1,6),
 +     &  (v2(j,itori,itori1,iblock),j=1,6)
          gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
  c       write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
        enddo
@@@ -5936,10 -5880,7 +5938,10 @@@ C Set lprn=.true. for debuggin
        lprn=.false.
  c     lprn=.true.
        etors_d=0.0D0
 +c      write(iout,*) "a tu??"
        do i=iphid_start,iphid_end
 +        if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
 +     &      .or. itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
          itori=itortyp(itype(i-2))
          itori1=itortyp(itype(i-1))
          itori2=itortyp(itype(i))
          phii1=phi(i+1)
          gloci1=0.0D0
          gloci2=0.0D0
 -        do j=1,ntermd_1(itori,itori1,itori2)
 -          v1cij=v1c(1,j,itori,itori1,itori2)
 -          v1sij=v1s(1,j,itori,itori1,itori2)
 -          v2cij=v1c(2,j,itori,itori1,itori2)
 -          v2sij=v1s(2,j,itori,itori1,itori2)
 +        iblock=1
 +        if (iabs(itype(i+1)).eq.20) iblock=2
 +
 +C Regular cosine and sine terms
 +        do j=1,ntermd_1(itori,itori1,itori2,iblock)
 +          v1cij=v1c(1,j,itori,itori1,itori2,iblock)
 +          v1sij=v1s(1,j,itori,itori1,itori2,iblock)
 +          v2cij=v1c(2,j,itori,itori1,itori2,iblock)
 +          v2sij=v1s(2,j,itori,itori1,itori2,iblock)
            cosphi1=dcos(j*phii)
            sinphi1=dsin(j*phii)
            cosphi2=dcos(j*phii1)
            gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
            gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
          enddo
 -        do k=2,ntermd_2(itori,itori1,itori2)
 +        do k=2,ntermd_2(itori,itori1,itori2,iblock)
            do l=1,k-1
 -            v1cdij = v2c(k,l,itori,itori1,itori2)
 -            v2cdij = v2c(l,k,itori,itori1,itori2)
 -            v1sdij = v2s(k,l,itori,itori1,itori2)
 -            v2sdij = v2s(l,k,itori,itori1,itori2)
 +            v1cdij = v2c(k,l,itori,itori1,itori2,iblock)
 +            v2cdij = v2c(l,k,itori,itori1,itori2,iblock)
 +            v1sdij = v2s(k,l,itori,itori1,itori2,iblock)
 +            v2sdij = v2s(l,k,itori,itori1,itori2,iblock)
              cosphi1p2=dcos(l*phii+(k-l)*phii1)
              cosphi1m2=dcos(l*phii-(k-l)*phii1)
              sinphi1p2=dsin(l*phii+(k-l)*phii1)
          enddo
          gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*gloci1
          gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*gloci2
 -c        write (iout,*) "gloci", gloc(i-3,icg)
        enddo
        return
        end
@@@ -6015,11 -5953,10 +6017,11 @@@ c        amino-acid residues
  C Set lprn=.true. for debugging
        lprn=.false.
  c      lprn=.true.
 -c      write (iout,*) "EBACK_SC_COR",iphi_start,iphi_end,nterm_sccor
 +c     write (iout,*) "EBACK_SC_COR",itau_start,itau_end
        esccor=0.0D0
        do i=itau_start,itau_end
          esccor_ii=0.0D0
 +        if ((itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)) cycle
          isccori=isccortyp(itype(i-2))
          isccori1=isccortyp(itype(i-1))
          phii=phi(i)
@@@ -6038,16 -5975,14 +6040,16 @@@ c   2 = Ca...Ca...Ca...S
  c   3 = SC...Ca...Ca...SCi
          gloci=0.0D0
          if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
 -     &      (itype(i-1).eq.10).or.(itype(i-2).eq.21).or.
 -     &      (itype(i-1).eq.21)))
 +     &      (itype(i-1).eq.10).or.(itype(i-2).eq.ntyp1).or.
 +     &      (itype(i-1).eq.ntyp1)))
       &    .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
 -     &     .or.(itype(i-2).eq.21)))
 +     &     .or.(itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)
 +     &     .or.(itype(i).eq.ntyp1)))
       &    .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
 -     &      (itype(i-1).eq.21)))) cycle  
 -        if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.21)) cycle
 -        if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.21))
 +     &      (itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
 +     &      (itype(i-3).eq.ntyp1)))) cycle
 +        if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.ntyp1)) cycle
 +        if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.ntyp1))
       & cycle
          do j=1,nterm_sccor(isccori,isccori1)
            v1ij=v1sccor(j,intertyp,isccori,isccori1)
@@@ -6062,9 -5997,9 +6064,9 @@@ c        write (iout,*) "WTF",intertyp,
  c     &gloc_sc(intertyp,i-3,icg)
          if (lprn)
       &  write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
 -     &  restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
 -     &  (v1sccor(j,intertyp,itori,itori1),j=1,6)
 -     & ,(v2sccor(j,intertyp,itori,itori1),j=1,6)
 +     &  restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,isccori,isccori1,
 +     &  (v1sccor(j,intertyp,isccori,isccori1),j=1,6)
 +     & ,(v2sccor(j,intertyp,isccori,isccori1),j=1,6)
          gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
         enddo !intertyp
        enddo
@@@ -33,7 -33,6 +33,7 @@@ set(UNRES_MIN_SRC
        printmat.f 
        randgens.f 
        readrtns_min.F
 +      refsys.f
        rescode.f 
        refsys.f
        rmdd.f 
@@@ -209,41 -208,17 +209,17 @@@ set(UNRES_MIN_SRCS ${UNRES_MIN_SRC0} ${
  #=========================================
  # Build the binary
  #=========================================
- add_executable(UNRES_BIN-MIN ${UNRES_MIN_SRCS} )
- set_target_properties(UNRES_BIN-MIN PROPERTIES OUTPUT_NAME ${UNRES_BIN})
+ add_executable(UNRES_MIN_BIN ${UNRES_MIN_SRCS} )
+ set_target_properties(UNRES_MIN_BIN PROPERTIES OUTPUT_NAME ${UNRES_BIN})
  
  if (Fortran_COMPILER_NAME STREQUAL "ifort")
-   target_link_libraries (UNRES_BIN-MIN ${CMAKE_THREAD_LIBS_INIT})
+   target_link_libraries (UNRES_MIN_BIN ${CMAKE_THREAD_LIBS_INIT})
  endif (Fortran_COMPILER_NAME STREQUAL "ifort")
+ set_property(TARGET UNRES_MIN_BIN PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
  
- #set_property(TARGET ${UNRES_BIN} PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/unres/MD )
  
  #=========================================
- # TESTS 
+ # Install Path
  #=========================================
+ install(TARGETS UNRES_MIN_BIN DESTINATION ${CMAKE_INSTALL_PREFIX})
  
- #-- Copy all the data files from the test directory into the source directory
- #SET(UNRES_TEST_FILES
- #     ala10.inp
- #    )
- #FOREACH (UNRES_TEST_FILE ${UNRES_TEST_FILES})
- #      SET (unres_test_dest "${CMAKE_CURRENT_BINARY_DIR}/${UNRES_TEST_FILE}")
- #      MESSAGE (STATUS " Copying ${UNRES_TEST_FILE} from ${CMAKE_SOURCE_DIR}/examples/unres/MD/ff_gab/${UNRES_TEST_FILE} to ${unres_test_dest}")
- #      ADD_CUSTOM_COMMAND (
- #          TARGET     ${UNRES_BIN}
- #          POST_BUILD
- #          COMMAND    ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/examples/unres/MD/ff_gab/${UNRES_TEST_FILE} ${unres_test_dest}
- #      )
- #ENDFOREACH (UNRES_TEST_FILE ${UNRES_TEST_FILES})
- #=========================================
- # Generate data test files
- #=========================================
- #if(NOT UNRES_WITH_MPI)
- #  add_test(NAME UNRES_MD_Ala10 COMMAND sh ${CMAKE_CURRENT_BINARY_DIR}/test_single_ala.sh )
- #endif(NOT UNRES_WITH_MPI)
-  
@@@ -96,9 -96,11 +96,11 @@@ set(UNRES_WHAM_M_PP_SR
  # Set comipiler flags for different sourcefiles  
  #================================================
  if (Fortran_COMPILER_NAME STREQUAL "ifort")
-   set(FFLAGS0 "-g -CB -I. -I${CMAKE_CURRENT_SOURCE_DIR}/include_unres -I${MPIF_INCLUDE_DIRECTORIES}" ) 
+   set(FFLAGS0 "-g -CB -I. -I${CMAKE_CURRENT_SOURCE_DIR}/include_unres" ) 
  elseif (Fortran_COMPILER_NAME STREQUAL "gfortran")
-   set(FFLAGS0 "-std=legacy -g -I. -I${CMAKE_CURRENT_SOURCE_DIR}/include_unres -I${MPIF_INCLUDE_DIRECTORIES}" ) 
+   set(FFLAGS0 "-std=legacy -g -I. -I${CMAKE_CURRENT_SOURCE_DIR}/include_unres" ) 
+ else ()
+   set(FFLAGS0 "-g -I. -I${CMAKE_CURRENT_SOURCE_DIR}/include_unres" ) 
  endif (Fortran_COMPILER_NAME STREQUAL "ifort")
  
  
  # Add MPI compiler flags
  #=========================================
  if(UNRES_WITH_MPI)
-   set(FFLAGS0 "${FFLAGS0} -I${MPIF_INCLUDE_DIRECTORIES}")
+   set(FFLAGS0 "${FFLAGS0} -I${MPI_Fortran_INCLUDE_PATH}")
  endif(UNRES_WITH_MPI)
  
  set_property(SOURCE ${UNRES_WHAM_M_SRC0} PROPERTY COMPILE_FLAGS ${FFLAGS0} )
@@@ -118,7 -120,6 +120,7 @@@ if(UNRES_MD_FF STREQUAL "GAB" 
    # set preprocesor flags   
    set(CPPFLAGS "PROCOR  -DSPLITELE -DCRYST_BOND -DCRYST_THETA -DCRYST_SC  -DSCCORPDB" )
  
 +
  #=========================================
  #  Settings for E0LL2Y force field
  #=========================================
@@@ -152,9 -153,6 +154,9 @@@ elseif (Fortran_COMPILER_NAME STREQUAL 
  elseif (Fortran_COMPILER_NAME STREQUAL "gfortran")
    # Add old gfortran flags
    set(CPPFLAGS "${CPPFLAGS} -DG77") 
 +else (Fortran_COMPILER_NAME STREQUAL "ifort")
 +  # Default preprocessor flags
 +  set(CPPFLAGS "${CPPFLAGS} -DPGI")
  endif (Fortran_COMPILER_NAME STREQUAL "ifort")
  
  #=========================================
@@@ -178,7 -176,7 +180,7 @@@ set_property(SOURCE ${UNRES_WHAM_M_PP_S
  #========================================
  #  Setting binary name
  #========================================
- set(UNRES_WHAM_M_BIN "wham_${Fortran_COMPILER_NAME}.exe")
+ set(UNRES_WHAM_M_BIN "wham_M_${Fortran_COMPILER_NAME}.exe")
  
  #=========================================
  # cinfo.f workaround for CMake
@@@ -222,18 -220,24 +224,24 @@@ set(UNRES_WHAM_M_SRCS ${UNRES_WHAM_M_SR
  #=========================================
  add_executable(UNRES_WHAM_M_BIN ${UNRES_WHAM_M_SRCS} )
  set_target_properties(UNRES_WHAM_M_BIN PROPERTIES OUTPUT_NAME ${UNRES_WHAM_M_BIN})
- #set_property(TARGET ${UNRES_BIN} PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/unres/MD )
+ set_property(TARGET UNRES_WHAM_M_BIN PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
  #add_dependencies (${UNRES_BIN} ${UNRES_XDRFLIB})
  
  #=========================================
  # Link libraries
  #=========================================
  # link MPI library (libmpich.a)  
- target_link_libraries( UNRES_WHAM_M_BIN ${MPIF_LIBRARIES} )
+ target_link_libraries( UNRES_WHAM_M_BIN ${MPI_Fortran_LIBRARIES} )
  # link libxdrf.a 
  target_link_libraries( UNRES_WHAM_M_BIN xdrf )
  
+ #=========================================
+ # Install Path
+ #=========================================
+ install(TARGETS UNRES_WHAM_M_BIN DESTINATION ${CMAKE_INSTALL_PREFIX})
  #=========================================
  # TESTS 
  #=========================================
@@@ -94,9 -94,11 +94,11 @@@ set(UNRES_WHAM_PP_SR
  # Set comipiler flags for different sourcefiles  
  #================================================
  if (Fortran_COMPILER_NAME STREQUAL "ifort")
 -  set(FFLAGS0 "-mcmodel=medium -g -CB -I. -I${CMAKE_CURRENT_SOURCE_DIR}/include_unres" ) 
 +  set(FFLAGS0 "-mcmodel=large -g -CB -I. -I${CMAKE_CURRENT_SOURCE_DIR}/include_unres" ) 
  elseif (Fortran_COMPILER_NAME STREQUAL "gfortran")
    set(FFLAGS0 "-std=legacy -g -I. -I${CMAKE_CURRENT_SOURCE_DIR}/include_unres" ) 
+ else ()
+   set(FFLAGS0 "-g -I. -I${CMAKE_CURRENT_SOURCE_DIR}/include_unres" )   
  endif (Fortran_COMPILER_NAME STREQUAL "ifort")
  
  
  # Add MPI compiler flags
  #=========================================
  if(UNRES_WITH_MPI)
-   set(FFLAGS0 "${FFLAGS0} -I${MPIF_INCLUDE_DIRECTORIES}")
+   set(FFLAGS0 "${FFLAGS0} -I${MPI_Fortran_INCLUDE_PATH}")
  endif(UNRES_WITH_MPI)
  
  set_property(SOURCE ${UNRES_WHAM_SRC0} PROPERTY COMPILE_FLAGS ${FFLAGS0} )
@@@ -152,9 -154,6 +154,9 @@@ elseif (Fortran_COMPILER_NAME STREQUAL 
  elseif (Fortran_COMPILER_NAME STREQUAL "gfortran")
    # Add old gfortran flags
    set(CPPFLAGS "${CPPFLAGS} -DG77") 
 +else (Fortran_COMPILER_NAME STREQUAL "ifort")
 +  # Default preprocessor flags 
 +  set(CPPFLAGS "${CPPFLAGS} -DPGI")
  endif (Fortran_COMPILER_NAME STREQUAL "ifort")
  
  #=========================================
@@@ -222,19 -221,24 +224,24 @@@ set(UNRES_WHAM_SRCS ${UNRES_WHAM_SRC0} 
  #=========================================
  add_executable(UNRES_WHAM_BIN ${UNRES_WHAM_SRCS} )
  set_target_properties(UNRES_WHAM_BIN PROPERTIES OUTPUT_NAME ${UNRES_WHAM_BIN})
- #set_property(TARGET ${UNRES_BIN} PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/unres/MD )
+ set_property(TARGET UNRES_WHAM_BIN PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
  #add_dependencies (${UNRES_BIN} ${UNRES_XDRFLIB})
  
  #=========================================
  # Link libraries
  #=========================================
- # link MPI library (libmpich.a)  
- target_link_libraries( UNRES_WHAM_BIN ${MPIF_LIBRARIES} )
+ # link MPI libraries
+ target_link_libraries( UNRES_WHAM_BIN ${MPI_Fortran_LIBRARIES} )
  # link libxdrf.a 
  target_link_libraries( UNRES_WHAM_BIN xdrf )
  
  #=========================================
+ # Install Path
+ #=========================================
+ install(TARGETS UNRES_WHAM_BIN DESTINATION ${CMAKE_INSTALL_PREFIX})
+ #=========================================
  # TESTS 
  #=========================================
  
       &   +wturn3*fact(2)*gel_loc_turn3(i)
       &   +wturn6*fact(5)*gel_loc_turn6(i)
       &   +wel_loc*fact(2)*gel_loc_loc(i)
 -     &   +wsccor*fact(1)*gsccor_loc(i)
 +c     &   +wsccor*fact(1)*gsccor_loc(i)
        enddo
        endif
        return
@@@ -369,9 -369,8 +369,9 @@@ cd    print *,'Entering ELJ nnt=',nnt,
        evdw=0.0D0
        evdw_t=0.0d0
        do i=iatsc_s,iatsc_e
 -        itypi=itype(i)
 -        itypi1=itype(i+1)
 +        itypi=iabs(itype(i))
 +        if (itypi.eq.ntyp1) cycle
 +        itypi1=iabs(itype(i+1))
          xi=c(1,nres+i)
          yi=c(2,nres+i)
          zi=c(3,nres+i)
  cd        write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
  cd   &                  'iend=',iend(i,iint)
            do j=istart(i,iint),iend(i,iint)
 -            itypj=itype(j)
 +            itypj=iabs(itype(j))
 +            if (itypj.eq.ntyp1) cycle
              xj=c(1,nres+j)-xi
              yj=c(2,nres+j)-yi
              zj=c(3,nres+j)-zi
@@@ -542,9 -540,8 +542,9 @@@ c     print *,'Entering ELJK nnt=',nnt,
        evdw=0.0D0
        evdw_t=0.0d0
        do i=iatsc_s,iatsc_e
 -        itypi=itype(i)
 -        itypi1=itype(i+1)
 +        itypi=iabs(itype(i))
 +        if (itypi.eq.ntyp1) cycle
 +        itypi1=iabs(itype(i+1))
          xi=c(1,nres+i)
          yi=c(2,nres+i)
          zi=c(3,nres+i)
@@@ -553,8 -550,7 +553,8 @@@ C Calculate SC interaction energy
  C
          do iint=1,nint_gr(i)
            do j=istart(i,iint),iend(i,iint)
 -            itypj=itype(j)
 +            itypj=iabs(itype(j))
 +            if (itypj.eq.ntyp1) cycle
              xj=c(1,nres+j)-xi
              yj=c(2,nres+j)-yi
              zj=c(3,nres+j)-zi
@@@ -655,8 -651,8 +655,8 @@@ c     els
  c     endif
        ind=0
        do i=iatsc_s,iatsc_e
 -        itypi=itype(i)
 -        itypi1=itype(i+1)
 +        itypi=iabs(itype(i))
 +        itypi1=iabs(itype(i+1))
          xi=c(1,nres+i)
          yi=c(2,nres+i)
          zi=c(3,nres+i)
          do iint=1,nint_gr(i)
            do j=istart(i,iint),iend(i,iint)
              ind=ind+1
 -            itypj=itype(j)
 +            itypj=iabs(itype(j))
              dscj_inv=vbld_inv(j+nres)
              chi1=chi(itypi,itypj)
              chi2=chi(itypj,itypi)
@@@ -792,8 -788,8 +792,8 @@@ c     print *,'Entering EGB nnt=',nnt,
  c      if (icall.gt.0) lprn=.true.
        ind=0
        do i=iatsc_s,iatsc_e
 -        itypi=itype(i)
 -        itypi1=itype(i+1)
 +        itypi=iabs(itype(i))
 +        itypi1=iabs(itype(i+1))
          xi=c(1,nres+i)
          yi=c(2,nres+i)
          zi=c(3,nres+i)
@@@ -822,7 -818,7 +822,7 @@@ c              if (energy_dec) write (i
  c     &                        'evdw',i,j,evdwij,' ss'
              ELSE
              ind=ind+1
 -            itypj=itype(j)
 +            itypj=iabs(itype(j))
              dscj_inv=vbld_inv(j+nres)
              sig0ij=sigma(itypi,itypj)
              chi1=chi(itypi,itypj)
@@@ -954,8 -950,8 +954,8 @@@ c     print *,'Entering EGB nnt=',nnt,
  c      if (icall.gt.0) lprn=.true.
        ind=0
        do i=iatsc_s,iatsc_e
 -        itypi=itype(i)
 -        itypi1=itype(i+1)
 +        itypi=iabs(itype(i))
 +        itypi1=iabs(itype(i+1))
          xi=c(1,nres+i)
          yi=c(2,nres+i)
          zi=c(3,nres+i)
          do iint=1,nint_gr(i)
            do j=istart(i,iint),iend(i,iint)
              ind=ind+1
 -            itypj=itype(j)
 +            itypj=iabs(itype(j))
              dscj_inv=vbld_inv(j+nres)
              sig0ij=sigma(itypi,itypj)
              r0ij=r0(itypi,itypj)
@@@ -2808,7 -2804,7 +2808,7 @@@ c     &   " iscp",(iscpstart(i,j),iscpe
          do iint=1,nscp_gr(i)
  
          do j=iscpstart(i,iint),iscpend(i,iint)
 -          itypj=itype(j)
 +          itypj=iabs(itype(j))
  C Uncomment following three lines for SC-p interactions
  c         xj=c(1,nres+j)-xi
  c         yj=c(2,nres+j)-yi
@@@ -2922,8 -2918,7 +2922,8 @@@ C 24/11/03 AL: SS bridges handled separ
  C    distance and angle dependent SS bond potential.
          if (.not.dyn_ss .and. i.le.nss) then
  C 15/02/13 CC dynamic SSbond - additional check
 -        if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
 +         if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
 +     & iabs(itype(jjj)).eq.1) then
            call ssbond_ene(iii,jjj,eij)
            ehpb=ehpb+2*eij
           endif
        include 'COMMON.VAR'
        include 'COMMON.IOUNITS'
        double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
 -      itypi=itype(i)
 +      itypi=iabs(itype(i))
        xi=c(1,nres+i)
        yi=c(2,nres+i)
        zi=c(3,nres+i)
        dyi=dc_norm(2,nres+i)
        dzi=dc_norm(3,nres+i)
        dsci_inv=dsc_inv(itypi)
 -      itypj=itype(j)
 +      itypj=iabs(itype(j))
        dscj_inv=dsc_inv(itypj)
        xj=c(1,nres+j)-xi
        yj=c(2,nres+j)-yi
  c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
  c
        do i=nnt,nct
 -        iti=itype(i)
 +        iti=iabs(itype(i))
          if (iti.ne.10) then
            nbi=nbondterm(iti)
            if (nbi.eq.1) then
@@@ -3206,18 -3201,6 +3206,18 @@@ c      write (iout,*) ithet_start,ithet
  C Zero the energy function and its derivative at 0 or pi.
          call splinthet(theta(i),0.5d0*delta,ss,ssd)
          it=itype(i-1)
 +        ichir1=isign(1,itype(i-2))
 +        ichir2=isign(1,itype(i))
 +         if (itype(i-2).eq.10) ichir1=isign(1,itype(i-1))
 +         if (itype(i).eq.10) ichir2=isign(1,itype(i-1))
 +         if (itype(i-1).eq.10) then
 +          itype1=isign(10,itype(i-2))
 +          ichir11=isign(1,itype(i-2))
 +          ichir12=isign(1,itype(i-2))
 +          itype2=isign(10,itype(i))
 +          ichir21=isign(1,itype(i))
 +          ichir22=isign(1,itype(i))
 +         endif
  c        if (i.gt.ithet_start .and. 
  c     &     (itel(i-1).eq.0 .or. itel(i-2).eq.0)) goto 1215
  c        if (i.gt.3 .and. (i.le.4 .or. itel(i-3).ne.0)) then
@@@ -3273,12 -3256,8 +3273,12 @@@ C dependent on the adjacent virtual-bon
  C In following comments this theta will be referred to as t_c.
          thet_pred_mean=0.0d0
          do k=1,2
 -          athetk=athet(k,it)
 -          bthetk=bthet(k,it)
 +            athetk=athet(k,it,ichir1,ichir2)
 +            bthetk=bthet(k,it,ichir1,ichir2)
 +          if (it.eq.10) then
 +             athetk=athet(k,itype1,ichir11,ichir12)
 +             bthetk=bthet(k,itype2,ichir21,ichir22)
 +          endif
            thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
          enddo
  c        write (iout,*) "thet_pred_mean",thet_pred_mean
          thet_pred_mean=thet_pred_mean*ss+a0thet(it)
  c        write (iout,*) "thet_pred_mean",thet_pred_mean
  C Derivatives of the "mean" values in gamma1 and gamma2.
 -        dthetg1=(-athet(1,it)*y(2)+athet(2,it)*y(1))*ss
 -        dthetg2=(-bthet(1,it)*z(2)+bthet(2,it)*z(1))*ss
 +        dthetg1=(-athet(1,it,ichir1,ichir2)*y(2)
 +     &+athet(2,it,ichir1,ichir2)*y(1))*ss
 +         dthetg2=(-bthet(1,it,ichir1,ichir2)*z(2)
 +     &          +bthet(2,it,ichir1,ichir2)*z(1))*ss
 +         if (it.eq.10) then
 +      dthetg1=(-athet(1,itype1,ichir11,ichir12)*y(2)
 +     &+athet(2,itype1,ichir11,ichir12)*y(1))*ss
 +        dthetg2=(-bthet(1,itype2,ichir21,ichir22)*z(2)
 +     &         +bthet(2,itype2,ichir21,ichir22)*z(1))*ss
 +         endif
          if (theta(i).gt.pi-delta) then
            call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
       &         E_tc0)
        etheta=0.0D0
  c      write (iout,*) "ithetyp",(ithetyp(i),i=1,ntyp1)
        do i=ithet_start,ithet_end
 +        if (iabs(itype(i+1)).eq.20) iblock=2
 +        if (iabs(itype(i+1)).ne.20) iblock=1
          dethetai=0.0d0
          dephii=0.0d0
          dephii1=0.0d0
          theti2=0.5d0*theta(i)
 -        ityp2=ithetyp(itype(i-1))
 +        ityp2=ithetyp((itype(i-1)))
          do k=1,nntheterm
            coskt(k)=dcos(k*theti2)
            sinkt(k)=dsin(k*theti2)
  #else
            phii=phi(i)
  #endif
 -          ityp1=ithetyp(itype(i-2))
 +          ityp1=ithetyp(iabs(itype(i-2)))
            do k=1,nsingle
              cosph1(k)=dcos(k*phii)
              sinph1(k)=dsin(k*phii)
  #else
            phii1=phi(i+1)
  #endif
 -          ityp3=ithetyp(itype(i))
 +          ityp3=ithetyp((itype(i)))
            do k=1,nsingle
              cosph2(k)=dcos(k*phii1)
              sinph2(k)=dsin(k*phii1)
  c        write (iout,*) "i",i," ityp1",itype(i-2),ityp1,
  c     &   " ityp2",itype(i-1),ityp2," ityp3",itype(i),ityp3
  c        call flush(iout)
 -        ethetai=aa0thet(ityp1,ityp2,ityp3)
 +        ethetai=aa0thet(ityp1,ityp2,ityp3,iblock)
          do k=1,ndouble
            do l=1,k-1
              ccl=cosph1(l)*cosph2(k-l)
          enddo
          endif
          do k=1,ntheterm
 -          ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3)*sinkt(k)
 -          dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3)
 +          ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3,iblock)*sinkt(k)
 +          dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3,iblock)
       &      *coskt(k)
            if (lprn)
 -     &    write (iout,*) "k",k," aathet",aathet(k,ityp1,ityp2,ityp3),
 +     &    write (iout,*) "k",k," aathet",aathet(k,ityp1,ityp2,ityp3,
 +     &      iblock),
       &     " ethetai",ethetai
          enddo
          if (lprn) then
          endif
          do m=1,ntheterm2
            do k=1,nsingle
 -            aux=bbthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)
 -     &         +ccthet(k,m,ityp1,ityp2,ityp3)*sinph1(k)
 -     &         +ddthet(k,m,ityp1,ityp2,ityp3)*cosph2(k)
 -     &         +eethet(k,m,ityp1,ityp2,ityp3)*sinph2(k)
 +            aux=bbthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)
 +     &         +ccthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k)
 +     &         +ddthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)
 +     &         +eethet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k)
              ethetai=ethetai+sinkt(m)*aux
              dethetai=dethetai+0.5d0*m*aux*coskt(m)
              dephii=dephii+k*sinkt(m)*(
 -     &          ccthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)-
 -     &          bbthet(k,m,ityp1,ityp2,ityp3)*sinph1(k))
 +     &          ccthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)-
 +     &          bbthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k))
              dephii1=dephii1+k*sinkt(m)*(
 -     &          eethet(k,m,ityp1,ityp2,ityp3)*cosph2(k)-
 -     &          ddthet(k,m,ityp1,ityp2,ityp3)*sinph2(k))
 +     &          eethet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)-
 +     &          ddthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k))
              if (lprn)
       &      write (iout,*) "m",m," k",k," bbthet",
 -     &         bbthet(k,m,ityp1,ityp2,ityp3)," ccthet",
 -     &         ccthet(k,m,ityp1,ityp2,ityp3)," ddthet",
 -     &         ddthet(k,m,ityp1,ityp2,ityp3)," eethet",
 -     &         eethet(k,m,ityp1,ityp2,ityp3)," ethetai",ethetai
 +     &         bbthet(k,m,ityp1,ityp2,ityp3,iblock)," ccthet",
 +     &         ccthet(k,m,ityp1,ityp2,ityp3,iblock)," ddthet",
 +     &         ddthet(k,m,ityp1,ityp2,ityp3,iblock)," eethet",
 +     &         eethet(k,m,ityp1,ityp2,ityp3,iblock)," ethetai",ethetai
            enddo
          enddo
          if (lprn)
          do m=1,ntheterm3
            do k=2,ndouble
              do l=1,k-1
 -              aux=ffthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
 -     &            ffthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l)+
 -     &            ggthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
 -     &            ggthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)
 +              aux=ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
 +     &            ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l)+
 +     &            ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
 +     &            ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)
                ethetai=ethetai+sinkt(m)*aux
                dethetai=dethetai+0.5d0*m*coskt(m)*aux
                dephii=dephii+l*sinkt(m)*(
 -     &           -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)-
 -     &            ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
 -     &            ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
 -     &            ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
 +     &           -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)-
 +     &            ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
 +     &            ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
 +     &            ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
                dephii1=dephii1+(k-l)*sinkt(m)*(
 -     &           -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
 -     &            ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
 -     &            ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)-
 -     &            ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
 +     &           -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
 +     &            ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
 +     &            ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)-
 +     &            ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
                if (lprn) then
                write (iout,*) "m",m," k",k," l",l," ffthet",
 -     &            ffthet(l,k,m,ityp1,ityp2,ityp3),
 -     &            ffthet(k,l,m,ityp1,ityp2,ityp3)," ggthet",
 -     &            ggthet(l,k,m,ityp1,ityp2,ityp3),
 -     &            ggthet(k,l,m,ityp1,ityp2,ityp3)," ethetai",ethetai
 +     &            ffthet(l,k,m,ityp1,ityp2,ityp3,iblock),
 +     &            ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)," ggthet",
 +     &            ggthet(l,k,m,ityp1,ityp2,ityp3,iblock),
 +     &            ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)," ethetai",
 +     &            ethetai
                write (iout,*) cosph1ph2(l,k)*sinkt(m),
       &            cosph1ph2(k,l)*sinkt(m),
       &            sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
            enddo
          enddo
  10      continue
-         if (lprn1) write (iout,'(i2,3f8.1,9h ethetai ,f10.5)') 
-      &   i,theta(i)*rad2deg,phii*rad2deg,
+ c        lprn1=.true.
+         if (lprn1) write (iout,'(a4,i2,3f8.1,9h ethetai ,f10.5)') 
+      &  'ebe',i,theta(i)*rad2deg,phii*rad2deg,
       &   phii1*rad2deg,ethetai
+ c        lprn1=.false.
          etheta=etheta+ethetai
+         
          if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
          if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
          gloc(nphi+i-2,icg)=wang*dethetai
@@@ -3661,7 -3631,7 +3664,7 @@@ c     write (iout,'(a)') 'ESC
        do i=loc_start,loc_end
          it=itype(i)
          if (it.eq.10) goto 1
 -        nlobit=nlob(it)
 +        nlobit=nlob(iabs(it))
  c       print *,'i=',i,' it=',it,' nlobit=',nlobit
  c       write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
          theti=theta(i+1)-pipol
@@@ -3816,7 -3786,7 +3819,7 @@@ C Compute the contribution to SC energ
          do iii=-1,1
  
            do j=1,nlobit
 -            expfac=dexp(bsc(j,it)-0.5D0*contr(j,iii)+emin)
 +            expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin)
  cd          print *,'j=',j,' expfac=',expfac
              escloc_i=escloc_i+expfac
              do k=1,3
@@@ -3897,7 -3867,7 +3900,7 @@@ C Compute the contribution to SC energ
  
        dersc12=0.0d0
        do j=1,nlobit
 -        expfac=dexp(bsc(j,it)-0.5D0*contr(j)+emin)
 +        expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j)+emin)
          escloc_i=escloc_i+expfac
          do k=1,2
            dersc(k)=dersc(k)+Ax(k,j)*expfac
          cosfac=dsqrt(cosfac2)
          sinfac2=0.5d0/(1.0d0-costtab(i+1))
          sinfac=dsqrt(sinfac2)
 -        it=itype(i)
 +        it=iabs(itype(i))
          if (it.eq.10) goto 1
  c
  C  Compute the axes of tghe local cartesian coordinates system; store in
@@@ -3978,7 -3948,7 +3981,7 @@@ C     &   dc_norm(3,i+nres
            y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
          enddo
          do j = 1,3
 -          z_prime(j) = -uz(j,i-1)
 +          z_prime(j) = -uz(j,i-1)*dsign(1.0d0,dfloat(itype(i)))
          enddo     
  c       write (2,*) "i",i
  c       write (2,*) "x_prime",(x_prime(j),j=1,3)
  C Compute the energy of the ith side cbain
  C
  c        write (2,*) "xx",xx," yy",yy," zz",zz
 -        it=itype(i)
 +        it=iabs(itype(i))
          do j = 1,65
            x(j) = sc_parmin(j,it) 
          enddo
  Cc diagnostics - remove later
          xx1 = dcos(alph(2))
          yy1 = dsin(alph(2))*dcos(omeg(2))
 -        zz1 = -dsin(alph(2))*dsin(omeg(2))
 +        zz1 = -dsign(1.0d0,itype(i))*dsin(alph(2))*dsin(omeg(2))
          write(2,'(3f8.1,3f9.3,1x,3f9.3)') 
       &    alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
       &    xx1,yy1,zz1
@@@ -4190,11 -4160,8 +4193,11 @@@ c     &   (dC_norm(j,i-1),j=1,3)," vbld
           dZZ_Ci1(k)=0.0d0
           dZZ_Ci(k)=0.0d0
           do j=1,3
 -           dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)*dC_norm(j,i+nres)
 -           dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)*dC_norm(j,i+nres)
 +            dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)
 +     & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
 +            dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)
 +     &  *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
 +
           enddo
            
           dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
@@@ -4430,19 -4397,14 +4433,19 @@@ c      lprn=.true
        etors=0.0D0
        do i=iphi_start,iphi_end
          if (itel(i-2).eq.0 .or. itel(i-1).eq.0) goto 1215
 +         if (iabs(itype(i)).eq.20) then
 +         iblock=2
 +         else
 +         iblock=1
 +         endif
          itori=itortyp(itype(i-2))
          itori1=itortyp(itype(i-1))
          phii=phi(i)
          gloci=0.0D0
  C Regular cosine and sine terms
 -        do j=1,nterm(itori,itori1)
 -          v1ij=v1(j,itori,itori1)
 -          v2ij=v2(j,itori,itori1)
 +        do j=1,nterm(itori,itori1,iblock)
 +          v1ij=v1(j,itori,itori1,iblock)
 +          v2ij=v2(j,itori,itori1,iblock)
            cosphi=dcos(j*phii)
            sinphi=dsin(j*phii)
            etors=etors+v1ij*cosphi+v2ij*sinphi
@@@ -4455,7 -4417,7 +4458,7 @@@ C          [v2 cos(phi/2)+v3 sin(phi/2)
  C
          cosphi=dcos(0.5d0*phii)
          sinphi=dsin(0.5d0*phii)
 -        do j=1,nlor(itori,itori1)
 +        do j=1,nlor(itori,itori1,iblock)
            vl1ij=vlor1(j,itori,itori1)
            vl2ij=vlor2(j,itori,itori1)
            vl3ij=vlor3(j,itori,itori1)
            gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
          enddo
  C Subtract the constant term
 -        etors=etors-v0(itori,itori1)
 +        etors=etors-v0(itori,itori1,iblock)
          if (lprn)
       &  write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
       &  restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
 -     &  (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
 +     &  (v1(j,itori,itori1,1),j=1,6),(v2(j,itori,itori1,1),j=1,6)
          gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
  c       write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
   1215   continue
@@@ -4535,20 -4497,12 +4538,20 @@@ c     lprn=.true
          phii1=phi(i+1)
          gloci1=0.0D0
          gloci2=0.0D0
 +        iblock=1
 +        if (iabs(itype(i+1)).eq.20) iblock=2
  C Regular cosine and sine terms
 -        do j=1,ntermd_1(itori,itori1,itori2)
 -          v1cij=v1c(1,j,itori,itori1,itori2)
 -          v1sij=v1s(1,j,itori,itori1,itori2)
 -          v2cij=v1c(2,j,itori,itori1,itori2)
 -          v2sij=v1s(2,j,itori,itori1,itori2)
 +c c       do j=1,ntermd_1(itori,itori1,itori2,iblock)
 +c          v1cij=v1c(1,j,itori,itori1,itori2,iblock)
 +c          v1sij=v1s(1,j,itori,itori1,itori2,iblock)
 +c          v2cij=v1c(2,j,itori,itori1,itori2,iblock)
 +c          v2sij=v1s(2,j,itori,itori1,itori2,iblock)
 +       do j=1,ntermd_1(itori,itori1,itori2,iblock)
 +          v1cij=v1c(1,j,itori,itori1,itori2,iblock)
 +          v1sij=v1s(1,j,itori,itori1,itori2,iblock)
 +          v2cij=v1c(2,j,itori,itori1,itori2,iblock)
 +          v2sij=v1s(2,j,itori,itori1,itori2,iblock)
 +
            cosphi1=dcos(j*phii)
            sinphi1=dsin(j*phii)
            cosphi2=dcos(j*phii1)
            gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
            gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
          enddo
 -        do k=2,ntermd_2(itori,itori1,itori2)
 +        do k=2,ntermd_2(itori,itori1,itori2,iblock)
            do l=1,k-1
 -            v1cdij = v2c(k,l,itori,itori1,itori2)
 -            v2cdij = v2c(l,k,itori,itori1,itori2)
 -            v1sdij = v2s(k,l,itori,itori1,itori2)
 -            v2sdij = v2s(l,k,itori,itori1,itori2)
 +            v1cdij = v2c(k,l,itori,itori1,itori2,iblock)
 +            v2cdij = v2c(l,k,itori,itori1,itori2,iblock)
 +            v1sdij = v2s(k,l,itori,itori1,itori2,iblock)
 +            v2sdij = v2s(l,k,itori,itori1,itori2,iblock)
              cosphi1p2=dcos(l*phii+(k-l)*phii1)
              cosphi1m2=dcos(l*phii-(k-l)*phii1)
              sinphi1p2=dsin(l*phii+(k-l)*phii1)
@@@ -4614,8 -4568,8 +4617,8 @@@ c      write (iout,*) "EBACK_SC_COR",it
        esccor=0.0D0
        do i=itau_start,itau_end
          esccor_ii=0.0D0
 -        isccori=isccortyp(itype(i-2))
 -        isccori1=isccortyp(itype(i-1))
 +        isccori=isccortyp((itype(i-2)))
 +        isccori1=isccortyp((itype(i-1)))
          phii=phi(i)
  cccc  Added 9 May 2012
  cc Tauangle is torsional engle depending on the value of first digit 
@@@ -4632,14 -4586,14 +4635,14 @@@ c   2 = Ca...Ca...Ca...S
  c   3 = SC...Ca...Ca...SCi
          gloci=0.0D0
          if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
 -     &      (itype(i-1).eq.10).or.(itype(i-2).eq.21).or.
 -     &      (itype(i-1).eq.21)))
 +     &      (itype(i-1).eq.10).or.(itype(i-2).eq.ntyp1).or.
 +     &      (itype(i-1).eq.ntyp1)))
       &    .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
 -     &     .or.(itype(i-2).eq.21)))
 +     &     .or.(itype(i-2).eq.ntyp1)))
       &    .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
 -     &      (itype(i-1).eq.21)))) cycle
 -        if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.21)) cycle
 -        if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.21))
 +     &      (itype(i-1).eq.ntyp1)))) cycle
 +        if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.ntyp1)) cycle
 +        if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.ntyp1))
       & cycle
          do j=1,nterm_sccor(isccori,isccori1)
            v1ij=v1sccor(j,intertyp,isccori,isccori1)
@@@ -4657,7 -4611,7 +4660,7 @@@ c     &gloc_sc(intertyp,i-3,icg
       &  restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
       &  (v1sccor(j,intertyp,itori,itori1),j=1,6)
       & ,(v2sccor(j,intertyp,itori,itori1),j=1,6)
 -        gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
 +c        gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
         enddo !intertyp
        enddo
  c        do i=1,nres
@@@ -4770,9 -4724,9 +4773,9 @@@ c--------------------------------------
        integer dimen1,dimen2,atom,indx
        double precision buffer(dimen1,dimen2)
        double precision zapas 
 -      common /contacts_hb/ zapas(3,20,maxres,7),
 -     &   facont_hb(20,maxres),ees0p(20,maxres),ees0m(20,maxres),
 -     &         num_cont_hb(maxres),jcont_hb(20,maxres)
 +      common /contacts_hb/ zapas(3,ntyp,maxres,7),
 +     &   facont_hb(ntyp,maxres),ees0p(ntyp,maxres),ees0m(ntyp,maxres),
 +     &         num_cont_hb(maxres),jcont_hb(ntyp,maxres)
        num_kont=num_cont_hb(atom)
        do i=1,num_kont
          do k=1,7
@@@ -4795,10 -4749,9 +4798,10 @@@ c--------------------------------------
        integer dimen1,dimen2,atom,indx
        double precision buffer(dimen1,dimen2)
        double precision zapas 
 -      common /contacts_hb/ zapas(3,20,maxres,7),
 -     &         facont_hb(20,maxres),ees0p(20,maxres),ees0m(20,maxres),
 -     &         num_cont_hb(maxres),jcont_hb(20,maxres)
 +      common /contacts_hb/ zapas(3,ntyp,maxres,7),
 +     &         facont_hb(ntyp,maxres),ees0p(ntyp,maxres),
 +     &         ees0m(ntyp,maxres),
 +     &         num_cont_hb(maxres),jcont_hb(ntyp,maxres)
        num_kont=buffer(1,indx+26)
        num_kont_old=num_cont_hb(atom)
        num_cont_hb(atom)=num_kont+num_kont_old