added get_last_error_message; still working on its unit test
This commit is contained in:
@ -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
|
||||
|
||||
@ -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?
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user