1 |
chuckv |
4 |
program nano |
2 |
|
|
use definitions, ONLY : ndim,DP,machdep_init |
3 |
|
|
|
4 |
|
|
use parameter, ONLY : read_params,handle_args,sim_type, & |
5 |
|
|
command,paramfile,file_prefix, & |
6 |
|
|
target_temp,run_time,ensemble,checktemp |
7 |
|
|
use simulation, ONLY : deallocate_simulation,use_pbc |
8 |
|
|
use init_simulation, ONLY : nano_build_system |
9 |
|
|
use force_module, ONLY : init_forcefield_parameters,initialize_forcefield |
10 |
|
|
use velocity, ONLY : randomize_velocities |
11 |
|
|
use xyz_io, ONLY : open_xyz_files,read_initial_config,write_final_config |
12 |
|
|
#ifdef MPI |
13 |
|
|
use status, ONLY : info,error,warning,start_info,end_info,& |
14 |
|
|
mpi_start_info,init_info |
15 |
|
|
#else |
16 |
|
|
use status, ONLY : info,error,warning,start_info,end_info,& |
17 |
|
|
init_info |
18 |
|
|
#endif |
19 |
|
|
|
20 |
|
|
use dynamics, ONLY : run_dynamics |
21 |
|
|
use F2KCLI, ONLY : command_argument_count,get_command_argument |
22 |
|
|
#ifdef MPI |
23 |
|
|
use mpi_module, ONLY : mpi_bcast,mpi_finalize,mpi_handle_atypes, & |
24 |
|
|
mpi_err,mpi_comm_world,node,mpi_integer,mpi_dist_params,init_mpi |
25 |
|
|
#endif |
26 |
|
|
|
27 |
|
|
|
28 |
|
|
integer :: j, n_args, my_args |
29 |
|
|
real( kind = DP) :: current_temp |
30 |
|
|
character(len=80) :: junk |
31 |
|
|
character(len=120) :: msg |
32 |
|
|
character(len=60) :: prog_name |
33 |
|
|
logical :: assign_positions |
34 |
|
|
|
35 |
|
|
!errors |
36 |
|
|
integer :: arg_error |
37 |
|
|
integer :: command_error |
38 |
|
|
integer :: param_error |
39 |
|
|
integer :: open_file_error |
40 |
|
|
integer :: read_config_error |
41 |
|
|
#ifdef MPI |
42 |
|
|
call init_mpi() |
43 |
|
|
if (node == 0) then |
44 |
|
|
#endif |
45 |
|
|
|
46 |
|
|
n_args = command_argument_count() |
47 |
|
|
#ifdef MPI |
48 |
|
|
! my_args = n_args - 4 |
49 |
|
|
my_args = 5 |
50 |
|
|
#else |
51 |
|
|
my_args = n_args |
52 |
|
|
#endif |
53 |
|
|
if (my_args /= 5) then |
54 |
|
|
arg_error = 0 |
55 |
|
|
else |
56 |
|
|
arg_error = 1 |
57 |
|
|
endif |
58 |
|
|
|
59 |
|
|
|
60 |
|
|
#ifdef MPI |
61 |
|
|
endif |
62 |
|
|
call mpi_bcast(arg_error,1,mpi_integer,0,mpi_comm_world,mpi_err) |
63 |
|
|
#endif |
64 |
|
|
|
65 |
|
|
|
66 |
|
|
|
67 |
|
|
|
68 |
|
|
|
69 |
|
|
|
70 |
|
|
if (arg_error == 0) then |
71 |
|
|
call error('NANO', & |
72 |
|
|
'usage: nano paramfile file_prefix command temperature run_time') |
73 |
|
|
end if |
74 |
|
|
|
75 |
|
|
! set a null program name for other nodes |
76 |
|
|
prog_name = "Null" |
77 |
|
|
#ifdef MPI |
78 |
|
|
if (node.eq.0) then |
79 |
|
|
#endif |
80 |
|
|
!! get the current program name |
81 |
|
|
call get_command_argument(0,prog_name) |
82 |
|
|
prog_name = trim(prog_name) |
83 |
|
|
|
84 |
|
|
call get_command_argument(1,junk) |
85 |
|
|
read(junk, *) paramfile |
86 |
|
|
call get_command_argument(2,junk) |
87 |
|
|
read(junk, *) file_prefix |
88 |
|
|
call get_command_argument(3,junk) |
89 |
|
|
read(junk, *) command |
90 |
|
|
call get_command_argument(4,junk) |
91 |
|
|
read(junk, *) target_temp |
92 |
|
|
call get_command_argument(5,junk) |
93 |
|
|
read(junk, *) run_time |
94 |
|
|
#ifdef MPI |
95 |
|
|
endif |
96 |
|
|
#endif |
97 |
|
|
|
98 |
|
|
call machdep_init() |
99 |
|
|
|
100 |
|
|
#ifdef MPI |
101 |
|
|
if (node.eq.0) then |
102 |
|
|
#endif |
103 |
|
|
|
104 |
|
|
|
105 |
|
|
call handle_args(this_error = command_error) |
106 |
|
|
#ifdef MPI |
107 |
|
|
endif |
108 |
|
|
#endif |
109 |
|
|
|
110 |
|
|
! Distrubute error result to all nodes |
111 |
|
|
#ifdef MPI |
112 |
|
|
call mpi_bcast(command_error,1,mpi_integer,0,mpi_comm_world,mpi_err) |
113 |
|
|
#endif |
114 |
|
|
if (command_error /= 0) then |
115 |
|
|
write(msg,*) "Unknown command", command |
116 |
|
|
call error("PROGRAM",msg) |
117 |
|
|
endif |
118 |
|
|
|
119 |
|
|
#ifdef MPI |
120 |
|
|
if (node == 0) then |
121 |
|
|
#endif |
122 |
|
|
call read_params(this_error=param_error) |
123 |
|
|
call init_info() |
124 |
|
|
! Distrubute error result to all nodes |
125 |
|
|
#ifdef MPI |
126 |
|
|
endif |
127 |
|
|
call mpi_bcast(param_error,1,mpi_integer,0,mpi_comm_world,mpi_err) |
128 |
|
|
#endif |
129 |
|
|
! exit program gracefully if paramfile error |
130 |
|
|
if (param_error /= 0) then |
131 |
|
|
call error("MAIN","Error reading parmfile... Exiting") |
132 |
|
|
endif |
133 |
|
|
#ifdef MPI |
134 |
|
|
if (node == 0) then |
135 |
|
|
#endif |
136 |
|
|
call open_xyz_files(this_error=open_file_error) |
137 |
|
|
#ifdef MPI |
138 |
|
|
endif |
139 |
|
|
call mpi_bcast(open_file_error,1,mpi_integer,0,mpi_comm_world,mpi_err) |
140 |
|
|
#endif |
141 |
|
|
! exit program gracefully if paramfile error |
142 |
|
|
if (open_file_error /= 0) then |
143 |
|
|
call error("MAIN","Error opening files... Exiting") |
144 |
|
|
endif |
145 |
|
|
|
146 |
|
|
|
147 |
|
|
#ifdef MPI |
148 |
|
|
call mpi_dist_params() |
149 |
|
|
#endif |
150 |
|
|
|
151 |
|
|
|
152 |
|
|
call start_info(prog_name) |
153 |
|
|
|
154 |
|
|
call init_forcefield_parameters() |
155 |
|
|
|
156 |
|
|
|
157 |
|
|
use_pbc = .false. |
158 |
|
|
assign_positions = .false. |
159 |
|
|
if (command == 'setup') assign_positions = .true. |
160 |
|
|
if (sim_type == 'liquid') then |
161 |
|
|
use_pbc = .true. |
162 |
|
|
endif |
163 |
|
|
|
164 |
|
|
|
165 |
|
|
call nano_build_system(assign_positions) |
166 |
|
|
|
167 |
|
|
#ifdef MPI |
168 |
|
|
call mpi_start_info() |
169 |
|
|
#endif |
170 |
|
|
|
171 |
|
|
if (command /= 'setup') then |
172 |
|
|
call read_initial_config(read_config_error) |
173 |
|
|
end if |
174 |
|
|
|
175 |
|
|
|
176 |
|
|
|
177 |
|
|
! set up the neighborlist |
178 |
|
|
call initialize_forcefield() |
179 |
|
|
|
180 |
|
|
|
181 |
|
|
|
182 |
|
|
#ifdef MPI |
183 |
|
|
call mpi_handle_atypes() |
184 |
|
|
#endif |
185 |
|
|
|
186 |
|
|
|
187 |
|
|
if(checktemp.or.(ensemble == 'NVT')) then |
188 |
|
|
call randomize_velocities(target_temp) |
189 |
|
|
end if |
190 |
|
|
|
191 |
|
|
|
192 |
|
|
call run_dynamics() |
193 |
|
|
|
194 |
|
|
call write_final_config() |
195 |
|
|
call end_info() |
196 |
|
|
call deallocate_simulation() |
197 |
|
|
|
198 |
|
|
#ifdef MPI |
199 |
|
|
call mpi_finalize(mpi_err) |
200 |
|
|
#endif |
201 |
|
|
|
202 |
|
|
|
203 |
|
|
stop |
204 |
|
|
end program nano |
205 |
|
|
|
206 |
|
|
|