User Tools

Site Tools


dev:error_handling

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
dev:error_handling [2025/03/08 13:41] – oschuettdev:error_handling [2026/10/14 08:44] (current) – fstein
Line 1: Line 1:
 ====== Error Handling ====== ====== Error Handling ======
  
-In CP2K there exist three convenient macros for error handling. They are defined in [[src>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. +This page has been moved to [[https://manual.cp2k.org/trunk/development/error-handling.html]]
-<code Fortran> +
-   CPWARN("A short warning message") +
-   CPABORT("A short error message") +
-   CPASSERT(2 > 1) ! For sanity checks only, not for user errors. +
-</code> +
- +
-For longer messages one can use these two routines: +
-<code Fortran> +
-   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.")       +
-</code> +
- +
-<note important> +
-Messages from ''CPWARN'' and ''cp_warn'' are only printed on the first MPI-rank.\\ Warnings issued on other ranks are ignored. +
-</note> +
- +
-===== Cheat Sheet ===== +
-If you want to... +
-  * print a **short warning** message, then you should use:<code Fortran> CPWARN("your short message")</code> +
-  * print a **longer warning** message, then you should use:<code Fortran> CALL cp_warn(__LOCATION__,"your lengthy message, "//& +
-              "which can even span multiple lines")</code> +
- +
-  * **stop** the program with a **short** error message, then you should use:<code Fortran> CPABORT("your short message")</code> +
-  * **stop** the program with a **longer** error message, then you should use:<code Fortran> CALL cp_abort(__LOCATION__,"your lengthy message, "//& +
-               "which can even span multiple lines")</code> +
-  * have a **simple assertion** without a custom error message, then you should use:<code Fortran> CPASSERT(your_logical_expression)</code> +
-  * have a **simple assertion** with a **short** error message, then you should use:<code Fortran> IF(.NOT.your_logical_expression) CPABORT("your short message")</code> +
-  * have a **complex assertion** with a **short** error message, then you should use:<code Fortran> IF(.NOT.your_super_complicated_logical_expression_that_takes_alot_of_space)& +
-    CPABORT("your short message")</code> +
-  * have a **lengthy assertion** with a **longer** error message, then you should use:<code Fortran> 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")</code> +
dev/error_handling.txt · Last modified: by fstein