added get_last_error_message; still working on its unit test

This commit is contained in:
Karl Hammond
2022-09-26 21:56:03 -05:00
parent 1072a5bda2
commit 2072e08624
2 changed files with 62 additions and 26 deletions

View File

@ -101,6 +101,7 @@ MODULE LIBLAMMPS
PROCEDURE :: version => lmp_version
PROCEDURE :: is_running => lmp_is_running
PROCEDURE :: has_error => lmp_has_error
PROCEDURE :: get_last_error_message => lmp_get_last_error_message
END TYPE lammps
INTERFACE lammps
@ -416,12 +417,18 @@ MODULE LIBLAMMPS
!SUBROUTINE lammps_force_timeout
INTEGER (C_int) FUNCTION lammps_has_error (handle) BIND(C)
IMPORT :: C_ptr, C_int
IMPORT :: c_ptr, c_int
IMPLICIT NONE
TYPE(C_ptr), VALUE :: handle
TYPE(c_ptr), VALUE :: handle
END FUNCTION lammps_has_error
!INTEGER (c_int) FUNCTION lammps_get_last_error_message
INTEGER (c_int) FUNCTION lammps_get_last_error_message &
(handle, buffer, buf_size) BIND(C)
IMPORT :: c_ptr, c_int, c_char
IMPLICIT NONE
TYPE(c_ptr), VALUE :: handle, buffer
INTEGER(c_int), VALUE :: buf_size
END FUNCTION lammps_get_last_error_message
END INTERFACE
@ -852,12 +859,40 @@ CONTAINS
! equivalent function to lammps_has_error
LOGICAL FUNCTION lmp_has_error(self)
CLASS(lammps), INTENT(IN) :: self
INTEGER(C_int) :: has_error
INTEGER(c_int) :: has_error
has_error = lammps_has_error(self%handle)
lmp_has_error = (has_error /= 0_C_int)
lmp_has_error = (has_error /= 0_c_int)
END FUNCTION lmp_has_error
! equivalent function to lammps_get_last_error_message
SUBROUTINE lmp_get_last_error_message(self, buffer, status)
CLASS(lammps), INTENT(IN) :: self
CHARACTER(LEN=*), INTENT(OUT) :: buffer
INTEGER, INTENT(OUT), OPTIONAL :: status
INTEGER(c_int) :: length, Cstatus, i
TYPE(c_ptr) :: Cbuffer
buffer = ''
IF ( lmp_has_error(self) ) THEN
length = LEN(buffer)
Cbuffer = f2cstring(buffer)
Cstatus = lammps_get_last_error_message(self%handle, Cbuffer, length)
length = MIN(LEN(buffer), c_strlen(Cbuffer))
FORALL ( i=1:length )
buffer(i:i) = Cbuffer(i)
END FORALL
IF ( PRESENT(status) ) THEN
status = Cstatus
END IF
ELSE
buffer = ''
IF ( PRESENT(status) ) THEN
status = 0
END IF
END IF
END SUBROUTINE lmp_get_last_error_message
! equivalent function to lammps_is_running
LOGICAL FUNCTION lmp_is_running(self)
CLASS(lammps), INTENT(IN) :: self

View File

@ -111,5 +111,6 @@ TEST_F(LAMMPS_properties, extract_setting)
TEST_F(LAMMPS_properties, has_error)
{
EXPECT_EQ(f_lammps_has_error(), 0);
EXPECT_EQ(f_lammps_has_error(), lammps_has_error(lmp));
// TODO: How to test the error message itself?
};