added 32/64-bit architecture detection
[unres.git] / source / unres / src_MD-M / CMakeLists.txt
1 #
2 # CMake project file for UNRES with MD for single chains
3
4
5 enable_language (Fortran)
6
7 #================================
8 # build the xdrf library 
9 #================================ 
10 add_subdirectory(xdrf)
11
12 #================================
13 # Set source file lists
14 #================================
15 set(UNRES_MDM_SRC0 
16         add.f 
17         arcos.f
18         banach.f
19         bank.F 
20         blas.f 
21         bond_move.f 
22         cartder.F 
23         cartprint.f 
24         chainbuild.F 
25         check_bond.f 
26         checkder_p.F 
27         check_sc_distr.f
28         compare_s1.F 
29         contact.f 
30         convert.f 
31         cored.f
32         csa.f 
33         dihed_cons.F
34         diff12.f
35         distfit.f 
36         djacob.f
37         econstr_local.F
38         eigen.f 
39         elecont.f 
40         energy_split-sep.F 
41         entmcm.F
42         fitsq.f 
43         gauss.f 
44         gen_rand_conf.F
45         geomout.F 
46         gnmr1.f
47         indexx.f 
48         initialize_p.F 
49         intcartderiv.F
50         intcor.f 
51         intlocal.f 
52         int_to_cart.f 
53         kinetic_lesyng.f 
54         lagrangian_lesyng.F
55         local_move.f 
56         map.f 
57         matmult.f 
58         mc.F 
59         mcm.F 
60         MD_A-MTS.F 
61         minimize_p.F
62         minim_jlee.F 
63         minim_mcmf.F 
64         misc.f 
65         moments.f
66         MP.F 
67         MREMD.F 
68         muca_md.f 
69         newconf.f
70         parmread.F 
71         permut.F
72         pinorm.f 
73         printmat.f 
74         prng_32.F 
75         q_measure.F 
76         ran.f
77         randgens.f 
78         rattle.F 
79         readpdb.F
80         readrtns_CSA.F 
81         refsys.f 
82         regularize.F
83         rescode.f 
84         rmdd.f 
85         rmsd.F 
86         sc_move.F 
87         shift.F
88         sort.f 
89         stochfric.F 
90         sumsld.f 
91         surfatom.f 
92         test.F 
93         thread.F 
94         timing.F
95         together.F
96         unres.F
97 )
98
99 set(UNRES_MDM_SRC3 energy_p_new_barrier.F energy_p_new-sep_barrier.F gradient_p.F )
100
101 set(UNRES_MDM_PP_SRC
102         bank.F 
103         cartder.F 
104         chainbuild.F 
105         checkder_p.F 
106         compare_s1.F
107         cored.f
108         csa.f 
109         dihed_cons.F
110         diff12.f 
111         econstr_local.F 
112         energy_p_new.F
113         energy_p_new_barrier.F 
114         energy_p_new-sep_barrier.F 
115         energy_split-sep.F 
116         entmcm.F 
117         gen_rand_conf.F
118         geomout.F 
119         gradient_p.F 
120         intcor.f
121         initialize_p.F 
122         intcartderiv.F 
123         lagrangian_lesyng.F 
124         matmult.f
125         mc.F 
126         mcm.F 
127         MD_A-MTS.F
128         minimize_p.F 
129         minim_jlee.F
130         minim_mcmf.F 
131         MP.F 
132         MREMD.F
133         newconf.f 
134         parmread.F 
135         permut.F
136         prng_32.F 
137         q_measure1.F 
138         q_measure3.F 
139         q_measure.F
140         ran.f
141         rattle.F 
142         readpdb.F 
143         readrtns_CSA.F 
144         regularize.F
145         rmdd.f 
146         rmsd.F 
147         sc_move.F
148         shift.F 
149         stochfric.F
150         sumsld.f 
151         test.F 
152         thread.F 
153         timing.F
154         together.F
155         unres.F 
156
157
158
159 #================================================
160 # Set comipiler flags for different sourcefiles  
161 #================================================
162 if (Fortran_COMPILER_NAME STREQUAL "ifort")
163   set(FFLAGS0 "-ip -w" ) 
164   set(FFLAGS1 "-w -g -d2 -CA -CB" ) 
165   set(FFLAGS2 "-w -g -00 ")
166   #set(FFLAGS3 "-c -w -O3 -ipo -ipo_obj -opt_report" )
167   set(FFLAGS3 "-w -ipo " )
168 elseif (Fortran_COMPILER_NAME STREQUAL "gfortran")
169   set(FFLAGS0 "-I. " ) 
170   set(FFLAGS1 "-g -I. " ) 
171   set(FFLAGS2 "-I. ")
172   #set(FFLAGS3 "-c -w -O3 -ipo -ipo_obj -opt_report" )
173   set(FFLAGS3 "-I. " )
174 endif (Fortran_COMPILER_NAME STREQUAL "ifort")
175
176
177 # Add MPI compiler flags
178 if(UNRES_WITH_MPI)
179   set(FFLAGS0 "${FFLAGS0} -I${MPIF_INCLUDE_DIRECTORIES}")
180   set(FFLAGS1 "${FFLAGS1} -I${MPIF_INCLUDE_DIRECTORIES}")
181   set(FFLAGS2 "${FFLAGS2} -I${MPIF_INCLUDE_DIRECTORIES}")
182   set(FFLAGS3 "${FFLAGS3} -I${MPIF_INCLUDE_DIRECTORIES}")
183 endif(UNRES_WITH_MPI)
184
185 set_property(SOURCE ${UNRES_MDM_SRC0} APPEND PROPERTY COMPILE_FLAGS ${FFLAGS0} )
186 #set_property(SOURCE ${UNRES_MD_SRC1} PROPERTY COMPILE_FLAGS ${FFLAGS1} )
187 #set_property(SOURCE ${UNRES_MD_SRC2} PROPERTY COMPILE_FLAGS ${FFLAGS2} )
188 set_property(SOURCE ${UNRES_MDM_SRC3} PROPERTY COMPILE_FLAGS ${FFLAGS3} )
189
190 #=========================================
191 # Settings for GAB force field 
192 #=========================================
193 if(UNRES_FF STREQUAL "GAB" )
194   # set preprocesor flags   
195   set(CPPFLAGS "PROCOR -DLINUX -DUNRES -DISNAN -DSPLITELE -DLANGO -DCRYST_BOND -DCRYST_THETA -DCRYST_SC" )
196
197   if (Fortran_COMPILER_NAME STREQUAL "ifort")
198     # Add ifort preprocessor flags
199     set(CPPFLAGS "${CPPFLAGS} -DPGI") 
200   elseif (Fortran_COMPILER_NAME STREQUAL "f95")
201     # Add gfortran flags
202     set(CPPFLAGS "${CPPFLAGS} -DG77") 
203   elseif (Fortran_COMPILER_NAME STREQUAL "gfortran")
204     # Add gfortran flags
205     set(CPPFLAGS "${CPPFLAGS} -DG77") 
206   endif (Fortran_COMPILER_NAME STREQUAL "ifort")
207
208 #=========================================
209 #  Settings for E0LL2Y force field
210 #=========================================
211 elseif(UNRES_FF STREQUAL "E0LL2Y")
212   # set preprocesor flags   
213   set(CPPFLAGS "PROCOR -DLINUX -DUNRES -DISNAN -DSPLITELE -DLANG0" )
214
215   if (Fortran_COMPILER_NAME STREQUAL "ifort")
216     # Add ifort preprocessor flags
217     set(CPPFLAGS "${CPPFLAGS} -DPGI")
218   endif (Fortran_COMPILER_NAME STREQUAL "ifort")
219
220 endif(UNRES_FF STREQUAL "GAB")
221
222 # Add MPI preprocessor flags
223 if (UNRES_WITH_MPI)
224   set(CPPFLAGS "${CPPFLAGS} -DMP -DMPI") 
225 endif(UNRES_WITH_MPI)
226
227
228 # add 64-bit specific preprocessor flags
229 if (architektura STREQUAL "64")
230   set(CPPFLAGS "${CPPFLAGS} -DAMD64")
231 endif (architektura STREQUAL "64")
232
233
234
235 # Apply preprocesor flags to *.F files
236 set_property(SOURCE ${UNRES_MDM_PP_SRC} PROPERTY COMPILE_DEFINITIONS ${CPPFLAGS} )  
237
238 # Apply preprocesor flags to proc_proc.c
239 set_property(SOURCE proc_proc.c APPEND PROPERTY COMPILE_DEFINITIONS "SGI" )  
240
241
242 #========================================
243 #  Setting binary name
244 #========================================
245 if(UNRES_WITH_MPI) 
246   # binary with mpi
247   set(UNRES_BIN "unres_${Fortran_COMPILER_NAME}_MPICH_${UNRES_FF}.exe")
248 else(UNRES_WITH_MPI)
249   # binary without mpi
250   set(UNRES_BIN "unres_${Fortran_COMPILER_NAME}_single_${UNRES_FF}.exe")
251 endif(UNRES_WITH_MPI)  
252
253 #=========================================
254 # cinfo.f stupid workaround for cmake
255 #  - shame on me ]:)
256 #=========================================
257 set_property(SOURCE compinfo.c PROPERTY CMAKE_C_FLAGS "-c" )
258 add_executable(compinfo-mdm compinfo.c)
259 set_target_properties(compinfo-mdm PROPERTIES OUTPUT_NAME compinfo)
260
261 set(UNRES_CINFO_DIR "${CMAKE_CURRENT_BINARY_DIR}" )
262 add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cinfo.f 
263         COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/cinfo.f ${CMAKE_CURRENT_BINARY_DIR}/cinfo.f
264         COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/COMMON.IOUNITS ${CMAKE_CURRENT_BINARY_DIR}/COMMON.IOUNITS 
265         COMMAND ${CMAKE_CURRENT_BINARY_DIR}/compinfo | true     
266         DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/cinfo.f )
267 set_property(SOURCE ${UNRES_CINFO_DIR}/cinfo.f PROPERTY COMPILE_FLAGS ${FFLAGS0} )
268
269 #=========================================
270 # Set full unres MD sources
271 #=========================================
272 set(UNRES_MDM_SRCS ${UNRES_MDM_SRC0} ${UNRES_MDM_SRC3} ${UNRES_CINFO_DIR}/cinfo.f proc_proc.c )
273
274
275
276 #=========================================
277 # Build the binary
278 #=========================================
279 add_executable(UNRES_BIN-MD-M ${UNRES_MDM_SRCS} )
280 set_target_properties(UNRES_BIN-MD-M PROPERTIES OUTPUT_NAME ${UNRES_BIN})
281
282 #set_property(TARGET ${UNRES_BIN} PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/unres/MD )
283 #add_dependencies (${UNRES_BIN} ${UNRES_XDRFLIB})
284
285 #=========================================
286 # Link libraries
287 #=========================================
288 # link MPI library (libmpich.a)  
289 if(UNRES_WITH_MPI)
290   target_link_libraries( UNRES_BIN-MD-M ${MPIF_LIBRARIES} )
291 endif(UNRES_WITH_MPI)
292 # link libxdrf.a 
293 #message("UNRES_XDRFLIB=${UNRES_XDRFLIB}")
294 target_link_libraries( UNRES_BIN-MD-M xdrf-MD-M )
295
296 #=========================================
297 # TESTS 
298 #=========================================
299
300 #-- Copy all the data files from the test directory into the source directory
301 #SET(UNRES_TEST_FILES
302 #       ala10.inp
303 #    )
304
305 #FOREACH (UNRES_TEST_FILE ${UNRES_TEST_FILES})
306 #      SET (unres_test_dest "${CMAKE_CURRENT_BINARY_DIR}/${UNRES_TEST_FILE}")
307 #      MESSAGE (STATUS " Copying ${UNRES_TEST_FILE} from ${CMAKE_SOURCE_DIR}/examples/unres/MD/ff_gab/${UNRES_TEST_FILE} to ${unres_test_dest}")
308 #      ADD_CUSTOM_COMMAND (
309 #          TARGET     ${UNRES_BIN}
310 #          POST_BUILD
311 #          COMMAND    ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/examples/unres/MD/ff_gab/${UNRES_TEST_FILE} ${unres_test_dest}
312 #      )
313 #ENDFOREACH (UNRES_TEST_FILE ${UNRES_TEST_FILES})
314
315 #=========================================
316 # Generate data test files
317 #=========================================
318 #  test_single_ala.sh
319 #=========================================
320
321 FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/test_single_ala.sh
322 "#!/bin/sh
323 export POT=GB
324 export PREFIX=ala10
325 #-----------------------------------------------------------------------------
326 UNRES_BIN=./${UNRES_BIN}
327 #-----------------------------------------------------------------------------
328 DD=${CMAKE_SOURCE_DIR}/PARAM
329 export BONDPAR=$DD/bond.parm
330 export THETPAR=$DD/thetaml.5parm
331 export ROTPAR=$DD/scgauss.parm
332 export TORPAR=$DD/torsion_631Gdp.parm
333 export TORDPAR=$DD/torsion_double_631Gdp.parm
334 export ELEPAR=$DD/electr_631Gdp.parm
335 export SIDEPAR=$DD/sc_GB_opt.1gab_3S_qclass5no310-shan2-sc-16-10-8k
336 export FOURIER=$DD/fourier_opt.parm.1igd_hc_iter3_3
337 export SCPPAR=$DD/scp.parm
338 export SCCORPAR=$DD/rotcorr_AM1.parm
339 export PATTERN=$DD/patterns.cart
340 #-----------------------------------------------------------------------------
341 $UNRES_BIN
342 ")
343
344 #=========================================
345 #  ala10.inp
346 #=========================================
347
348 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/ala10.inp
349 "ala10 unblocked
350 SEED=-1111333 MD ONE_LETTER rescale_mode=2 PDBOUT
351 nstep=15000 ntwe=100 ntwx=1000 dt=0.1 lang=0 tbf t_bath=300 damax=1.0          &
352 reset_moment=1000 reset_vel=1000 MDPDB
353 WLONG=1.35279 WSCP=1.59304 WELEC=0.71534 WBOND=1.00000 WANG=1.13873            &
354 WSCLOC=0.16258 WTOR=1.98599 WTORD=1.57069 WCORRH=0.42887 WCORR5=0.00000        &
355 WCORR6=0.00000 WEL_LOC=0.16036 WTURN3=1.68722 WTURN4=0.66230 WTURN6=0.00000    &
356 WVDWPP=0.11371 WHPB=1.00000                                                    &
357 CUTOFF=7.00000 WCORR4=0.00000
358 12
359 XAAAAAAAAAAX 
360  0
361  0
362    90.0000   90.0000   90.0000  90.000   90.000   90.000   90.000   90.000 
363    90.0000   90.0000
364   180.0000  180.0000  180.0000 180.000  180.000  180.000  180.000  180.000
365   180.0000
366   110.0000  110.0000  110.0000 100.000  110.000  100.000  110.000  110.000 
367   110.0000  110.0000
368  -120.0000 -120.0000 -120.000 -120.000 -120.000 -120.000 -120.000 -120.000
369  -120.0000 -120.0000
370 ")
371
372
373 # Add tests
374
375 if(NOT UNRES_WITH_MPI)
376
377   add_test(NAME UNRES_MD_Ala10 COMMAND sh ${CMAKE_CURRENT_BINARY_DIR}/test_single_ala.sh )
378
379 endif(NOT UNRES_WITH_MPI)
380