MULTCONF is working now
[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 else()
89   set(UNRES_MD_SRC0 ${UNRES_MD_SRC0} prng_32.F )
90 endif (Fortran_COMPILER_NAME STREQUAL "ifort")
91
92
93 set(UNRES_MD_SRC3 
94         energy_p_new_barrier.F 
95         energy_p_new-sep_barrier.F 
96         gradient_p.F )
97
98 set(UNRES_MD_PP_SRC
99         cartder.F
100         chainbuild.F 
101         checkder_p.F 
102         compare_s1.F 
103         dihed_cons.F 
104         econstr_local.F 
105         energy_p_new_barrier.F 
106         energy_p_new-sep_barrier.F 
107         energy_split-sep.F 
108         entmcm.F 
109         gen_rand_conf.F
110         geomout.F 
111         gradient_p.F 
112         initialize_p.F 
113         intcartderiv.F 
114         lagrangian_lesyng.F 
115         mc.F 
116         mcm.F 
117         MD_A-MTS.F
118         minimize_p.F 
119         minim_mcmf.F 
120         MP.F 
121         MREMD.F 
122         parmread.F 
123         q_measure1.F 
124         q_measure3.F 
125         q_measure.F
126         rattle.F 
127         readpdb.F 
128         readrtns.F 
129         regularize.F 
130         rmsd.F 
131         sc_move.F 
132         stochfric.F 
133         test.F 
134         thread.F 
135         timing.F
136         unres.F 
137         proc_proc.c 
138
139
140
141 if(NOT Fortran_COMPILER_NAME STREQUAL "ifort")
142   set(UNRES_MD_PP_SRC ${UNRES_MD_PP_SRC} prng_32.F) 
143 endif(NOT Fortran_COMPILER_NAME STREQUAL "ifort")
144
145 #================================================
146 # Set comipiler flags for different sourcefiles  
147 #================================================
148 if (Fortran_COMPILER_NAME STREQUAL "ifort")
149   set(FFLAGS0 "-ip -w" ) 
150   set(FFLAGS1 "-w -g -d2 -CA -CB" ) 
151   set(FFLAGS2 "-w -g -00 ")
152   #set(FFLAGS3 "-c -w -O3 -ipo -ipo_obj -opt_report" )
153   set(FFLAGS3 "-w -ipo " )
154 elseif (Fortran_COMPILER_NAME STREQUAL "gfortran")
155   set(FFLAGS0 "-std=legacy -I. " ) 
156   set(FFLAGS1 "-std=legacy -g -I. " ) 
157   set(FFLAGS2 "-std=legacy -I. ")
158   #set(FFLAGS3 "-c -w -O3 -ipo -ipo_obj -opt_report" )
159   set(FFLAGS3 "-std=legacy -I. " )
160 endif (Fortran_COMPILER_NAME STREQUAL "ifort")
161
162
163 # Add MPI compiler flags
164 if(UNRES_WITH_MPI)
165   set(FFLAGS0 "${FFLAGS0} -I${MPIF_INCLUDE_DIRECTORIES}")
166   set(FFLAGS1 "${FFLAGS1} -I${MPIF_INCLUDE_DIRECTORIES}")
167   set(FFLAGS2 "${FFLAGS2} -I${MPIF_INCLUDE_DIRECTORIES}")
168   set(FFLAGS3 "${FFLAGS3} -I${MPIF_INCLUDE_DIRECTORIES}")
169 endif(UNRES_WITH_MPI)
170
171 set_property(SOURCE ${UNRES_MD_SRC0} APPEND PROPERTY COMPILE_FLAGS ${FFLAGS0} )
172 #set_property(SOURCE ${UNRES_MD_SRC1} PROPERTY COMPILE_FLAGS ${FFLAGS1} )
173 #set_property(SOURCE ${UNRES_MD_SRC2} PROPERTY COMPILE_FLAGS ${FFLAGS2} )
174 set_property(SOURCE ${UNRES_MD_SRC3} PROPERTY COMPILE_FLAGS ${FFLAGS3} )
175
176 #=========================================
177 # Settings for GAB force field 
178 #=========================================
179 if(UNRES_MD_FF STREQUAL "GAB" )
180   # set preprocesor flags   
181   set(CPPFLAGS "PROCOR -DUNRES -DISNAN -DSPLITELE -DLANG0 -DCRYST_BOND -DCRYST_THETA -DCRYST_SC" )
182
183 #=========================================
184 #  Settings for E0LL2Y force field
185 #=========================================
186 elseif(UNRES_MD_FF STREQUAL "E0LL2Y")
187   # set preprocesor flags   
188   set(CPPFLAGS "PROCOR -DUNRES -DISNAN -DSPLITELE -DLANG0" )
189 endif(UNRES_MD_FF STREQUAL "GAB")
190
191 #=========================================
192 # System specific flags
193 #=========================================
194 if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
195   set(CPPFLAGS "${CPPFLAGS} -DLINUX") 
196 endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
197
198 #=========================================
199 # Compiler specific flags
200 #=========================================
201
202 if (Fortran_COMPILER_NAME STREQUAL "ifort")
203   # Add ifort preprocessor flags
204   set(CPPFLAGS "${CPPFLAGS} -DPGI") 
205 elseif (Fortran_COMPILER_NAME STREQUAL "f95")
206   # Add new gfortran flags
207   set(CPPFLAGS "${CPPFLAGS} -DG77") 
208 elseif (Fortran_COMPILER_NAME STREQUAL "gfortran")
209   # Add old gfortran flags
210   set(CPPFLAGS "${CPPFLAGS} -DG77") 
211 endif (Fortran_COMPILER_NAME STREQUAL "ifort")
212
213 #=========================================
214 # Add MPI preprocessor flags
215 #=========================================
216 if (UNRES_WITH_MPI)
217   set(CPPFLAGS "${CPPFLAGS} -DMP -DMPI") 
218 endif(UNRES_WITH_MPI)
219
220 #=========================================
221 # Apply preprocesor flags to *.F files
222 #=========================================
223 set_property(SOURCE ${UNRES_MD_PP_SRC} PROPERTY COMPILE_DEFINITIONS ${CPPFLAGS} )  
224
225
226 #========================================
227 #  Setting binary name
228 #========================================
229 if(UNRES_WITH_MPI) 
230   # binary with mpi
231   set(UNRES_BIN "unres_${Fortran_COMPILER_NAME}_MPICH_${UNRES_MD_FF}.exe")
232 else(UNRES_WITH_MPI)
233   # binary without mpi
234   set(UNRES_BIN "unres_${Fortran_COMPILER_NAME}_single_${UNRES_MD_FF}.exe")
235 endif(UNRES_WITH_MPI)  
236
237 #=========================================
238 # cinfo.f workaround for cmake
239 #=========================================
240 # get the current date  
241 TODAY(DATE)
242 # generate cinfo.f
243
244 set(CINFO "${CMAKE_CURRENT_BINARY_DIR}/cinfo.f")
245 FILE(WRITE ${CINFO}
246 "C CMake generated file
247        subroutine cinfo
248        include 'COMMON.IOUNITS'
249        write(iout,*)'++++ Compile info ++++'
250        write(iout,*)'Version ${UNRES_MAJOR}.${UNRES_MINOR} build ${UNRES_PATCH}'
251 ")
252
253 CINFO_FORMAT(${CINFO} "Compiled" "${DATE}" )
254 CINFO_FORMAT(${CINFO} "Compiled by" "$ENV{USER}@$ENV{HOST}" )
255 CINFO_FORMAT(${CINFO} "OS name:" "${CMAKE_SYSTEM_NAME}" )
256 CINFO_FORMAT(${CINFO} "OS release:" "${CMAKE_SYSTEM}" )
257 CINFO_FORMAT(${CINFO} "Fortran Compiler:" "${CMAKE_Fortran_COMPILER}" )
258 CINFO_FORMAT(${CINFO} "MD Force field:" "${UNRES_MD_FF}" )
259 CINFO_FORMAT(${CINFO} "CPPFLAGS =" "${CPPFLAGS}")
260
261 FILE(APPEND ${CINFO} 
262 "       write(iout,*)'++++ End of compile info ++++'  
263        return 
264        end ")
265
266 # add include path
267 set_property(SOURCE ${CMAKE_CURRENT_BINARY_DIR}/cinfo.f PROPERTY COMPILE_FLAGS "${FFLAGS0} -I${CMAKE_CURRENT_SOURCE_DIR}")
268
269 #=========================================
270 # Set full unres MD sources
271 #=========================================
272 set(UNRES_MD_SRCS ${UNRES_MD_SRC0} ${UNRES_MD_SRC3} ${CMAKE_CURRENT_BINARY_DIR}/cinfo.f )
273
274
275 #=========================================
276 # Build the binary
277 #=========================================
278 add_executable(UNRES_BIN-MD ${UNRES_MD_SRCS} )
279 set_target_properties(UNRES_BIN-MD PROPERTIES OUTPUT_NAME ${UNRES_BIN})
280 #set_property(TARGET ${UNRES_BIN} PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/unres/MD )
281 #add_dependencies (${UNRES_BIN} ${UNRES_XDRFLIB})
282
283
284 #=========================================
285 # Link libraries
286 #=========================================
287 # link MPI library (libmpich.a)  
288 if(UNRES_WITH_MPI)
289   target_link_libraries( UNRES_BIN-MD ${MPIF_LIBRARIES} )
290 endif(UNRES_WITH_MPI)
291 # link libxdrf.a 
292 #message("UNRES_XDRFLIB=${UNRES_XDRFLIB}")
293 target_link_libraries( UNRES_BIN-MD xdrf )
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=./${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/rotcorr_AM1.parm
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