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 ago) by chuckv
File size: 2288 byte(s)
Log Message:
Import Root

File Contents

# Content
1 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