changes to avoid PMPI_Scatterv: Invalid buffer pointer in Intel MPI
[unres.git] / source / unres / src_MD-M / restbin2asc.F
1       implicit real*8 (a-h,o-z)
2       include 'DIMENSIONS'
3 c      include 'mpif.h'
4       include 'COMMON.MD'
5       include 'COMMON.IOUNITS'
6       include 'COMMON.REMD'
7       include 'COMMON.SETUP'
8       include 'COMMON.CHAIN'
9       include 'COMMON.SBRIDGE'
10       include 'COMMON.INTERACT'
11       integer*2 i_index
12      &            (maxprocs/4,maxprocs/20,maxprocs/200,maxprocs/200)
13       character*128 restin,restout
14       integer idir,n
15       irest2=33
16       ixdrf=34
17       n=iargc()
18       print *,"n",n
19       if (n.lt.5) then
20        print'(2a)',"Usage: restbin 0/1 NTRAJ NRES INRESTFILE",
21      &   " OUTRESTFILE [REMD_M] [USAMPL]"
22        print'(a)',"0 - conversion from bin to ascii / from ascii to bin"
23        print'(a)',"NTRAJ: number of trajectories"
24        print'(a)',"NRES: number of residues"
25        print'(a)',"INRESTFILE: input UNRES/MREMD restart file"
26        print'(a)',"OUTRESTFILE: output UNRES/MREMD restart file"
27        print'(a)',"USAMPL [T/F] flag for umbrella-sampling"
28        stop
29       endif  
30       call getarg(1,liczba)
31       read (liczba,*) idir
32       if (idir. ne. 0 .and. idir.ne.1) stop "idir must be 0 or 1"
33       call getarg(2,liczba)
34       read (liczba,*) nodes
35       call getarg(3,liczba)
36       read (liczba,*) nres
37       call getarg (4,restin)
38       call getarg (5,restout)
39       print *,"idir",idir," nodes",nodes," nres",nres
40       print *,"restin ",restin
41       print *,"restout ",restout
42       if (n.eq.6) then
43         call getarg(6,liczba)
44         read(liczba,*) remd_m(1)
45         do i=2,nodes
46           remd_m(i)=remd_m(1)
47         enddo
48       else
49         do i=2,nodes
50           remd_m(i)=1
51         enddo
52       endif
53       if (n.eq.7) then
54         call getarg(7,liczba)
55         read(liczba,'(L1)') usampl
56       endif
57       print *,"usampl",usampl
58       print *,"remd_m",(remd_m(i),i=1,nodes)
59       if (idir.eq.0) then
60         mremd_rst_name=restin
61         call read1restart(i_index)
62         mremd_rst_name=restout
63         call write1rst_asc(i_index)
64       else
65         mremd_rst_name=restin
66         call read1restart_asc(i_index)
67         mremd_rst_name=restout
68         call write1rst(i_index)
69       endif
70       end
71 c------------------------------------------------------------------------------
72       subroutine read1restart(i_index)
73       implicit real*8 (a-h,o-z)
74       include 'DIMENSIONS'
75 c      include 'mpif.h'
76       include 'COMMON.MD'
77       include 'COMMON.IOUNITS'
78       include 'COMMON.REMD'
79       include 'COMMON.SETUP'
80       include 'COMMON.CHAIN'
81       include 'COMMON.SBRIDGE'
82       include 'COMMON.INTERACT'
83       real d_restart1(3,2*maxres*maxprocs),r_d(3,2*maxres),
84      &     d_restart2(3,2*maxres*maxprocs),t5_restart1(5)
85       integer*2 i_index
86      &            (maxprocs/4,maxprocs/20,maxprocs/200,maxprocs/200)
87       common /przechowalnia/ d_restart1,d_restart2
88       write (*,*) "Processor",me," called read1restart"
89
90 #ifdef AIX
91       call xdrfopen_(ixdrf,mremd_rst_name, "r", iret)
92       print *,"restart file ",mremd_rst_name
93       print *,"iret",iret
94
95       do i=0,nodes-1
96         call xdrfint_(ixdrf, i2rep(i), iret)
97       enddo
98       print *,"iret",iret
99       do i=1,remd_m(1)
100         call xdrfint_(ixdrf, ifirst(i), iret)
101       enddo
102       do il=1,nodes
103         call xdrfint_(ixdrf, nupa(0,il), iret)
104         print *,"nupa(0,",il,")=",nupa(0,il)
105         do i=1,nupa(0,il)
106           call xdrfint_(ixdrf, nupa(i,il), iret)
107         enddo
108         print *,"nupa",(nupa(i,il),i=1,nupa(0,il))
109
110         call xdrfint_(ixdrf, ndowna(0,il), iret)
111         print *,"ndowna(0",il,")=",ndowna(0,il)
112         do i=1,ndowna(0,il)
113           call xdrfint_(ixdrf, ndowna(i,il), iret)
114         enddo
115         print *,"ndowna",(ndowna(i,il),i=1,ndowna(0,il))
116       enddo
117       do il=1,nodes
118         do j=1,4
119           call xdrffloat_(ixdrf, t_restart1(j,il), iret)
120         enddo
121         print *,"il",il,"t_restart",(t_restart1(j,il),j=1,4)
122       enddo
123 #else
124       call xdrfopen(ixdrf,mremd_rst_name, "r", iret)
125
126       do i=0,nodes-1
127         call xdrfint(ixdrf, i2rep(i), iret)
128       enddo
129       do i=1,remd_m(1)
130         call xdrfint(ixdrf, ifirst(i), iret)
131       enddo
132       do il=1,nodes
133         call xdrfint(ixdrf, nupa(0,il), iret)
134         do i=1,nupa(0,il)
135           call xdrfint(ixdrf, nupa(i,il), iret)
136         enddo
137
138         call xdrfint(ixdrf, ndowna(0,il), iret)
139         do i=1,ndowna(0,il)
140           call xdrfint(ixdrf, ndowna(i,il), iret)
141         enddo
142       enddo
143       do il=1,nodes
144         do j=1,4
145           call xdrffloat(ixdrf, t_restart1(j,il), iret)
146         enddo
147       enddo
148 #endif
149       totT=t5_restart1(1)              
150       EK=t5_restart1(2)
151       potE=t5_restart1(3)
152       t_bath=t5_restart1(4)
153
154       do il=0,nodes-1
155         do i=1,2*nres
156           do j=1,3
157 #ifdef AIX
158             call xdrffloat_(ixdrf, d_restart1(j,i+2*nres*il), iret)
159 #else
160             call xdrffloat(ixdrf, d_restart1(j,i+2*nres*il), iret)
161 #endif
162           enddo
163         enddo
164       enddo
165
166       do il=0,nodes-1
167         do i=1,2*nres
168           do j=1,3
169 #ifdef AIX
170             call xdrffloat_(ixdrf, d_restart2(j,i+2*nres*il), iret)
171 #else
172             call xdrffloat(ixdrf, d_restart2(j,i+2*nres*il), iret)
173 #endif
174           enddo
175         enddo
176       enddo
177
178       if (usampl) then
179 #ifdef AIX
180         call xdrfint_(ixdrf, nset, iret)
181         do i=1,nset
182           call xdrfint_(ixdrf,mset(i), iret)
183         enddo
184         do i=0,nodes-1
185           call xdrfint_(ixdrf,i2set(i), iret)
186         enddo
187         do il=1,nset
188           do il1=1,mset(il)
189             do i=1,nrep
190               do j=1,remd_m(i)
191                 call xdrfint_(ixdrf,itmp, iret)
192                 i_index(i,j,il,il1)=itmp
193               enddo
194             enddo
195           enddo
196         enddo
197 #else
198         call xdrfint(ixdrf, nset, iret)
199         do i=1,nset
200           call xdrfint(ixdrf,mset(i), iret)
201         enddo
202         do i=0,nodes-1
203           call xdrfint(ixdrf,i2set(i), iret)
204         enddo
205         do il=1,nset
206           do il1=1,mset(il)
207             do i=1,nrep
208               do j=1,remd_m(i)
209                 call xdrfint(ixdrf,itmp, iret)
210                 i_index(i,j,il,il1)=itmp
211               enddo
212             enddo
213           enddo
214         enddo
215 #endif
216 c              call mpi_scatter(i2set,1,mpi_integer,
217 c     &           iset,1,mpi_integer,king,
218 c     &           CG_COMM,ierr) 
219 c
220       endif
221 #ifdef AIX
222       call xdrfclose_(ixdrf, iret)
223 #else
224       call xdrfclose(ixdrf, iret)
225 #endif
226       return
227       end
228 c------------------------------------------------------------------------------------
229       subroutine write1rst(i_index)
230       implicit real*8 (a-h,o-z)
231       include 'DIMENSIONS'
232 c      include 'mpif.h'
233       include 'COMMON.MD'
234       include 'COMMON.IOUNITS'
235       include 'COMMON.REMD'
236       include 'COMMON.SETUP'
237       include 'COMMON.CHAIN'
238       include 'COMMON.SBRIDGE'
239       include 'COMMON.INTERACT'
240                
241       real d_restart1(3,2*maxres*maxprocs),r_d(3,2*maxres),
242      &     d_restart2(3,2*maxres*maxprocs)
243       real t5_restart1(5)
244       integer iret,itmp
245       integer*2 i_index
246      &            (maxprocs/4,maxprocs/20,maxprocs/200,maxprocs/200)
247        common /przechowalnia/ d_restart1,d_restart2
248
249 #ifdef AIX
250          call xdrfopen_(ixdrf,mremd_rst_name, "w", iret)
251          do i=0,nodes-1
252           call xdrfint_(ixdrf, i2rep(i), iret)
253          enddo
254          do i=1,remd_m(1)
255           call xdrfint_(ixdrf, ifirst(i), iret)
256          enddo
257          do il=1,nodes
258               do i=0,nupa(0,il)
259                call xdrfint_(ixdrf, nupa(i,il), iret)
260               enddo
261
262               do i=0,ndowna(0,il)
263                call xdrfint_(ixdrf, ndowna(i,il), iret)
264               enddo
265          enddo
266
267          do il=1,nodes
268            do j=1,4
269             call xdrffloat_(ixdrf, t_restart1(j,il), iret)
270            enddo
271          enddo
272
273          do il=0,nodes-1
274            do i=1,2*nres
275             do j=1,3
276              call xdrffloat_(ixdrf, d_restart1(j,i+2*nres*il), iret)
277             enddo
278            enddo
279          enddo
280          do il=0,nodes-1
281            do i=1,2*nres
282             do j=1,3
283              call xdrffloat_(ixdrf, d_restart2(j,i+2*nres*il), iret)
284             enddo
285            enddo
286          enddo
287
288          if(usampl) then
289            call xdrfint_(ixdrf, nset, iret)
290            do i=1,nset
291              call xdrfint_(ixdrf,mset(i), iret)
292            enddo
293            do i=0,nodes-1
294              call xdrfint_(ixdrf,i2set(i), iret)
295            enddo
296            do il=1,nset
297              do il1=1,mset(il)
298                do i=1,nrep
299                  do j=1,remd_m(i)
300                    itmp=i_index(i,j,il,il1)
301                    call xdrfint_(ixdrf,itmp, iret)
302                  enddo
303                enddo
304              enddo
305            enddo
306            
307          endif
308          call xdrfclose_(ixdrf, iret)
309 #else
310          call xdrfopen(ixdrf,mremd_rst_name, "w", iret)
311          do i=0,nodes-1
312           call xdrfint(ixdrf, i2rep(i), iret)
313          enddo
314          do i=1,remd_m(1)
315           call xdrfint(ixdrf, ifirst(i), iret)
316          enddo
317          do il=1,nodes
318               do i=0,nupa(0,il)
319                call xdrfint(ixdrf, nupa(i,il), iret)
320               enddo
321
322               do i=0,ndowna(0,il)
323                call xdrfint(ixdrf, ndowna(i,il), iret)
324               enddo
325          enddo
326
327          do il=1,nodes
328            do j=1,4
329             call xdrffloat(ixdrf, t_restart1(j,il), iret)
330            enddo
331          enddo
332
333          do il=0,nodes-1
334            do i=1,2*nres
335             do j=1,3
336              call xdrffloat(ixdrf, d_restart1(j,i+2*nres*il), iret)
337             enddo
338            enddo
339          enddo
340          do il=0,nodes-1
341            do i=1,2*nres
342             do j=1,3
343              call xdrffloat(ixdrf, d_restart2(j,i+2*nres*il), iret)
344             enddo
345            enddo
346          enddo
347
348
349              if(usampl) then
350               call xdrfint(ixdrf, nset, iret)
351               do i=1,nset
352                 call xdrfint(ixdrf,mset(i), iret)
353               enddo
354               do i=0,nodes-1
355                 call xdrfint(ixdrf,i2set(i), iret)
356               enddo
357               do il=1,nset
358                do il1=1,mset(il)
359                 do i=1,nrep
360                  do j=1,remd_m(i)
361                    itmp=i_index(i,j,il,il1)
362                    call xdrfint(ixdrf,itmp, iret)
363                  enddo
364                 enddo
365                enddo
366               enddo
367            
368              endif
369          call xdrfclose(ixdrf, iret)
370 #endif
371       return
372       end
373 c----------------------------------------------------------------------------
374       subroutine read1restart_asc(i_index)
375       implicit real*8 (a-h,o-z)
376       include 'DIMENSIONS'
377       include 'COMMON.MD'
378       include 'COMMON.IOUNITS'
379       include 'COMMON.REMD'
380       include 'COMMON.SETUP'
381       include 'COMMON.CHAIN'
382       include 'COMMON.SBRIDGE'
383       include 'COMMON.INTERACT'
384                
385       real d_restart1(3,2*maxres*maxprocs),r_d(3,2*maxres),
386      &     d_restart2(3,2*maxres*maxprocs)
387       real t5_restart1(5)
388       integer iret,itmp
389       integer*2 i_index
390      &            (maxprocs/4,maxprocs/20,maxprocs/200,maxprocs/200)
391       common /przechowalnia/ d_restart1,d_restart2
392
393       open(irest2,file=mremd_rst_name,status="old")
394       read (irest2,*) (i2rep(i),i=0,nodes-1)
395       read (irest2,*) (ifirst(i),i=1,remd_m(1))
396       do il=1,nodes
397         read (irest2,*) nupa(0,il),(nupa(i,il),i=1,nupa(0,il))
398         read (irest2,*) ndowna(0,il),(ndowna(i,il),i=1,ndowna(0,il))
399       enddo
400       do il=1,nodes
401         read (irest2,*) (t_restart1(j,il),j=1,4)
402       enddo
403       do il=0,nodes-1
404         do i=1,2*nres
405           read (irest2,*) (d_restart1(j,i+2*nres*il),j=1,3)
406         enddo
407       enddo
408       do il=0,nodes-1
409         do i=1,2*nres
410           read (irest2,*) (d_restart2(j,i+2*nres*il),j=1,3)
411         enddo
412       enddo
413
414       if (usampl) then
415         read (irest2,*) nset
416         read (irest2,*) (mset(i),i=1,nset)
417         read (irest2,*) (i2set(i),i=1,nodes-1)
418         do il=1,nset
419           do il1=1,mset(il)
420             do i=1,nrep
421               read (irest2,*) (i_index(i,j,il,il1),j=1,remd_m(i))
422             enddo
423           enddo
424         enddo
425       endif
426       return
427       end
428 c---------------------------------------------------------------------------
429       subroutine write1rst_asc(i_index)
430       implicit real*8 (a-h,o-z)
431       include 'DIMENSIONS'
432       include 'COMMON.MD'
433       include 'COMMON.IOUNITS'
434       include 'COMMON.REMD'
435       include 'COMMON.SETUP'
436       include 'COMMON.CHAIN'
437       include 'COMMON.SBRIDGE'
438       include 'COMMON.INTERACT'
439                
440       real d_restart1(3,2*maxres*maxprocs),r_d(3,2*maxres),
441      &     d_restart2(3,2*maxres*maxprocs)
442       real t5_restart1(5)
443       integer iret,itmp
444       integer*2 i_index
445      &            (maxprocs/4,maxprocs/20,maxprocs/200,maxprocs/200)
446       common /przechowalnia/ d_restart1,d_restart2
447
448       open(irest2,file=mremd_rst_name,status="unknown")
449       write (irest2,*) (i2rep(i),i=0,nodes-1)
450       write (irest2,*) (ifirst(i),i=1,remd_m(1))
451       do il=1,nodes
452         write (irest2,*) nupa(0,il),(nupa(i,il),i=1,nupa(0,il))
453         write (irest2,*) ndowna(0,il),(ndowna(i,il),i=1,ndowna(0,il))
454       enddo
455       do il=1,nodes
456         write (irest2,*) (t_restart1(j,il),j=1,4)
457       enddo
458       do il=0,nodes-1
459         do i=1,2*nres
460           write (irest2,*) (d_restart1(j,i+2*nres*il),j=1,3)
461         enddo
462       enddo
463       do il=0,nodes-1
464         do i=1,2*nres
465           write (irest2,*) (d_restart2(j,i+2*nres*il),j=1,3)
466         enddo
467       enddo
468
469       if (usampl) then
470         write (irest2,*) nset
471         write (irest2,*) (mset(i),i=1,nset)
472         write (irest2,*) (i2set(i),i=1,nodes-1)
473         do il=1,nset
474           do il1=1,mset(il)
475             do i=1,nrep
476               write (irest2,*) (i_index(i,j,il,il1),j=1,remd_m(i))
477             enddo
478           enddo
479         enddo
480       endif
481       return
482       end