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