User Tools

Site Tools


dev:error_handling

Error Handling

In CP2K there exist three convenient macros for error handling. They are defined in cp2k/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 advises.")      

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")
dev/error_handling.txt · Last modified: 2015/12/14 11:37 by 31.52.176.83