!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! CARACAL - Ring polymer molecular dynamics and rate constant calculations ! on black-box generated potential energy surfaces ! ! Copyright (c) 2023 by Julien Steffen (mail@j-steffen.org) ! Stefan Grimme (grimme@thch.uni-bonn.de) (QMDFF code) ! ! Permission is hereby granted, free of charge, to any person obtaining a ! copy of this software and associated documentation files (the "Software"), ! to deal in the Software without restriction, including without limitation ! the rights to use, copy, modify, merge, publish, distribute, sublicense, ! and/or sell copies of the Software, and to permit persons to whom the ! Software is furnished to do so, subject to the following conditions: ! ! The above copyright notice and this permission notice shall be included in ! all copies or substantial portions of the Software. ! ! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ! IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ! FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ! THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ! LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ! FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ! DEALINGS IN THE SOFTWARE. ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! subroutine checktype: this checks the type of the string and ! returns it cast to real or as string. ! ! part of QMDFF ! subroutine checktype(field,num,str,ty) implicit none character(len=128)::field,str real(kind=8)::num integer::i,e,ty logical::is_num ty=99 str='' is_num=.false. ! ! cast string on real and get error code; 0 means success. ! read(field,'(F10.5)',IOSTAT=e) num if(e.eq.0)is_num=.true. if (is_num) then ! ! check for integer/real ! if (index(field,'.').ne.0) then read(field,'(F20.10)')num ty=0 ! ! if integer, add .0 to string; otherwise cast to real does not work ! else str=trim(field)//'.0' read(str,'(F20.10)')num str='' ty=0 end if else str=field ty=1 end if return end subroutine checktype