1      function task_smd_energy(rtdb)
2      implicit none
3      integer rtdb
4
5#include "inp.fh"
6#include "mafdecls.fh"
7#include "rtdb.fh"
8#include "stdio.fh"
9#include "errquit.fh"
10#include "util.fh"
11#include <mpif.h>
12#include "global.fh"
13      logical task_smd_energy
14      character*72 namespace
15      character*32 pname
16      double precision etime1,etime2,etime3,etime4,etime5,etime6
17      double precision eetime4,eetime5,eetime6
18      double precision eetime1,eetime2,eetime3
19      double precision etime31
20      double precision energy,ewald1,ewald2,evdw
21      logical operiodic
22      integer i,nr,igr
23      integer gr_list(1)
24      integer gr_size
25      character(256) rtdb_fname
26      character(256) rtdb_fname_group(2)
27      logical master
28      integer ierr
29c
30      integer world_me
31c
32      pname = "task_smd_energy"
33      if(ga_pgroup_get_default().ne.ga_pgroup_get_world())
34     $  call errquit('Cannot run SMD in sub-groups yet',0,0)
35c
36      world_me = ga_nodeid()
37c
38      call ga_pgroup_sync(ga_pgroup_get_world())
39c
40c     start the clock
41c     ---------------
42      etime1=0.0
43      etime2=0.0
44      etime3=0.0
45      etime4=0.0
46      etime5=0.0
47      etime6=0.0
48c
49      etime1 = mpi_wtime()
50      eetime1 = util_cpusec()
51      call smd_init("energy",rtdb)
52      etime2 = mpi_wtime()
53c
54c      write (*,*) 'calling ga_set_all', ga_nodeid()
55c      call util_flush(6)
56c
57      if(ga_nodeid().eq.0)
58     *   call smd_charge_ga_set_all()
59c
60c      write (*,*) 'done ga_set_all', ga_nodeid()
61c      call util_flush(6)
62      call ga_sync()
63
64c      write (*,*) 'calling rtdb_close', ga_nodeid()
65c      call util_flush(6)
66
67      if(.not.rtdb_close(rtdb, 'keep'))
68     +  call errquit('Failed to close group rtdb',0, GEOM_ERR)
69c      write (*,*) 'done rtdb_close', ga_nodeid()
70c      call util_flush(6)
71      call ga_sync()
72      call mpi_barrier(mpi_comm_world,ierr)
73c
74c      write(*,*) "1"//pname,ga_nodeid(), world_me
75c      call util_flush(6)
76c      call cpu_time(etime3)
77      etime3 = mpi_wtime()
78      if(world_me.eq.0) then
79c         write(*,*) "1.s"//pname,ga_nodeid(), world_me
80c         call util_flush(6)
81         call sched_grp_server_code()
82      else
83c         write(*,*) "1.c"//pname,ga_nodeid(), world_me
84c         call util_flush(6)
85         call sched_grp_client_code()
86      endif
87c      write(*,*) "2"//pname,ga_nodeid()
88c      call util_flush(6)
89c
90c      call cpu_time(etime31)
91      etime31 = mpi_wtime()
92      call ga_sync()
93      call mpi_barrier(MPI_COMM_WORLD,ierr)
94c      call cpu_time(etime4)
95      etime4 = mpi_wtime()
96      call smd_rtdb_get_name(rtdb_fname)
97      if (.not. rtdb_open(rtdb_fname,'old',rtdb)) call errquit
98     *     (' rtdb_open old failed ',0,0)
99c
100
101      etime5 = mpi_wtime()
102      eetime5 = util_cpusec()
103c
104      call smd_end(rtdb)
105c
106      etime6 = mpi_wtime()
107      eetime6 = util_cpusec()
108      if(ga_nodeid().eq.0) then
109      write(luout,'(/i4,a,2f20.3)') ga_nodeid(),'Total CPU time : ',
110     *   (etime6-etime1),(eetime6-eetime1)
111      write(luout,'(/i4,a,f20.3)') ga_nodeid(),'Initialization : ',
112     *   (etime2-etime1)
113      write(luout,'(/i4,a,f20.3)') ga_nodeid(),'Client-Server : ',
114     *   (etime31-etime3)
115      write(luout,'(/i4,a,f20.3)') ga_nodeid(),'Client-Server+sync : ',
116     *   (etime4-etime3)
117      write(luout,'(/i4,a,f20.3)') ga_nodeid(),'SMD end : ',
118     *   (etime6-etime5)
119      end if
120c      write(luout,'(/,a,f20.3)')'Verlet         : ',(etime3-etime2)
121c      write(luout,'(/,a,f20.3)')'Force          : ',(etime4-etime3)
122c
123      energy = 0.0d0
124      if (.not. rtdb_put(rtdb,'smd:energy',mt_dbl,1,energy))
125     $     call errquit(pname//'failed put energy', 0, RTDB_ERR)
126c
127      task_smd_energy = .true.
128c
129      return
130      END
131
132
133      function task_smd_energy2(rtdb)
134      implicit none
135      integer rtdb
136
137#include "inp.fh"
138#include "mafdecls.fh"
139#include "rtdb.fh"
140#include "stdio.fh"
141#include "errquit.fh"
142#include "util.fh"
143#include "global.fh"
144      logical task_smd_energy2
145      character*72 namespace
146      character*32 pname
147      double precision etime1,etime2,etime3,etime4,etime5,etime6
148      double precision energy,ewald1,ewald2,evdw
149      logical operiodic
150      integer i,nr,igr
151      integer gr_list(1)
152      integer gr_size
153      character(256) rtdb_fname
154      character(256) rtdb_fname_group(2)
155      logical master
156c
157      logical util_sgstart
158      external util_sgstart
159      integer util_sgroup_mygroup
160      external util_sgroup_mygroup
161c
162       if(.not.util_sgstart(rtdb))
163     $  call errquit('Error in SUBGROUPS init', 0, RTDB_ERR)
164
165      call smd_rtdb_set_handle(rtdb)
166
167      pname = "task_smd_energy"
168c      write(*,*) "in "//pname,util_sgroup_mygroup(),rtdb
169c
170c     start the clock
171c     ---------------
172      etime1=0.0
173      etime2=0.0
174      etime3=0.0
175      etime4=0.0
176      etime5=0.0
177      etime6=0.0
178      call cpu_time(etime1)
179c
180      call cpu_time(etime1)
181      call smd_init("energy",rtdb)
182      call cpu_time(etime2)
183c
184c      call smd_coords_print(54)
185      call smd_vlist_update(.true.,.true.)
186      call cpu_time(etime3)
187c
188      call smd_system_nres(nr)
189c
190      write(*,*) "number of monomers",nr
191
192c      call smd_charge_print(89)
193      if (util_sgroup_mygroup().eq.1) then
194      call smd_monomer(187)
195      end if
196c      if (util_sgroup_mygroup().eq.2) then
197c      call smd_monomer(74)
198c      end if
199c      call smd_charge_print(90)
200      call cpu_time(etime4)
201c
202c      write(6,*) "before sync",util_sgroup_mygroup()
203c      call util_flush(6)
204      call ga_pgroup_sync(ga_pgroup_get_world())
205      call smd_end(rtdb)
206c
207
208      call cpu_time(etime6)
209      write(luout,'(/,a,f20.3)')'Total CPU time : ',(etime6-etime1)
210      write(luout,'(/,a,f20.3)')'Initialization : ',(etime2-etime1)
211      write(luout,'(/,a,f20.3)')'Verlet         : ',(etime3-etime2)
212      write(luout,'(/,a,f20.3)')'Force          : ',(etime4-etime3)
213
214      call util_sgend(rtdb)
215      energy = 0.0d0
216      if (.not. rtdb_put(rtdb,'smd:energy',mt_dbl,1,energy))
217     $     call errquit(pname//'failed put energy', 0, RTDB_ERR)
218      write(*,*) "Goodbye from task_smd",util_sgroup_mygroup()
219
220      task_smd_energy2 = .true.
221
222      return
223      END
224
225      function task_smd_energy1(rtdb)
226      implicit none
227      integer rtdb
228
229#include "inp.fh"
230#include "mafdecls.fh"
231#include "rtdb.fh"
232#include "stdio.fh"
233#include "errquit.fh"
234#include "util.fh"
235#include "global.fh"
236      logical task_smd_energy1
237      character*72 namespace
238      character*32 pname
239      double precision etime1,etime2,etime3,etime4,etime5,etime6
240      double precision energy,ewald1,ewald2,evdw
241      logical operiodic
242      integer i,nr,igr
243      integer gr_list(1)
244      integer gr_size
245      character(256) rtdb_fname
246      character(256) rtdb_fname_group(2)
247      logical master
248c
249      logical util_sgstart
250      external util_sgstart
251      integer util_sgroup_mygroup
252      external util_sgroup_mygroup
253c
254       if(.not.util_sgstart(rtdb))
255     $  call errquit('Error in SUBGROUPS init', 0, RTDB_ERR)
256
257c      master = ga_nodeid().eq.0
258c      call smd_rtdb_get_handle(rtdb)
259c      if (.not. rtdb_getfname(rtdb, rtdb_fname)) call
260c     >     errquit('rtdb_fname call failed',0,0)
261c      rtdb_fname_group(1)="./perm/test001.db"
262c      rtdb_fname_group(2)="./perm/test002.db"
263c
264c      if(ga_nodeid().eq.0) then
265c        call util_file_copy(rtdb_fname,rtdb_fname_group(1))
266c        call util_file_copy(rtdb_fname,rtdb_fname_group(2))
267c
268c      end if
269c      call ga_sync()
270c      write(*,*) "rtdb_fname",rtdb_fname
271c
272c      if (.not. rtdb_close(rtdb, 'keep')) call errquit(
273c     >     ' failed to close rtdb for sg ',0,0)
274c
275c      gr_list(1) = ga_nodeid()
276c      gr_size = 1
277c      call ga_sync()
278c      igr=ga_pgroup_create(gr_list, gr_size)
279c      call ga_pgroup_set_default(igr)
280c
281c
282c      i = ga_nodeid()+1
283c      if (.not. rtdb_open(rtdb_fname_group(i),'old',rtdb))
284c     >     call errquit
285c     *     (' rtdb_open old failed ',0,0)
286c
287c      call ga_sync()
288cc      if(util_sgroup_mygroup().eq.1) then
289c      if(.true.) then
290      call smd_rtdb_set_handle(rtdb)
291
292      pname = "task_smd_energy"
293      write(*,*) "in "//pname,util_sgroup_mygroup(),rtdb
294c
295c     start the clock
296c     ---------------
297      etime1=0.0
298      etime2=0.0
299      etime3=0.0
300      etime4=0.0
301      etime5=0.0
302      etime6=0.0
303      call cpu_time(etime1)
304c
305      call cpu_time(etime1)
306      call smd_init("energy",rtdb)
307      call cpu_time(etime2)
308c
309c      call smd_coords_print(54)
310      call smd_vlist_update(.true.,.true.)
311      call cpu_time(etime3)
312c
313      call smd_system_nres(nr)
314c
315      write(*,*) "number of monomers",nr
316
317c      call smd_charge_print(89)
318c      do i=1,1
319      if(util_sgroup_mygroup().eq.1) then
320      call smd_monomer(1)
321      end if
322c      end do
323c      call smd_charge_print(90)
324      call cpu_time(etime4)
325c
326      call smd_end(rtdb)
327c
328
329      call cpu_time(etime6)
330      write(luout,'(/,a,f20.3)')'Total CPU time : ',(etime6-etime1)
331      write(luout,'(/,a,f20.3)')'Initialization : ',(etime2-etime1)
332      write(luout,'(/,a,f20.3)')'Verlet         : ',(etime3-etime2)
333      write(luout,'(/,a,f20.3)')'Force          : ',(etime4-etime3)
334
335c      end if
336c      if(.not.ga_pgroup_destroy(igr))
337c     $     call errquit(pname//'failed to destroy groups', 0, 0)
338
339      call util_sgend(rtdb)
340      energy = 0.0d0
341      if (.not. rtdb_put(rtdb,'smd:energy',mt_dbl,1,energy))
342     $     call errquit(pname//'failed put energy', 0, RTDB_ERR)
343      write(*,*) "Goodbye from task_smd",util_sgroup_mygroup()
344
345      task_smd_energy1 = .true.
346
347c      call ga_sync()
348      return
349      END
350
351      function task_smd_energy0(rtdb)
352      implicit none
353      integer rtdb
354
355#include "inp.fh"
356#include "mafdecls.fh"
357#include "rtdb.fh"
358#include "stdio.fh"
359#include "errquit.fh"
360      logical task_smd_energy0
361      character*72 namespace
362      character*32 pname
363      double precision etime1,etime2,etime3,etime4,etime5,etime6
364      double precision energy,ewald1,ewald2,evdw
365      logical operiodic
366
367      pname = "task_smd_energy"
368      write(*,*) "in "//pname
369c
370c     start the clock
371c     ---------------
372      etime1=0.0
373      etime2=0.0
374      etime3=0.0
375      etime4=0.0
376      etime5=0.0
377      etime6=0.0
378      call cpu_time(etime1)
379c
380      call cpu_time(etime1)
381      call smd_init("energy",rtdb)
382      call cpu_time(etime2)
383c
384      call smd_vlist_update(.true.,.true.)
385      call cpu_time(etime3)
386c
387      call smd_force_compute()
388      call cpu_time(etime4)
389c
390      call smd_energy_compute()
391      call cpu_time(etime5)
392c
393      call smd_energy_print(6)
394c
395      call smd_end(rtdb)
396c
397      if (.not. rtdb_put(rtdb,'smd:energy',mt_dbl,1,energy))
398     $     call errquit(pname//'failed put energy', 0, RTDB_ERR)
399c
400
401      call cpu_time(etime6)
402      write(luout,'(/,a,f20.3)')'Total CPU time : ',(etime6-etime1)
403      write(luout,'(/,a,f20.3)')'Initialization : ',(etime2-etime1)
404      write(luout,'(/,a,f20.3)')'Verlet         : ',(etime3-etime2)
405      write(luout,'(/,a,f20.3)')'Force          : ',(etime4-etime3)
406
407
408      write(*,*) "Goodbye from task_smd"
409      task_smd_energy0 = .true.
410
411      return
412      END
413c $Id$
414