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