mirror of
https://github.com/cp2k/cp2k.git
synced 2026-07-25 04:25:15 -04:00
2.3 KiB
2.3 KiB
Error Handling
In CP2K there exist three convenient macros for error handling. They are defined in
src/base/base_uses.f90, and are therefore always available. However, these macros can only be used
for short messages (approximately less than 7 words), because of Fortran's line length
limitation.
CPWARN("A short warning message")
CPABORT("A short error message")
CPASSERT(2 > 1) ! For sanity checks only, not for user errors.
For longer messages one can use these two routines:
CALL cp_warn(__LOCATION__,"A long warning message "//&
"which can span multiple lines and contains "//&
"some valuable advice for the user.")
CALL cp_abort(__LOCATION__,"A long error message "//&
"with even more valuable advice.")
Messages from `CPWARN` and `cp_warn` are only printed on the first MPI-rank.
Warnings issued on other ranks are ignored.
Cheat Sheet
If you want to...
- print a short warning message, then you should use:
CPWARN("your short message") - print a longer warning message, then you should use:
CALL cp_warn(__LOCATION__,"your lengthy message, "//&
"which can even span multiple lines")
- stop the program with a short error message, then you should use:
CPABORT("your short message") - stop the program with a longer error message, then you should use:
CALL cp_abort(__LOCATION__,"your lengthy message, "//&
"which can even span multiple lines")
- have a simple assertion without a custom error message, then you should use:
CPASSERT(your_logical_expression) - have a simple assertion with a short error message, then you should use:
IF(.NOT.your_logical_expression) CPABORT("your short message")
- have a complex assertion with a short error message, then you should use:
IF(.NOT.your_super_complicated_logical_expression_that_takes_alot_of_space)&
CPABORT("your short message")
- have a lengthy assertion with a longer error message, then you should use:
IF(.NOT.your_super_long_logical_expression_that_takes_alot_of_space)&
CALL cp_abort(__LOCATION__,"your lengthy message"//&
"which again can even span multiple lines")