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