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