ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/nano_mpi/src/langevin_cluster_nlist.F90
Revision: 4
Committed: Mon Jun 10 17:18:36 2002 UTC (22 years, 1 month ago) by chuckv
File size: 2288 byte(s)
Log Message:
Import Root

File Contents

# User Rev Content
1 chuckv 4 module langevin_cluster_list
2     use parameter
3     use simulation, ONLY : nlocal
4     use velocity, ONLY : get_com
5     use definitions, ONLY : DP, ndim
6     #ifdef MPI
7     use mpi_module
8     #endif
9     IMPLICIT NONE
10    
11     logical, allocatable, dimension(:) :: langevin_list
12     integer, allocatable, dimension(:) :: radial_distance
13    
14     contains
15     subroutine init_langevin_list(list_size)
16     integer, intent(in) :: list_size
17     allocate(langevin_list(list_size))
18     allocate(radial_distance(list_size))
19     end subroutine init_langevin_list
20    
21     subroutine delete_langevin_list()
22     deallocate(langevin_list)
23     deallocate(radial_distance)
24     end subroutine delete_langevin_list
25    
26     subroutine create_langevin_list
27     use simulation, ONLY : q, natoms
28     real ( kind = DP ), dimension(ndim) :: this_cm
29     real ( kind = DP ) :: local_max
30     real ( kind = DP ) :: radial_max
31     real ( kind = DP ) :: radial_max_skin
32     real ( kind = DP ) :: radial_min_skin
33     real ( kind = DP ) :: ricmsq
34     real ( kind = DP ) :: this_dist
35     real ( kind = DP ), dimension(ndim) :: ricm
36     integer :: i,dim
37    
38     langevin_list = .false.
39     local_max = 0.0E0_DP
40     this_cm = get_com()
41     radial_distance = 0.0E0_DP
42    
43     if (.not. use_langevin_skin) then
44     langevin_list = .true.
45     return
46     end if
47    
48     if (sim_type == 'liquid') then
49     langevin_list = .true.
50     endif
51    
52     !. find max radius of cluster
53     do i = 1,nlocal
54     ricmsq = 0.0E0_DP
55     ricm(1:ndim) = q(1:ndim,i) - this_cm(1:ndim)
56     do dim = 1,ndim
57     ricmsq = ricmsq + ricm(dim)*ricm(dim)
58     end do
59     radial_distance(i) = sqrt(ricmsq)
60     this_dist = radial_distance(i)
61     local_max = max(this_dist,local_max)
62     end do
63    
64     #ifdef MPI
65     call mpi_allreduce(local_max,radial_max,1,mpi_double_precision, &
66     mpi_max,mpi_comm_world,mpi_err)
67     #else
68     radial_max = local_max
69     #endif
70     radial_max_skin = radial_max + langevin_skin_delta
71     radial_min_skin = radial_max - langevin_skin_delta
72    
73     do i = 1, nlocal
74     if ( (radial_distance(i) <= radial_max_skin) &
75     .AND. &
76     (radial_distance(i) >= radial_min_skin)) then
77    
78     langevin_list(i) = .true.
79     endif
80     end do
81    
82     end subroutine create_langevin_list
83    
84    
85    
86     end module langevin_cluster_list