LCOV - code coverage report
Current view: top level - src/motion - reftraj_types.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:37c9bd6) Lines: 40 43 93.0 %
Date: 2023-03-30 11:55:16 Functions: 2 5 40.0 %

          Line data    Source code
       1             : !--------------------------------------------------------------------------------------------------!
       2             : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3             : !   Copyright 2000-2023 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             : ! **************************************************************************************************
      34             : !> \brief parameters related to the analysis of previously generated trajecorties
      35             : !> \author MI
      36             : ! **************************************************************************************************
      37             :    TYPE reftraj_info_type
      38             :       INTEGER                                  :: first_snapshot
      39             :       INTEGER                                  :: last_snapshot
      40             :       INTEGER                                  :: stride
      41             :       LOGICAL                                  :: eval_ef
      42             :       LOGICAL                                  :: eval_forces
      43             :       LOGICAL                                  :: variable_volume
      44             :       LOGICAL                                  :: msd
      45             :       TYPE(cp_parser_type), POINTER            :: traj_parser
      46             :       TYPE(cp_parser_type), POINTER            :: cell_parser
      47             :    END TYPE reftraj_info_type
      48             : 
      49             : ! **************************************************************************************************
      50             :    TYPE reftraj_msd_type
      51             :       LOGICAL                                  :: disp_atom, msd_kind, msd_molecule, msd_region
      52             :       INTEGER                                  :: num_disp_atom, ref0_unit
      53             :       INTEGER, POINTER, DIMENSION(:)           :: disp_atom_index
      54             :       REAL(KIND=dp)                            :: disp_atom_tol, drcom(3), ref0_com(3), total_mass
      55             :       REAL(KIND=dp), POINTER, DIMENSION(:, :)   :: disp_atom_dr
      56             :       REAL(KIND=dp), POINTER, DIMENSION(:, :)   :: ref0_pos
      57             :       REAL(KIND=dp), POINTER, DIMENSION(:, :)   :: ref0_com_molecule
      58             :       REAL(KIND=dp), POINTER, DIMENSION(:, :)   :: val_msd_kind
      59             :       REAL(KIND=dp), POINTER, DIMENSION(:, :)   :: val_msd_molecule
      60             :       REAL(KIND=dp), POINTER, DIMENSION(:, :)   :: val_msd_region
      61             :    END TYPE reftraj_msd_type
      62             : 
      63             : ! **************************************************************************************************
      64             :    TYPE reftraj_type
      65             :       INTEGER                                  :: itimes
      66             :       INTEGER                                  :: itimes0
      67             :       INTEGER                                  :: isnap
      68             :       INTEGER                                  :: natom
      69             :       LOGICAL                                  :: init
      70             :       REAL(KIND=dp)                            :: epot, epot0, time, time0
      71             :       TYPE(reftraj_info_type), POINTER         :: info
      72             :       TYPE(reftraj_msd_type), POINTER          :: msd
      73             :    END TYPE reftraj_type
      74             : 
      75             :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'reftraj_types'
      76             : 
      77             : CONTAINS
      78             : 
      79             : ! **************************************************************************************************
      80             : !> \brief ...
      81             : !> \param reftraj ...
      82             : !> \param reftraj_section ...
      83             : !> \param para_env ...
      84             : ! **************************************************************************************************
      85          32 :    SUBROUTINE create_reftraj(reftraj, reftraj_section, para_env)
      86             : 
      87             :       TYPE(reftraj_type), INTENT(OUT)                    :: reftraj
      88             :       TYPE(section_vals_type), POINTER                   :: reftraj_section
      89             :       TYPE(mp_para_env_type), POINTER                    :: para_env
      90             : 
      91             :       CHARACTER(LEN=default_path_length)                 :: filename
      92             : 
      93             :       NULLIFY (reftraj%info)
      94          32 :       NULLIFY (reftraj%msd)
      95             : 
      96          32 :       ALLOCATE (reftraj%info)
      97          32 :       NULLIFY (reftraj%info%traj_parser)
      98          32 :       NULLIFY (reftraj%info%cell_parser)
      99             : 
     100             :       ! Initialize parser for trajectory
     101          32 :       CALL section_vals_val_get(reftraj_section, "TRAJ_FILE_NAME", c_val=filename)
     102          32 :       ALLOCATE (reftraj%info%traj_parser)
     103          32 :       CALL parser_create(reftraj%info%traj_parser, filename, para_env=para_env)
     104             : 
     105          32 :       CALL section_vals_val_get(reftraj_section, "VARIABLE_VOLUME", l_val=reftraj%info%variable_volume)
     106          32 :       IF (reftraj%info%variable_volume) THEN
     107             :          ! In case requested initialize parser for cell
     108           6 :          CALL section_vals_val_get(reftraj_section, "CELL_FILE_NAME", c_val=filename)
     109           6 :          ALLOCATE (reftraj%info%cell_parser)
     110           6 :          CALL parser_create(reftraj%info%cell_parser, filename, para_env=para_env)
     111             :       END IF
     112             : 
     113          32 :       CALL section_vals_val_get(reftraj_section, "FIRST_SNAPSHOT", i_val=reftraj%info%first_snapshot)
     114          32 :       CALL section_vals_val_get(reftraj_section, "LAST_SNAPSHOT", i_val=reftraj%info%last_snapshot)
     115          32 :       CALL section_vals_val_get(reftraj_section, "STRIDE", i_val=reftraj%info%stride)
     116          32 :       CALL section_vals_val_get(reftraj_section, "EVAL_ENERGY_FORCES", l_val=reftraj%info%eval_ef)
     117          32 :       CALL section_vals_val_get(reftraj_section, "EVAL_FORCES", l_val=reftraj%info%eval_forces)
     118          32 :       IF (reftraj%info%eval_forces) reftraj%info%eval_ef = .TRUE.
     119             : 
     120             :       CALL section_vals_val_get(reftraj_section, "MSD%_SECTION_PARAMETERS_", &
     121          32 :                                 l_val=reftraj%info%msd)
     122             : 
     123          32 :    END SUBROUTINE create_reftraj
     124             : 
     125             : ! **************************************************************************************************
     126             : !> \brief ...
     127             : !> \param reftraj ...
     128             : !> \par History
     129             : !>      10.2007 created
     130             : !> \author MI
     131             : ! **************************************************************************************************
     132          32 :    SUBROUTINE release_reftraj(reftraj)
     133             : 
     134             :       TYPE(reftraj_type), INTENT(INOUT)                  :: reftraj
     135             : 
     136          32 :       IF (ASSOCIATED(reftraj%info%traj_parser)) THEN
     137          32 :          CALL parser_release(reftraj%info%traj_parser)
     138          32 :          DEALLOCATE (reftraj%info%traj_parser)
     139             :       END IF
     140          32 :       IF (ASSOCIATED(reftraj%info%cell_parser)) THEN
     141           6 :          CALL parser_release(reftraj%info%cell_parser)
     142           6 :          DEALLOCATE (reftraj%info%cell_parser)
     143             :       END IF
     144          32 :       IF (ASSOCIATED(reftraj%info)) THEN
     145          32 :          DEALLOCATE (reftraj%info)
     146             :       END IF
     147          32 :       IF (ASSOCIATED(reftraj%msd)) THEN
     148           2 :          DEALLOCATE (reftraj%msd%ref0_pos)
     149           2 :          IF (reftraj%msd%msd_kind) THEN
     150           2 :             DEALLOCATE (reftraj%msd%val_msd_kind)
     151             :          END IF
     152           2 :          IF (reftraj%msd%msd_molecule) THEN
     153           0 :             DEALLOCATE (reftraj%msd%val_msd_molecule)
     154           0 :             DEALLOCATE (reftraj%msd%ref0_com_molecule)
     155             :          END IF
     156           2 :          IF (reftraj%msd%disp_atom) THEN
     157           2 :             DEALLOCATE (reftraj%msd%disp_atom_index)
     158           2 :             DEALLOCATE (reftraj%msd%disp_atom_dr)
     159             :          END IF
     160             : 
     161           2 :          DEALLOCATE (reftraj%msd)
     162             :       END IF
     163             : 
     164          32 :    END SUBROUTINE release_reftraj
     165             : 
     166           0 : END MODULE reftraj_types

Generated by: LCOV version 1.15