LCOV - code coverage report
Current view: top level - src/motion - reftraj_types.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:c24029e) Lines: 88.1 % 42 37
Test Date: 2026-07-04 06:36:57 Functions: 40.0 % 5 2

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2026 CP2K developers group <https://cp2k.org>                                   !
       4              : !                                                                                                  !
       5              : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6              : !--------------------------------------------------------------------------------------------------!
       7              : 
       8              : ! **************************************************************************************************
       9              : !> \brief initialization of the reftraj structure used to analyse
      10              : !>     previously generated trajectories
      11              : !> \par History
      12              : !>      Created 10-07 [MI]
      13              : !> \author MI
      14              : ! **************************************************************************************************
      15              : MODULE reftraj_types
      16              : 
      17              :    USE cp_parser_types,                 ONLY: cp_parser_type,&
      18              :                                               parser_create,&
      19              :                                               parser_release
      20              :    USE input_section_types,             ONLY: section_vals_type,&
      21              :                                               section_vals_val_get
      22              :    USE kinds,                           ONLY: default_path_length,&
      23              :                                               dp
      24              :    USE message_passing,                 ONLY: mp_para_env_type
      25              : #include "../base/base_uses.f90"
      26              : 
      27              :    IMPLICIT NONE
      28              : 
      29              :    PRIVATE
      30              :    PUBLIC :: reftraj_type, reftraj_msd_type, &
      31              :              create_reftraj, release_reftraj
      32              : 
      33              :    INTEGER, PARAMETER, PUBLIC :: REFTRAJ_EVAL_NONE = 101
      34              :    INTEGER, PARAMETER, PUBLIC :: REFTRAJ_EVAL_ENERGY = 102
      35              :    INTEGER, PARAMETER, PUBLIC :: REFTRAJ_EVAL_ENERGY_FORCES = 103
      36              :    INTEGER, PARAMETER, PUBLIC :: REFTRAJ_WRAP_NONE = 201
      37              :    INTEGER, PARAMETER, PUBLIC :: REFTRAJ_WRAP_POSITIVE = 202
      38              :    INTEGER, PARAMETER, PUBLIC :: REFTRAJ_WRAP_CENTRAL = 203
      39              : 
      40              : ! **************************************************************************************************
      41              : !> \brief parameters related to the analysis of previously generated trajectories
      42              : !> \author MI
      43              : ! **************************************************************************************************
      44              :    TYPE reftraj_info_type
      45              :       INTEGER                                  :: first_snapshot = 0
      46              :       INTEGER                                  :: last_snapshot = 0
      47              :       INTEGER                                  :: stride = 0
      48              :       INTEGER                                  :: eval = REFTRAJ_EVAL_NONE
      49              :       INTEGER                                  :: wrap = REFTRAJ_WRAP_NONE
      50              :       LOGICAL                                  :: variable_volume = .FALSE.
      51              :       LOGICAL                                  :: msd = .FALSE.
      52              :       TYPE(cp_parser_type), POINTER            :: traj_parser => NULL()
      53              :       TYPE(cp_parser_type), POINTER            :: cell_parser => NULL()
      54              :    END TYPE reftraj_info_type
      55              : 
      56              : ! **************************************************************************************************
      57              :    TYPE reftraj_msd_type
      58              :    LOGICAL                                  :: disp_atom = .FALSE., msd_kind = .FALSE., msd_molecule = .FALSE., msd_region = .FALSE.
      59              :       INTEGER                                  :: num_disp_atom = 0, ref0_unit = 0
      60              :       INTEGER, POINTER, DIMENSION(:)           :: disp_atom_index => NULL()
      61              :     REAL(KIND=dp)                            :: disp_atom_tol = 0.0_dp, drcom(3) = 0.0_dp, ref0_com(3) = 0.0_dp, total_mass = 0.0_dp
      62              :       REAL(KIND=dp), POINTER, DIMENSION(:, :)   :: disp_atom_dr => NULL()
      63              :       REAL(KIND=dp), POINTER, DIMENSION(:, :)   :: ref0_pos => NULL()
      64              :       REAL(KIND=dp), POINTER, DIMENSION(:, :)   :: ref0_com_molecule => NULL()
      65              :       REAL(KIND=dp), POINTER, DIMENSION(:, :)   :: val_msd_kind => NULL()
      66              :       REAL(KIND=dp), POINTER, DIMENSION(:, :)   :: val_msd_molecule => NULL()
      67              :       REAL(KIND=dp), POINTER, DIMENSION(:, :)   :: val_msd_region => NULL()
      68              :    END TYPE reftraj_msd_type
      69              : 
      70              : ! **************************************************************************************************
      71              :    TYPE reftraj_type
      72              :       INTEGER                                  :: itimes = 0
      73              :       INTEGER                                  :: itimes0 = 0
      74              :       INTEGER                                  :: isnap = 0
      75              :       INTEGER                                  :: natom = 0
      76              :       LOGICAL                                  :: init = .FALSE.
      77              :       REAL(KIND=dp)                            :: epot = 0.0_dp, epot0 = 0.0_dp, time = 0.0_dp, time0 = 0.0_dp
      78              :       TYPE(reftraj_info_type), POINTER         :: info => NULL()
      79              :       TYPE(reftraj_msd_type), POINTER          :: msd => NULL()
      80              :    END TYPE reftraj_type
      81              : 
      82              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'reftraj_types'
      83              : 
      84              : CONTAINS
      85              : 
      86              : ! **************************************************************************************************
      87              : !> \brief ...
      88              : !> \param reftraj ...
      89              : !> \param reftraj_section ...
      90              : !> \param para_env ...
      91              : ! **************************************************************************************************
      92           36 :    SUBROUTINE create_reftraj(reftraj, reftraj_section, para_env)
      93              : 
      94              :       TYPE(reftraj_type), INTENT(OUT)                    :: reftraj
      95              :       TYPE(section_vals_type), POINTER                   :: reftraj_section
      96              :       TYPE(mp_para_env_type), POINTER                    :: para_env
      97              : 
      98              :       CHARACTER(LEN=default_path_length)                 :: filename
      99              : 
     100              :       NULLIFY (reftraj%info)
     101              :       NULLIFY (reftraj%msd)
     102              : 
     103           36 :       ALLOCATE (reftraj%info)
     104              :       NULLIFY (reftraj%info%traj_parser)
     105              :       NULLIFY (reftraj%info%cell_parser)
     106              : 
     107              :       ! Initialize parser for trajectory
     108           36 :       CALL section_vals_val_get(reftraj_section, "TRAJ_FILE_NAME", c_val=filename)
     109          108 :       ALLOCATE (reftraj%info%traj_parser)
     110           36 :       CALL parser_create(reftraj%info%traj_parser, filename, para_env=para_env)
     111              : 
     112           36 :       CALL section_vals_val_get(reftraj_section, "VARIABLE_VOLUME", l_val=reftraj%info%variable_volume)
     113           36 :       IF (reftraj%info%variable_volume) THEN
     114              :          ! In case requested initialize parser for cell
     115            6 :          CALL section_vals_val_get(reftraj_section, "CELL_FILE_NAME", c_val=filename)
     116           18 :          ALLOCATE (reftraj%info%cell_parser)
     117            6 :          CALL parser_create(reftraj%info%cell_parser, filename, para_env=para_env)
     118              :       END IF
     119              : 
     120           36 :       CALL section_vals_val_get(reftraj_section, "FIRST_SNAPSHOT", i_val=reftraj%info%first_snapshot)
     121           36 :       CALL section_vals_val_get(reftraj_section, "LAST_SNAPSHOT", i_val=reftraj%info%last_snapshot)
     122           36 :       CALL section_vals_val_get(reftraj_section, "STRIDE", i_val=reftraj%info%stride)
     123           36 :       CALL section_vals_val_get(reftraj_section, "EVAL", i_val=reftraj%info%eval)
     124           36 :       CALL section_vals_val_get(reftraj_section, "WRAP", i_val=reftraj%info%wrap)
     125              : 
     126              :       CALL section_vals_val_get(reftraj_section, "MSD%_SECTION_PARAMETERS_", &
     127           36 :                                 l_val=reftraj%info%msd)
     128           36 :       IF (reftraj%info%msd .AND. (reftraj%info%wrap /= REFTRAJ_WRAP_NONE)) THEN
     129            0 :          CPWARN("MSD calculation is incompatible with wrapping coordinates")
     130            0 :          reftraj%info%wrap = REFTRAJ_WRAP_NONE
     131              :       END IF
     132              : 
     133           36 :    END SUBROUTINE create_reftraj
     134              : 
     135              : ! **************************************************************************************************
     136              : !> \brief ...
     137              : !> \param reftraj ...
     138              : !> \par History
     139              : !>      10.2007 created
     140              : !> \author MI
     141              : ! **************************************************************************************************
     142           36 :    SUBROUTINE release_reftraj(reftraj)
     143              : 
     144              :       TYPE(reftraj_type), INTENT(INOUT)                  :: reftraj
     145              : 
     146           36 :       IF (ASSOCIATED(reftraj%info%traj_parser)) THEN
     147           36 :          CALL parser_release(reftraj%info%traj_parser)
     148           36 :          DEALLOCATE (reftraj%info%traj_parser)
     149              :       END IF
     150           36 :       IF (ASSOCIATED(reftraj%info%cell_parser)) THEN
     151            6 :          CALL parser_release(reftraj%info%cell_parser)
     152            6 :          DEALLOCATE (reftraj%info%cell_parser)
     153              :       END IF
     154           36 :       IF (ASSOCIATED(reftraj%info)) THEN
     155           36 :          DEALLOCATE (reftraj%info)
     156              :       END IF
     157           36 :       IF (ASSOCIATED(reftraj%msd)) THEN
     158            2 :          DEALLOCATE (reftraj%msd%ref0_pos)
     159            2 :          IF (reftraj%msd%msd_kind) THEN
     160            2 :             DEALLOCATE (reftraj%msd%val_msd_kind)
     161              :          END IF
     162            2 :          IF (reftraj%msd%msd_molecule) THEN
     163            0 :             DEALLOCATE (reftraj%msd%val_msd_molecule)
     164            0 :             DEALLOCATE (reftraj%msd%ref0_com_molecule)
     165              :          END IF
     166            2 :          IF (reftraj%msd%disp_atom) THEN
     167            2 :             DEALLOCATE (reftraj%msd%disp_atom_index)
     168            2 :             DEALLOCATE (reftraj%msd%disp_atom_dr)
     169              :          END IF
     170              : 
     171            2 :          DEALLOCATE (reftraj%msd)
     172              :       END IF
     173              : 
     174           36 :    END SUBROUTINE release_reftraj
     175              : 
     176            0 : END MODULE reftraj_types
        

Generated by: LCOV version 2.0-1