180 pv_scalar, pv_xx, used_time, hugoniot, abc, cell_angle, nat, itimes, &
181 time, my_pos, my_act)
187 REAL(kind=
dp),
INTENT(IN) :: pv_scalar, pv_xx
188 REAL(kind=
dp),
POINTER :: used_time
189 REAL(kind=
dp),
INTENT(IN) :: hugoniot
190 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: abc, cell_angle
191 INTEGER,
INTENT(IN) :: nat, itimes
192 REAL(kind=
dp),
INTENT(IN) :: time
193 CHARACTER(LEN=default_string_length),
INTENT(IN) :: my_pos, my_act
195 CHARACTER(len=*),
PARAMETER :: routinen =
'compute_averages'
197 CHARACTER(LEN=default_string_length) :: ctmp
198 INTEGER :: delta_t, handle, i, nint, output_unit
199 LOGICAL :: restart_averages
200 REAL(kind=
dp) :: start_time
201 REAL(kind=
dp),
DIMENSION(:),
POINTER :: cvalues, mmatrix, tmp
205 CALL timeset(routinen, handle)
208 IF (averages%do_averages)
THEN
209 NULLIFY (cvalues, mmatrix, logger)
213 IF (
ASSOCIATED(averages%avecolvar)) nint =
SIZE(averages%avecolvar)
216 IF (time >= start_time)
THEN
219 IF (averages%itimes_start == -1)
THEN
222 IF (restart_averages)
THEN
241 IF (virial%pv_availability)
THEN
244 IF (
ASSOCIATED(averages%virial))
THEN
246 averages%virial%pv_total = reshape(tmp, (/3, 3/))
248 averages%virial%pv_virial = reshape(tmp, (/3, 3/))
250 averages%virial%pv_kinetic = reshape(tmp, (/3, 3/))
252 averages%virial%pv_constraint = reshape(tmp, (/3, 3/))
254 averages%virial%pv_xc = reshape(tmp, (/3, 3/))
256 averages%virial%pv_fock_4c = reshape(tmp, (/3, 3/))
263 cpassert(nint ==
SIZE(cvalues))
264 cpassert(nint*nint ==
SIZE(mmatrix))
265 averages%avecolvar = cvalues
266 averages%aveMmatrix = mmatrix
269 averages%itimes_start = itimes
272 delta_t = itimes - averages%itimes_start + 1
275 SELECT CASE (delta_t)
277 averages%avecpu = used_time
278 averages%avehugoniot = hugoniot
279 averages%avetemp_baro = md_ener%temp_baro
280 averages%avepot = md_ener%epot
281 averages%avekin = md_ener%ekin
282 averages%avetemp = md_ener%temp_part
283 averages%avekin_qm = md_ener%ekin_qm
284 averages%avetemp_qm = md_ener%temp_qm
285 averages%avevol = cell%deth
286 averages%aveca = abc(1)
287 averages%avecb = abc(2)
288 averages%avecc = abc(3)
289 averages%aveal = cell_angle(3)
290 averages%avebe = cell_angle(2)
291 averages%avega = cell_angle(1)
292 averages%econs = 0._dp
294 IF (virial%pv_availability)
THEN
295 averages%avepress = pv_scalar
296 averages%avepxx = pv_xx
297 IF (
ASSOCIATED(averages%virial))
THEN
298 averages%virial%pv_total = virial%pv_total
299 averages%virial%pv_virial = virial%pv_virial
300 averages%virial%pv_kinetic = virial%pv_kinetic
301 averages%virial%pv_constraint = virial%pv_constraint
302 averages%virial%pv_xc = virial%pv_xc
303 averages%virial%pv_fock_4c = virial%pv_fock_4c
308 CALL get_clv_force(force_env, nsize_xyz=nat*3, nsize_int=nint, &
309 cvalues=averages%avecolvar, mmatrix=averages%aveMmatrix)
313 CALL get_averages(averages%avehugoniot, hugoniot, delta_t)
314 CALL get_averages(averages%avetemp_baro, md_ener%temp_baro, delta_t)
315 CALL get_averages(averages%avepot, md_ener%epot, delta_t)
316 CALL get_averages(averages%avekin, md_ener%ekin, delta_t)
317 CALL get_averages(averages%avetemp, md_ener%temp_part, delta_t)
318 CALL get_averages(averages%avekin_qm, md_ener%ekin_qm, delta_t)
319 CALL get_averages(averages%avetemp_qm, md_ener%temp_qm, delta_t)
324 CALL get_averages(averages%aveal, cell_angle(3), delta_t)
325 CALL get_averages(averages%avebe, cell_angle(2), delta_t)
326 CALL get_averages(averages%avega, cell_angle(1), delta_t)
327 CALL get_averages(averages%econs, md_ener%delta_cons, delta_t)
329 IF (virial%pv_availability)
THEN
330 CALL get_averages(averages%avepress, pv_scalar, delta_t)
332 IF (
ASSOCIATED(averages%virial))
THEN
333 CALL get_averages(averages%virial%pv_total, virial%pv_total, delta_t)
334 CALL get_averages(averages%virial%pv_virial, virial%pv_virial, delta_t)
335 CALL get_averages(averages%virial%pv_kinetic, virial%pv_kinetic, delta_t)
336 CALL get_averages(averages%virial%pv_constraint, virial%pv_constraint, delta_t)
337 CALL get_averages(averages%virial%pv_xc, virial%pv_xc, delta_t)
338 CALL get_averages(averages%virial%pv_fock_4c, virial%pv_fock_4c, delta_t)
343 ALLOCATE (cvalues(nint))
344 ALLOCATE (mmatrix(nint*nint))
345 CALL get_clv_force(force_env, nsize_xyz=nat*3, nsize_int=nint, cvalues=cvalues, &
348 CALL get_averages(averages%aveMmatrix, mmatrix, delta_t)
357 extension=
".avg", file_position=my_pos, file_action=my_act)
358 IF (output_unit > 0)
THEN
359 WRITE (output_unit, fmt=
'(A15,1X,"=",1X,G15.9," NSTEP #",I15)') &
360 "AVECPU", averages%avecpu, itimes, &
361 "AVEHUGONIOT", averages%avehugoniot, itimes, &
362 "AVETEMP_BARO", averages%avetemp_baro, itimes, &
363 "AVEPOT", averages%avepot, itimes, &
364 "AVEKIN", averages%avekin, itimes, &
365 "AVETEMP", averages%avetemp, itimes, &
366 "AVEKIN_QM", averages%avekin_qm, itimes, &
367 "AVETEMP_QM", averages%avetemp_qm, itimes, &
368 "AVEVOL", averages%avevol, itimes, &
369 "AVECELL_A", averages%aveca, itimes, &
370 "AVECELL_B", averages%avecb, itimes, &
371 "AVECELL_C", averages%avecc, itimes, &
372 "AVEALPHA", averages%aveal, itimes, &
373 "AVEBETA", averages%avebe, itimes, &
374 "AVEGAMMA", averages%avega, itimes, &
375 "AVE_ECONS", averages%econs, itimes
377 IF (virial%pv_availability)
THEN
378 WRITE (output_unit, fmt=
'(A15,1X,"=",1X,G15.9," NSTEP #",I15)') &
379 "AVE_PRESS", averages%avepress, itimes, &
380 "AVE_PXX", averages%avepxx, itimes
381 IF (
ASSOCIATED(averages%virial))
THEN
382 WRITE (output_unit, fmt=
'(A15,1X,"=",1X,G15.9," NSTEP #",I15)') &
383 "AVE_PV_TOT", averages%virial%pv_total, itimes, &
384 "AVE_PV_VIR", averages%virial%pv_virial, itimes, &
385 "AVE_PV_KIN", averages%virial%pv_kinetic, itimes, &
386 "AVE_PV_CNSTR", averages%virial%pv_constraint, itimes, &
387 "AVE_PV_XC", averages%virial%pv_xc, itimes, &
388 "AVE_PV_FOCK_4C", averages%virial%pv_fock_4c, itimes
393 WRITE (output_unit, fmt=
'(A15,1X,"=",1X,G15.9," NSTEP #",I15)') &
394 trim(
"AVE_CV-"//adjustl(ctmp)), averages%avecolvar(i), itimes
396 WRITE (output_unit, fmt=
'(/)')
401 CALL timestop(handle)