/[MITgcm]/MITgcm_contrib/ecco_utils/lbfgs_jpl_version/lsopt.2/pddot.F
ViewVC logotype

Annotation of /MITgcm_contrib/ecco_utils/lbfgs_jpl_version/lsopt.2/pddot.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (hide annotations) (download)
Wed Apr 3 23:36:07 2013 UTC (12 years, 4 months ago) by heimbach
Branch: MAIN
CVS Tags: HEAD
Add L-BFGS code adapted to ECCO Production by JPL

1 heimbach 1.1 FUNCTION PDDOT(nmax,X,xn,Y,yn,myid,my_veclen,numprocs)
2     implicit none
3     include 'mpif.h'
4    
5     integer :: xn, yn
6     integer :: i,nmax,my_veclen,nwork,mystart,myend
7     integer :: ierr, myid, numprocs
8     integer :: requests(2)
9     integer :: statuses(MPI_STATUS_SIZE,2)
10    
11     real(kind=8) :: answer, total, totend, DD
12     real(kind=8) :: x(nmax), y(nmax)
13     DOUBLE PRECISION PDDOT
14    
15     DOUBLE PRECISION DDOT
16     EXTERNAL DDOT
17     total = 0.0
18     totend = 0.0
19    
20     nwork = nmax/(my_veclen*numprocs)
21     write(*,*) "nwork = ", nwork
22    
23     do i=1,nwork
24     !
25     mystart = 1 + (i-1)*(my_veclen*numprocs) + myid*my_veclen
26     myend = mystart + my_veclen - 1
27     ! write(*,*)"myid mystart myend = ", myid, mystart, myend
28    
29     answer = DDOT( my_veclen, X(mystart:myend), xn, Y(mystart:myend), yn )
30     ! write(*,*) "myid answer = ", myid, answer
31    
32     call MPI_WAITALL(2,requests,statuses,ierr)
33     call MPI_REDUCE(answer,totend,1,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_WORLD,ierr)
34     total = total + totend
35     enddo
36    
37    
38     DD = (my_veclen*numprocs)*nwork
39     ! Finish the rest
40     answer = 0.0
41     mystart = 1 + DD + myid*my_veclen
42     myend = mystart + my_veclen - 1
43     if(myend .gt. nmax) myend=nmax
44     if (mystart.le.nmax) then
45     answer = DDOT( my_veclen, X(mystart:myend), 1, Y(mystart:myend), 1 )
46     ! write(*,*) "myid answer = ", myid, answer
47     endif
48     call MPI_WAITALL(2,requests,statuses,ierr)
49     call MPI_REDUCE(answer,totend,1,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_WORLD,ierr)
50    
51     PDDOT = total + totend
52    
53     return
54     end function PDDOT

  ViewVC Help
Powered by ViewVC 1.1.22