mirror of
https://github.com/cp2k/cp2k.git
synced 2026-07-26 21:25:19 -04:00
72 lines
2.3 KiB
Markdown
72 lines
2.3 KiB
Markdown
# 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.")
|
|
```
|
|
|
|
```{note}
|
|
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")
|
|
```
|