ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/mpiSimulation_module.F90
(Generate patch)

Comparing trunk/OOPSE/libmdtools/mpiSimulation_module.F90 (file contents):
Revision 694 by chuckv, Wed Aug 13 21:20:20 2003 UTC vs.
Revision 882 by chuckv, Wed Dec 17 20:13:33 2003 UTC

# Line 7 | Line 7
7   !!
8   !! @author Charles F. Vardeman II
9   !! @author Matthew Meineke
10 < !! @version $Id: mpiSimulation_module.F90,v 1.6 2003-08-13 21:20:20 chuckv Exp $, $Date: 2003-08-13 21:20:20 $, $Name: not supported by cvs2svn $, $Revision: 1.6 $
10 > !! @version $Id: mpiSimulation_module.F90,v 1.10 2003-12-17 20:13:33 chuckv Exp $, $Date: 2003-12-17 20:13:33 $, $Name: not supported by cvs2svn $, $Revision: 1.10 $
11  
12   module mpiSimulation  
13    use definitions
14   #ifdef IS_MPI
15 <  use mpi
15 >  use oopseMPI
16    implicit none
17    PRIVATE
18  
# Line 32 | Line 32 | module mpiSimulation  
32   !! PUBLIC  Subroutines contained in MPI module
33    public :: mpi_bcast
34    public :: mpi_allreduce
35 <  public :: mpi_reduce
35 > !  public :: mpi_reduce
36    public :: mpi_send
37    public :: mpi_recv
38    public :: mpi_get_processor_name
# Line 52 | Line 52 | module mpiSimulation  
52  
53   !! Safety logical to prevent access to ComponetPlan until
54   !! set by C++.
55 <  logical :: ComponentPlanSet = .false.
55 >  logical, save :: ComponentPlanSet = .false.
56  
57  
58   !! generic mpi error declaration.
59 <  integer,public  :: mpi_err
59 >  integer, public :: mpi_err
60  
61   #ifdef PROFILE
62    public :: printCommTime
63  
64 <  real(kind = dp ) :: commTime = 0.0_dp
64 >  real(kind = dp ), save :: commTime = 0.0_dp
65    real(kind = dp ) :: commTimeInitial,commTimeFinal
66   #endif
67  
# Line 73 | Line 73 | module mpiSimulation  
73  
74  
75   !! Tags used during force loop for parallel simulation
76 <  integer, allocatable, dimension(:) :: tagLocal
76 >  integer, public, allocatable, dimension(:) :: tagLocal
77    integer, public, allocatable, dimension(:) :: tagRow
78    integer, public, allocatable, dimension(:) :: tagColumn
79  
80   !! Logical set true if mpiSimulation has been initialized
81 <  logical :: isSimSet = .false.
81 >  logical, save :: isSimSet = .false.
82  
83  
84 <  type (mpiComponentPlan) :: mpiSim
84 >  type (mpiComponentPlan), save :: mpiSim
85  
86   !! gs_plan contains plans for gather and scatter routines
87    type, public :: gs_plan
# Line 97 | Line 97 | module mpiSimulation  
97    end type gs_plan
98  
99   ! plans for different decompositions
100 <  type (gs_plan), public :: plan_row
101 <  type (gs_plan), public :: plan_row3d
102 <  type (gs_plan), public :: plan_col
103 <  type (gs_plan), public :: plan_col3d
104 <  type(gs_plan),  public :: plan_row_Rotation
105 <  type(gs_plan),  public :: plan_col_Rotation
100 >  type (gs_plan), public, save :: plan_row
101 >  type (gs_plan), public, save :: plan_row3d
102 >  type (gs_plan), public, save :: plan_col
103 >  type (gs_plan), public, save :: plan_col3d
104 >  type (gs_plan),  public, save :: plan_row_Rotation
105 >  type (gs_plan),  public, save :: plan_col_Rotation
106  
107    type (mpiComponentPlan), pointer :: simComponentPlan
108  
# Line 471 | Line 471 | contains
471  
472    subroutine gather_integer( sbuffer, rbuffer, this_plan, status)
473  
474 <    type (gs_plan), intent(in) :: this_plan
475 <    integer, dimension(:), intent(in) :: sbuffer
476 <    integer, dimension(:), intent(in) :: rbuffer
474 >    type (gs_plan), intent(inout) :: this_plan
475 >    integer, dimension(:), intent(inout) :: sbuffer
476 >    integer, dimension(:), intent(inout) :: rbuffer
477      integer :: noffset
478      integer, intent(out), optional :: status
479      integer :: i
# Line 503 | Line 503 | contains
503    subroutine gather_double( sbuffer, rbuffer, this_plan, status)
504  
505      type (gs_plan), intent(in) :: this_plan
506 <    real( kind = DP ), dimension(:), intent(in) :: sbuffer
507 <    real( kind = DP ), dimension(:), intent(in) :: rbuffer
506 >    real( kind = DP ), dimension(:), intent(inout) :: sbuffer
507 >    real( kind = DP ), dimension(:), intent(inout) :: rbuffer
508      integer :: noffset
509      integer, intent(out), optional :: status
510  
# Line 531 | Line 531 | contains
531    subroutine gather_double_2d( sbuffer, rbuffer, this_plan, status)
532  
533      type (gs_plan), intent(in) :: this_plan
534 <    real( kind = DP ), dimension(:,:), intent(in) :: sbuffer
535 <    real( kind = DP ), dimension(:,:), intent(in) :: rbuffer
534 >    real( kind = DP ), dimension(:,:), intent(inout) :: sbuffer
535 >    real( kind = DP ), dimension(:,:), intent(inout) :: rbuffer
536      integer :: noffset,i,ierror
537      integer, intent(out), optional :: status
538      
# Line 563 | Line 563 | contains
563    subroutine scatter_double( sbuffer, rbuffer, this_plan, status)
564  
565      type (gs_plan), intent(in) :: this_plan
566 <    real( kind = DP ), dimension(:), intent(in) :: sbuffer
567 <    real( kind = DP ), dimension(:), intent(in) :: rbuffer
566 >    real( kind = DP ), dimension(:), intent(inout) :: sbuffer
567 >    real( kind = DP ), dimension(:), intent(inout) :: rbuffer
568      integer, intent(out), optional :: status
569      external mpi_reduce_scatter
570  
# Line 589 | Line 589 | contains
589    subroutine scatter_double_2d( sbuffer, rbuffer, this_plan, status)
590  
591      type (gs_plan), intent(in) :: this_plan
592 <    real( kind = DP ), dimension(:,:), intent(in) :: sbuffer
593 <    real( kind = DP ), dimension(:,:), intent(in) :: rbuffer
592 >    real( kind = DP ), dimension(:,:), intent(inout) :: sbuffer
593 >    real( kind = DP ), dimension(:,:), intent(inout) :: rbuffer
594      integer, intent(out), optional :: status
595      external mpi_reduce_scatter
596  
# Line 626 | Line 626 | contains
626   ! allocate row arrays
627      nrow = getNrow(plan_row)
628      ncol = getNcol(plan_col)
629 +    
630 +    if(.not. allocated(tagLocal)) then
631 +       allocate(tagLocal(size(tags)),STAT=alloc_stat)
632 +        if (alloc_stat /= 0 ) then
633 +          status = -1
634 +          return
635 +       endif
636 +    else
637 +       deallocate(tagLocal)
638 +       allocate(tagLocal(size(tags)),STAT=alloc_stat)
639 +       if (alloc_stat /= 0 ) then
640 +          status = -1
641 +          return
642 +       endif
643  
644 +    endif
645 +
646 +    tagLocal = tags
647 +
648 +    
649      if (.not. allocated(tagRow)) then
650         allocate(tagRow(nrow),STAT=alloc_stat)
651         if (alloc_stat /= 0 ) then
# Line 661 | Line 680 | contains
680      call gather(tags,tagRow,plan_row)
681      call gather(tags,tagColumn,plan_col)
682  
683 +  
684    end subroutine setTags
685  
686 <  pure function getNcol(thisplan) result(ncol)
686 > !  pure function getNcol(thisplan) result(ncol)
687 >  function getNcol(thisplan) result(ncol)
688      type (gs_plan), intent(in) :: thisplan
689      integer :: ncol
690      ncol = thisplan%gsComponentPlan%nComponentsColumn
691    end function getNcol
692  
693 <  pure function getNrow(thisplan) result(nrow)
693 > !  pure function getNrow(thisplan) result(nrow)
694 >  function getNrow(thisplan) result(nrow)
695      type (gs_plan), intent(in) :: thisplan
696      integer :: nrow
697      nrow = thisplan%gsComponentPlan%nComponentsRow

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines