prng and not prng_32 for f95
[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 else()
91   set(UNRES_MD_SRC0 ${UNRES_MD_SRC0} prng_32.F )
92 endif (Fortran_COMPILER_NAME STREQUAL "ifort")
93
94
95 set(UNRES_MD_SRC3 
96         energy_p_new_barrier.F 
97         energy_p_new-sep_barrier.F 
98         gradient_p.F )
99
100 set(UNRES_MD_PP_SRC
101         cartder.F
102         chainbuild.F 
103         checkder_p.F 
104         compare_s1.F 
105         dihed_cons.F 
106         econstr_local.F 
107         energy_p_new_barrier.F 
108         energy_p_new-sep_barrier.F 
109         energy_split-sep.F 
110         entmcm.F 
111         gen_rand_conf.F
112         geomout.F 
113         gradient_p.F 
114         initialize_p.F 
115         intcartderiv.F 
116         lagrangian_lesyng.F 
117         mc.F 
118         mcm.F 
119         MD_A-MTS.F
120         minimize_p.F 
121         minim_mcmf.F 
122         MP.F 
123         MREMD.F 
124         parmread.F 
125         q_measure1.F 
126         q_measure3.F 
127         q_measure.F
128         rattle.F 
129         readpdb.F 
130         readrtns.F 
131         regularize.F 
132         rmsd.F 
133         sc_move.F 
134         stochfric.F 
135         test.F 
136         thread.F 
137         timing.F
138         unres.F 
139         proc_proc.c 
140
141
142
143 if(NOT Fortran_COMPILER_NAME STREQUAL "ifort")
144   set(UNRES_MD_PP_SRC ${UNRES_MD_PP_SRC} prng_32.F) 
145 endif(NOT Fortran_COMPILER_NAME STREQUAL "ifort")
146
147 #================================================
148 # Set comipiler flags for different sourcefiles  
149 #================================================
150 if (Fortran_COMPILER_NAME STREQUAL "ifort")
151   set(FFLAGS0 "-ip -w" ) 
152   set(FFLAGS1 "-w -g -d2 -CA -CB" ) 
153   set(FFLAGS2 "-w -g -00 ")
154   #set(FFLAGS3 "-c -w -O3 -ipo -ipo_obj -opt_report" )
155   set(FFLAGS3 "-w -ipo " )
156 elseif (Fortran_COMPILER_NAME STREQUAL "gfortran")
157   set(FFLAGS0 "-std=legacy -I. " ) 
158   set(FFLAGS1 "-std=legacy -g -I. " ) 
159   set(FFLAGS2 "-std=legacy -I. ")
160   #set(FFLAGS3 "-c -w -O3 -ipo -ipo_obj -opt_report" )
161   set(FFLAGS3 "-std=legacy -I. " )
162 endif (Fortran_COMPILER_NAME STREQUAL "ifort")
163
164
165 # Add MPI compiler flags
166 if(UNRES_WITH_MPI)
167   set(FFLAGS0 "${FFLAGS0} -I${MPIF_INCLUDE_DIRECTORIES}")
168   set(FFLAGS1 "${FFLAGS1} -I${MPIF_INCLUDE_DIRECTORIES}")
169   set(FFLAGS2 "${FFLAGS2} -I${MPIF_INCLUDE_DIRECTORIES}")
170   set(FFLAGS3 "${FFLAGS3} -I${MPIF_INCLUDE_DIRECTORIES}")
171 endif(UNRES_WITH_MPI)
172
173 set_property(SOURCE ${UNRES_MD_SRC0} APPEND PROPERTY COMPILE_FLAGS ${FFLAGS0} )
174 #set_property(SOURCE ${UNRES_MD_SRC1} PROPERTY COMPILE_FLAGS ${FFLAGS1} )
175 #set_property(SOURCE ${UNRES_MD_SRC2} PROPERTY COMPILE_FLAGS ${FFLAGS2} )
176 set_property(SOURCE ${UNRES_MD_SRC3} PROPERTY COMPILE_FLAGS ${FFLAGS3} )
177
178 #=========================================
179 # Settings for GAB force field 
180 #=========================================
181 if(UNRES_MD_FF STREQUAL "GAB" )
182   # set preprocesor flags   
183   set(CPPFLAGS "PROCOR -DUNRES -DISNAN -DSPLITELE -DLANG0 -DCRYST_BOND -DCRYST_THETA -DCRYST_SC" )
184
185 #=========================================
186 #  Settings for E0LL2Y force field
187 #=========================================
188 elseif(UNRES_MD_FF STREQUAL "E0LL2Y")
189   # set preprocesor flags   
190   set(CPPFLAGS "PROCOR -DUNRES -DISNAN -DSPLITELE -DLANG0" )
191 endif(UNRES_MD_FF STREQUAL "GAB")
192
193 #=========================================
194 # System specific flags
195 #=========================================
196 if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
197   set(CPPFLAGS "${CPPFLAGS} -DLINUX") 
198 endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
199
200 #=========================================
201 # Compiler specific flags
202 #=========================================
203
204 if (Fortran_COMPILER_NAME STREQUAL "ifort")
205   # Add ifort preprocessor flags
206   set(CPPFLAGS "${CPPFLAGS} -DPGI") 
207 elseif (Fortran_COMPILER_NAME STREQUAL "f95")
208   # Add new gfortran flags
209   set(CPPFLAGS "${CPPFLAGS} -DG77") 
210 elseif (Fortran_COMPILER_NAME STREQUAL "gfortran")
211   # Add old gfortran flags
212   set(CPPFLAGS "${CPPFLAGS} -DG77") 
213 endif (Fortran_COMPILER_NAME STREQUAL "ifort")
214
215 #=========================================
216 # Add MPI preprocessor flags
217 #=========================================
218 if (UNRES_WITH_MPI)
219   set(CPPFLAGS "${CPPFLAGS} -DMP -DMPI") 
220 endif(UNRES_WITH_MPI)
221
222 #=========================================
223 # Apply preprocesor flags to *.F files
224 #=========================================
225 set_property(SOURCE ${UNRES_MD_PP_SRC} PROPERTY COMPILE_DEFINITIONS ${CPPFLAGS} )  
226
227
228 #========================================
229 #  Setting binary name
230 #========================================
231 if(UNRES_WITH_MPI) 
232   # binary with mpi
233   set(UNRES_BIN "unres_${Fortran_COMPILER_NAME}_MPICH_${UNRES_MD_FF}.exe")
234 else(UNRES_WITH_MPI)
235   # binary without mpi
236   set(UNRES_BIN "unres_${Fortran_COMPILER_NAME}_single_${UNRES_MD_FF}.exe")
237 endif(UNRES_WITH_MPI)  
238
239 #=========================================
240 # cinfo.f workaround for cmake
241 #=========================================
242 # get the current date  
243 TODAY(DATE)
244 # generate cinfo.f
245
246 set(CINFO "${CMAKE_CURRENT_BINARY_DIR}/cinfo.f")
247 FILE(WRITE ${CINFO}
248 "C CMake generated file
249        subroutine cinfo
250        include 'COMMON.IOUNITS'
251        write(iout,*)'++++ Compile info ++++'
252        write(iout,*)'Version ${UNRES_MAJOR}.${UNRES_MINOR} build ${UNRES_PATCH}'
253 ")
254
255 CINFO_FORMAT(${CINFO} "Compiled" "${DATE}" )
256 CINFO_FORMAT(${CINFO} "Compiled by" "$ENV{USER}@$ENV{HOST}" )
257 CINFO_FORMAT(${CINFO} "OS name:" "${CMAKE_SYSTEM_NAME}" )
258 CINFO_FORMAT(${CINFO} "OS release:" "${CMAKE_SYSTEM}" )
259 CINFO_FORMAT(${CINFO} "Fortran Compiler:" "${CMAKE_Fortran_COMPILER}" )
260 CINFO_FORMAT(${CINFO} "MD Force field:" "${UNRES_MD_FF}" )
261 CINFO_FORMAT(${CINFO} "CPPFLAGS =" "${CPPFLAGS}")
262
263 FILE(APPEND ${CINFO} 
264 "       write(iout,*)'++++ End of compile info ++++'  
265        return 
266        end ")
267
268 # add include path
269 set_property(SOURCE ${CMAKE_CURRENT_BINARY_DIR}/cinfo.f PROPERTY COMPILE_FLAGS "${FFLAGS0} -I${CMAKE_CURRENT_SOURCE_DIR}")
270
271 #=========================================
272 # Set full unres MD sources
273 #=========================================
274 set(UNRES_MD_SRCS ${UNRES_MD_SRC0} ${UNRES_MD_SRC3} ${CMAKE_CURRENT_BINARY_DIR}/cinfo.f )
275
276
277 #=========================================
278 # Build the binary
279 #=========================================
280 add_executable(UNRES_BIN-MD ${UNRES_MD_SRCS} )
281 set_target_properties(UNRES_BIN-MD PROPERTIES OUTPUT_NAME ${UNRES_BIN})
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 #=========================================
287 # Link libraries
288 #=========================================
289 # link MPI library (libmpich.a)  
290 if(UNRES_WITH_MPI)
291   target_link_libraries( UNRES_BIN-MD ${MPIF_LIBRARIES} )
292 endif(UNRES_WITH_MPI)
293 # link libxdrf.a 
294 #message("UNRES_XDRFLIB=${UNRES_XDRFLIB}")
295 target_link_libraries( UNRES_BIN-MD xdrf )
296
297 #=========================================
298 # TESTS 
299 #=========================================
300
301 #-- Copy all the data files from the test directory into the source directory
302 #SET(UNRES_TEST_FILES
303 #       ala10.inp
304 #    )
305
306 #FOREACH (UNRES_TEST_FILE ${UNRES_TEST_FILES})
307 #      SET (unres_test_dest "${CMAKE_CURRENT_BINARY_DIR}/${UNRES_TEST_FILE}")
308 #      MESSAGE (STATUS " Copying ${UNRES_TEST_FILE} from ${CMAKE_SOURCE_DIR}/examples/unres/MD/ff_gab/${UNRES_TEST_FILE} to ${unres_test_dest}")
309 #      ADD_CUSTOM_COMMAND (
310 #          TARGET     ${UNRES_BIN}
311 #          POST_BUILD
312 #          COMMAND    ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/examples/unres/MD/ff_gab/${UNRES_TEST_FILE} ${unres_test_dest}
313 #      )
314 #ENDFOREACH (UNRES_TEST_FILE ${UNRES_TEST_FILES})
315
316 #=========================================
317 # Generate data test files
318 #=========================================
319 #  test_single_ala.sh
320 #=========================================
321
322 FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/scripts/test_single_ala.sh
323 "#!/bin/sh
324 export POT=GB
325 export PREFIX=ala10
326 #-----------------------------------------------------------------------------
327 UNRES_BIN=./${UNRES_BIN}
328 #-----------------------------------------------------------------------------
329 DD=${CMAKE_SOURCE_DIR}/PARAM
330 export BONDPAR=$DD/bond.parm
331 export THETPAR=$DD/thetaml.5parm
332 export ROTPAR=$DD/scgauss.parm
333 export TORPAR=$DD/torsion_631Gdp.parm
334 export TORDPAR=$DD/torsion_double_631Gdp.parm
335 export ELEPAR=$DD/electr_631Gdp.parm
336 export SIDEPAR=$DD/sc_GB_opt.1gab_3S_qclass5no310-shan2-sc-16-10-8k
337 export FOURIER=$DD/fourier_opt.parm.1igd_hc_iter3_3
338 export SCPPAR=$DD/scp.parm
339 export SCCORPAR=$DD/sccor_pdb_shelly.dat
340 export PATTERN=$DD/patterns.cart
341 #-----------------------------------------------------------------------------
342 $UNRES_BIN
343 ")
344
345 #
346 # File permissions workaround
347 #
348 FILE(   COPY ${CMAKE_CURRENT_BINARY_DIR}/scripts/test_single_ala.sh 
349         DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
350         FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
351 )
352
353
354
355 #=========================================
356 #  ala10.inp
357 #=========================================
358
359 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/ala10.inp
360 "ala10 unblocked
361 SEED=-1111333 MD ONE_LETTER rescale_mode=2 
362 nstep=15000 ntwe=100 ntwx=1000 dt=0.1 lang=0 tbf t_bath=300 damax=1.0          &
363 reset_moment=1000 reset_vel=1000
364 WLONG=1.35279 WSCP=1.59304 WELEC=0.71534 WBOND=1.00000 WANG=1.13873            &
365 WSCLOC=0.16258 WTOR=1.98599 WTORD=1.57069 WCORRH=0.42887 WCORR5=0.00000        &
366 WCORR6=0.00000 WEL_LOC=0.16036 WTURN3=1.68722 WTURN4=0.66230 WTURN6=0.00000    &
367 WVDWPP=0.11371 WHPB=1.00000                                                    &
368 CUTOFF=7.00000 WCORR4=0.00000
369 12
370 XAAAAAAAAAAX 
371  0
372  0
373    90.0000   90.0000   90.0000  90.000   90.000   90.000   90.000   90.000 
374    90.0000   90.0000
375   180.0000  180.0000  180.0000 180.000  180.000  180.000  180.000  180.000
376   180.0000
377   110.0000  110.0000  110.0000 100.000  110.000  100.000  110.000  110.000 
378   110.0000  110.0000
379  -120.0000 -120.0000 -120.000 -120.000 -120.000 -120.000 -120.000 -120.000
380  -120.0000 -120.0000
381 ")
382
383
384 # Add tests
385
386 if(NOT UNRES_WITH_MPI)
387                   
388   add_test(NAME UNRES_MD_Ala10 COMMAND sh ${CMAKE_CURRENT_BINARY_DIR}/test_single_ala.sh )
389
390 else(NOT UNRES_WITH_MPI)
391
392
393   add_test(NAME UNRES_MD_MPI_Ala10 COMMAND mpiexec -boot ${CMAKE_CURRENT_BINARY_DIR}/test_single_ala.sh )
394
395 endif(NOT UNRES_WITH_MPI)
396