Merge branch 'homology' of mmka.chem.univ.gda.pl:unres into homology
[unres.git] / source / unres / src_MD / CMakeLists.txt
1 #
2 # CMake project file for UNRES with MD for single chains
3
4
5 enable_language (Fortran)
6
7
8 #================================
9 # Set source file lists
10 #================================
11 set(UNRES_MD_SRC0 
12         add.f 
13         arcos.f
14         banach.f 
15         blas.f 
16         bond_move.f 
17         cartder.F 
18         cartprint.f 
19         check_sc_distr.f
20         check_bond.f 
21         chainbuild.F 
22         checkder_p.F 
23         compare_s1.F 
24         contact.f 
25         convert.f 
26         cored.f 
27         dihed_cons.F 
28         djacob.f 
29         econstr_local.F
30         eigen.f 
31         elecont.f 
32         energy_split-sep.F 
33         entmcm.F
34         fitsq.f 
35         gauss.f 
36         gen_rand_conf.F
37         geomout.F 
38         gnmr1.f 
39         intcartderiv.F 
40         initialize_p.F 
41         int_to_cart.f 
42         intcor.f 
43         intlocal.f 
44         kinetic_lesyng.f 
45         lagrangian_lesyng.F 
46         local_move.f 
47         map.f 
48         matmult.f 
49         mc.F 
50         mcm.F 
51         MD_A-MTS.F 
52         minimize_p.F 
53         minim_mcmf.F 
54         misc.f 
55         moments.f
56         MP.F 
57         MREMD.F 
58         muca_md.f 
59         parmread.F 
60         pinorm.f 
61         printmat.f 
62         q_measure.F 
63         randgens.f 
64         rattle.F 
65         readpdb.F 
66         readrtns.F 
67         refsys.f 
68         regularize.F
69         rescode.f 
70         rmdd.f 
71         rmsd.F 
72         sc_move.F 
73         sort.f 
74         stochfric.F 
75         sumsld.f 
76         surfatom.f 
77         test.F
78         timing.F
79         thread.F 
80         unres.F
81         ssMD.F
82         dfa.F
83 )
84
85 if(Fortran_COMPILER_NAME STREQUAL "ifort")
86   set(UNRES_MD_SRC0 ${UNRES_MD_SRC0} prng.f ) 
87 elseif(Fortran_COMPILER_NAME STREQUAL "mpif90")
88   set(UNRES_MD_SRC0 ${UNRES_MD_SRC0} prng.f )
89 elseif(Fortran_COMPILER_NAME STREQUAL "f95")
90   set(UNRES_MD_SRC0 ${UNRES_MD_SRC0} prng.f )
91 elseif(Fortran_COMPILER_NAME STREQUAL "gfortran")
92   set(UNRES_MD_SRC0 ${UNRES_MD_SRC0} prng.f )
93 else()
94   set(UNRES_MD_SRC0 ${UNRES_MD_SRC0} prng_32.F )
95 endif (Fortran_COMPILER_NAME STREQUAL "ifort")
96
97
98 set(UNRES_MD_SRC3 
99         energy_p_new_barrier.F 
100         energy_p_new-sep_barrier.F 
101         gradient_p.F )
102
103 set(UNRES_MD_PP_SRC
104         cartder.F
105         chainbuild.F 
106         checkder_p.F 
107         compare_s1.F 
108         dihed_cons.F 
109         econstr_local.F 
110         energy_p_new_barrier.F 
111         energy_p_new-sep_barrier.F 
112         energy_split-sep.F 
113         entmcm.F 
114         gen_rand_conf.F
115         geomout.F 
116         gradient_p.F 
117         initialize_p.F 
118         intcartderiv.F 
119         lagrangian_lesyng.F 
120         mc.F 
121         mcm.F 
122         MD_A-MTS.F
123         minimize_p.F 
124         minim_mcmf.F 
125         MP.F 
126         MREMD.F 
127         parmread.F 
128         q_measure1.F 
129         q_measure3.F 
130         q_measure.F
131         rattle.F 
132         readpdb.F 
133         readrtns.F 
134         regularize.F 
135         rmsd.F 
136         sc_move.F 
137         stochfric.F 
138         test.F 
139         thread.F 
140         timing.F
141         unres.F 
142         proc_proc.c 
143
144
145
146 if(NOT Fortran_COMPILER_NAME STREQUAL "ifort")
147   set(UNRES_MD_PP_SRC ${UNRES_MD_PP_SRC} prng_32.F) 
148 endif(NOT Fortran_COMPILER_NAME STREQUAL "ifort")
149
150 #================================================
151 # Set comipiler flags for different sourcefiles  
152 #================================================
153 if (Fortran_COMPILER_NAME STREQUAL "ifort")
154   set(FFLAGS0 "-ip -w" ) 
155   set(FFLAGS1 "-w -g -d2 -CA -CB" ) 
156   set(FFLAGS2 "-w -g -00 ")
157   #set(FFLAGS3 "-c -w -O3 -ipo -ipo_obj -opt_report" )
158   set(FFLAGS3 "-w -ipo " )
159 elseif (Fortran_COMPILER_NAME STREQUAL "gfortran")
160   set(FFLAGS0 "-std=legacy -I. " ) 
161   set(FFLAGS1 "-std=legacy -g -I. " ) 
162   set(FFLAGS2 "-std=legacy -I. ")
163   #set(FFLAGS3 "-c -w -O3 -ipo -ipo_obj -opt_report" )
164   set(FFLAGS3 "-std=legacy -I. " )
165 endif (Fortran_COMPILER_NAME STREQUAL "ifort")
166
167
168 # Add MPI compiler flags
169 if(UNRES_WITH_MPI)
170   set(FFLAGS0 "${FFLAGS0} -I${MPIF_INCLUDE_DIRECTORIES}")
171   set(FFLAGS1 "${FFLAGS1} -I${MPIF_INCLUDE_DIRECTORIES}")
172   set(FFLAGS2 "${FFLAGS2} -I${MPIF_INCLUDE_DIRECTORIES}")
173   set(FFLAGS3 "${FFLAGS3} -I${MPIF_INCLUDE_DIRECTORIES}")
174 endif(UNRES_WITH_MPI)
175
176 set_property(SOURCE ${UNRES_MD_SRC0} APPEND PROPERTY COMPILE_FLAGS ${FFLAGS0} )
177 #set_property(SOURCE ${UNRES_MD_SRC1} PROPERTY COMPILE_FLAGS ${FFLAGS1} )
178 #set_property(SOURCE ${UNRES_MD_SRC2} PROPERTY COMPILE_FLAGS ${FFLAGS2} )
179 set_property(SOURCE ${UNRES_MD_SRC3} PROPERTY COMPILE_FLAGS ${FFLAGS3} )
180
181 #=========================================
182 # Settings for GAB force field 
183 #=========================================
184 if(UNRES_MD_FF STREQUAL "GAB" )
185   # set preprocesor flags   
186   set(CPPFLAGS "PROCOR -DUNRES -DISNAN -DSPLITELE -DLANG0 -DCRYST_BOND -DCRYST_THETA -DCRYST_SC" )
187
188 #=========================================
189 #  Settings for E0LL2Y force field
190 #=========================================
191 elseif(UNRES_MD_FF STREQUAL "E0LL2Y")
192   # set preprocesor flags   
193   set(CPPFLAGS "PROCOR -DUNRES -DISNAN -DSPLITELE -DLANG0" )
194 endif(UNRES_MD_FF STREQUAL "GAB")
195
196 #=========================================
197 # System specific flags
198 #=========================================
199 if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
200   set(CPPFLAGS "${CPPFLAGS} -DLINUX") 
201 endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
202
203 #=========================================
204 # Compiler specific flags
205 #=========================================
206
207 if (Fortran_COMPILER_NAME STREQUAL "ifort")
208   # Add ifort preprocessor flags
209   set(CPPFLAGS "${CPPFLAGS} -DPGI") 
210 elseif (Fortran_COMPILER_NAME STREQUAL "f95")
211   # Add new gfortran flags
212   set(CPPFLAGS "${CPPFLAGS} -DG77") 
213 elseif (Fortran_COMPILER_NAME STREQUAL "gfortran")
214   # Add old gfortran flags
215   set(CPPFLAGS "${CPPFLAGS} -DG77") 
216 endif (Fortran_COMPILER_NAME STREQUAL "ifort")
217
218 #=========================================
219 # Add MPI preprocessor flags
220 #=========================================
221 if (UNRES_WITH_MPI)
222   set(CPPFLAGS "${CPPFLAGS} -DMP -DMPI") 
223 endif(UNRES_WITH_MPI)
224
225 #=========================================
226 # Apply preprocesor flags to *.F files
227 #=========================================
228 set_property(SOURCE ${UNRES_MD_PP_SRC} PROPERTY COMPILE_DEFINITIONS ${CPPFLAGS} )  
229
230
231 #========================================
232 #  Setting binary name
233 #========================================
234 if(UNRES_WITH_MPI) 
235   # binary with mpi
236   set(UNRES_BIN "unres_${Fortran_COMPILER_NAME}_MPICH_${UNRES_MD_FF}.exe")
237 else(UNRES_WITH_MPI)
238   # binary without mpi
239   set(UNRES_BIN "unres_${Fortran_COMPILER_NAME}_single_${UNRES_MD_FF}.exe")
240 endif(UNRES_WITH_MPI)  
241
242 #=========================================
243 # cinfo.f workaround for cmake
244 #=========================================
245 # get the current date  
246 TODAY(DATE)
247 # generate cinfo.f
248
249 set(CINFO "${CMAKE_CURRENT_BINARY_DIR}/cinfo.f")
250 FILE(WRITE ${CINFO}
251 "C CMake generated file
252        subroutine cinfo
253        include 'COMMON.IOUNITS'
254        write(iout,*)'++++ Compile info ++++'
255        write(iout,*)'Version ${UNRES_MAJOR}.${UNRES_MINOR} build ${UNRES_PATCH}'
256 ")
257
258 CINFO_FORMAT(${CINFO} "Compiled" "${DATE}" )
259 CINFO_FORMAT(${CINFO} "Compiled by" "$ENV{USER}@$ENV{HOST}" )
260 CINFO_FORMAT(${CINFO} "OS name:" "${CMAKE_SYSTEM_NAME}" )
261 CINFO_FORMAT(${CINFO} "OS release:" "${CMAKE_SYSTEM}" )
262 CINFO_FORMAT(${CINFO} "Fortran Compiler:" "${CMAKE_Fortran_COMPILER}" )
263 CINFO_FORMAT(${CINFO} "MD Force field:" "${UNRES_MD_FF}" )
264 CINFO_FORMAT(${CINFO} "CPPFLAGS =" "${CPPFLAGS}")
265
266 FILE(APPEND ${CINFO} 
267 "       write(iout,*)'++++ End of compile info ++++'  
268        return 
269        end ")
270
271 # add include path
272 set_property(SOURCE ${CMAKE_CURRENT_BINARY_DIR}/cinfo.f PROPERTY COMPILE_FLAGS "${FFLAGS0} -I${CMAKE_CURRENT_SOURCE_DIR}")
273
274 #=========================================
275 # Set full unres MD sources
276 #=========================================
277 set(UNRES_MD_SRCS ${UNRES_MD_SRC0} ${UNRES_MD_SRC3} ${CMAKE_CURRENT_BINARY_DIR}/cinfo.f )
278
279
280 #=========================================
281 # Build the binary
282 #=========================================
283 add_executable(UNRES_BIN-MD ${UNRES_MD_SRCS} )
284 set_target_properties(UNRES_BIN-MD PROPERTIES OUTPUT_NAME ${UNRES_BIN})
285 #set_property(TARGET ${UNRES_BIN} PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/unres/MD )
286 #add_dependencies (${UNRES_BIN} ${UNRES_XDRFLIB})
287
288
289 #=========================================
290 # Link libraries
291 #=========================================
292 # link MPI library (libmpich.a)  
293 if(UNRES_WITH_MPI)
294   target_link_libraries( UNRES_BIN-MD ${MPIF_LIBRARIES} )
295 endif(UNRES_WITH_MPI)
296 # link libxdrf.a 
297 #message("UNRES_XDRFLIB=${UNRES_XDRFLIB}")
298 target_link_libraries( UNRES_BIN-MD xdrf )
299
300 #=========================================
301 # TESTS 
302 #=========================================
303
304 #-- Copy all the data files from the test directory into the source directory
305 #SET(UNRES_TEST_FILES
306 #       ala10.inp
307 #    )
308
309 #FOREACH (UNRES_TEST_FILE ${UNRES_TEST_FILES})
310 #      SET (unres_test_dest "${CMAKE_CURRENT_BINARY_DIR}/${UNRES_TEST_FILE}")
311 #      MESSAGE (STATUS " Copying ${UNRES_TEST_FILE} from ${CMAKE_SOURCE_DIR}/examples/unres/MD/ff_gab/${UNRES_TEST_FILE} to ${unres_test_dest}")
312 #      ADD_CUSTOM_COMMAND (
313 #          TARGET     ${UNRES_BIN}
314 #          POST_BUILD
315 #          COMMAND    ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/examples/unres/MD/ff_gab/${UNRES_TEST_FILE} ${unres_test_dest}
316 #      )
317 #ENDFOREACH (UNRES_TEST_FILE ${UNRES_TEST_FILES})
318
319 #=========================================
320 # Generate data test files
321 #=========================================
322 #  test_single_ala.sh
323 #=========================================
324
325 FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/scripts/test_single_ala.sh
326 "#!/bin/sh
327 export POT=GB
328 export PREFIX=ala10
329 #-----------------------------------------------------------------------------
330 UNRES_BIN=./${UNRES_BIN}
331 #-----------------------------------------------------------------------------
332 DD=${CMAKE_SOURCE_DIR}/PARAM
333 export BONDPAR=$DD/bond.parm
334 export THETPAR=$DD/thetaml.5parm
335 export ROTPAR=$DD/scgauss.parm
336 export TORPAR=$DD/torsion_631Gdp.parm
337 export TORDPAR=$DD/torsion_double_631Gdp.parm
338 export ELEPAR=$DD/electr_631Gdp.parm
339 export SIDEPAR=$DD/sc_GB_opt.1gab_3S_qclass5no310-shan2-sc-16-10-8k
340 export FOURIER=$DD/fourier_opt.parm.1igd_hc_iter3_3
341 export SCPPAR=$DD/scp.parm
342 export SCCORPAR=$DD/sccor_pdb_shelly.dat
343 export PATTERN=$DD/patterns.cart
344 #-----------------------------------------------------------------------------
345 $UNRES_BIN
346 ")
347
348 #
349 # File permissions workaround
350 #
351 FILE(   COPY ${CMAKE_CURRENT_BINARY_DIR}/scripts/test_single_ala.sh 
352         DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
353         FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
354 )
355
356
357
358 #=========================================
359 #  ala10.inp
360 #=========================================
361
362 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/ala10.inp
363 "ala10 unblocked
364 SEED=-1111333 MD ONE_LETTER rescale_mode=2 
365 nstep=15000 ntwe=100 ntwx=1000 dt=0.1 lang=0 tbf t_bath=300 damax=1.0          &
366 reset_moment=1000 reset_vel=1000
367 WLONG=1.35279 WSCP=1.59304 WELEC=0.71534 WBOND=1.00000 WANG=1.13873            &
368 WSCLOC=0.16258 WTOR=1.98599 WTORD=1.57069 WCORRH=0.42887 WCORR5=0.00000        &
369 WCORR6=0.00000 WEL_LOC=0.16036 WTURN3=1.68722 WTURN4=0.66230 WTURN6=0.00000    &
370 WVDWPP=0.11371 WHPB=1.00000                                                    &
371 CUTOFF=7.00000 WCORR4=0.00000
372 12
373 XAAAAAAAAAAX 
374  0
375  0
376    90.0000   90.0000   90.0000  90.000   90.000   90.000   90.000   90.000 
377    90.0000   90.0000
378   180.0000  180.0000  180.0000 180.000  180.000  180.000  180.000  180.000
379   180.0000
380   110.0000  110.0000  110.0000 100.000  110.000  100.000  110.000  110.000 
381   110.0000  110.0000
382  -120.0000 -120.0000 -120.000 -120.000 -120.000 -120.000 -120.000 -120.000
383  -120.0000 -120.0000
384 ")
385
386
387 # Add tests
388
389 if(NOT UNRES_WITH_MPI)
390                   
391   add_test(NAME UNRES_MD_Ala10 COMMAND sh ${CMAKE_CURRENT_BINARY_DIR}/test_single_ala.sh )
392
393 else(NOT UNRES_WITH_MPI)
394
395
396   add_test(NAME UNRES_MD_MPI_Ala10 COMMAND mpiexec -boot ${CMAKE_CURRENT_BINARY_DIR}/test_single_ala.sh )
397
398 endif(NOT UNRES_WITH_MPI)
399