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