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