subroutine error_message(err_number, myrank, opt, c_opt)
implicit none
integer(int32), intent(in) :: err_number
integer(int32), optional, intent(in) :: myrank
real(real64), optional, intent(in) :: opt
character(*), optional, intent(in) :: c_opt
character(256) :: msg
integer(int32) :: ierr
character(8) :: fmt = '(a,i3,a)'
if (err_number == 901) then
write (msg, '(a)') "Don't exist Input folder."
else if (err_number == 902) then
if (present(c_opt)) then
write (msg, '(3a)') "Don't exist file '", trim(adjustl(c_opt)), "'."
else
write (msg, '(a)') "Don't exist file."
end if
else if (err_number == 903) then
if (present(c_opt)) then
write (msg, '(3a)') "Can't open file '", trim(adjustl(c_opt)), "'."
else
write (msg, '(a)') "Can't open file."
end if
else if (err_number == 904) then
if (present(c_opt)) then
write (msg, '(3a)') "Selected variable '", trim(adjustl(c_opt)), "' is not found in JSON file."
else
write (msg, '(a)') "Selected variable is not found in JSON file."
end if
else if (err_number == 905) then
if (present(c_opt)) then
write (msg, '(3a)') "Selected variable '", trim(adjustl(c_opt)), "' is invalid."
else
write (msg, '(a)') "Selected variable is invalid."
end if
else if (err_number == 906) then
if (present(c_opt)) then
write (msg, '(3a)') "Selected file '", trim(adjustl(c_opt)), "' is invalid"
else
write (msg, '(a)') "Selected file is invalid"
end if
else if (err_number == 911) then
msg = "The number of elements must be positive."
else if (err_number == 912) then
msg = "The number of nodal must be positive."
else if (err_number == 913) then
msg = "The number of shape must be positive."
else if (err_number == 914) then
msg = "The number of dimention must be positive."
else if (err_number == 915) then
msg = "Dirichlet boundary conditions for water transport must be positive."
else if (err_number == 916) then
msg = "Dirichlet boundary conditions for heat transport must be positive."
else if (err_number == 917) then
msg = "The value of porosity must be positive."
else if (err_number == 918) then
msg = "The value of density must be positive."
else if (err_number == 919) then
msg = "The value of hydrulic conductivity must be positive."
else if (err_number == 920) then
msg = "The value of thermal conductivity must be positive."
else if (err_number == 921) then
msg = "The value of specific heat must be positive."
else if (err_number == 922) then
msg = "The value of latent heat must be positive."
else if (err_number == 923) then
msg = "The number of concering time information must be positive."
else if (err_number == 924) then
msg = "The initial and coolant temperature are same."
else if (err_number == 928) then
msg = "Two or more points are the same."
else if (err_number == 929) then
msg = "The number of array elements must be positive."
else if (err_number == 930) then
msg = "The number of matrix elements must be positive."
! reordering error message
else if (err_number == 931) then
if (present(c_opt)) then
write (msg, fmt) "#", err_number, ": Could not find a starting node in "//trim(adjustl(c_opt))//"."
else
write (msg, fmt) "#", err_number, ": Could not find a starting node."
end if
else if (err_number == 932) then
if (present(c_opt)) then
write (msg, fmt) "#", err_number, ": Permutation is not ready in"//trim(adjustl(c_opt))//". Call reordering first."
else
write (msg, fmt) "#", err_number, ": Permutation is not ready. Call reordering first."
end if
! solver error message
else if (err_number == 933) then
msg = "Solver type is not selected."
else if (err_number == 934) then
msg = "Freezing calculation is not selected."
else if (err_number == 941) then
msg = "The solution to the simultaneous linear equations could not be found."
else if (err_number == 942) then
msg = "LU decomposition could not be successed."
else if (err_number == 943) then
msg = "The inverse matrix could not be found."
else if (err_number == 944) then
msg = "The target result is too high."
else if (err_number == 945) then
msg = "The target result is too low."
else if (err_number == 946) then
msg = "The solution has been diverged."
else if (err_number == 951) then
write (msg, fmt) "#", err_number, ": Array is already allocated."
else if (err_number == 952) then
write (msg, fmt) "#", err_number, ": Invalid array length."
else if (err_number == 953) then
write (msg, fmt) "#", err_number, ": Requested index range is too large."
else if (err_number == 954) then
write (msg, fmt) "#", err_number, ": Invalid range - first index is greater than last."
else if (err_number == 955) then
write (msg, fmt) "#", err_number, ": Memory allocation failed."
else if (err_number == 956) then
write (msg, fmt) "#", err_number, ": Cannot specify both length and bounds."
else if (err_number == 957) then
write (msg, fmt) "#", err_number, ": Either length or bounds must be specified."
else if (err_number == 958) then
write (msg, fmt) "#", err_number, ": bounds array must have exactly 2 elements."
else if (err_number == 961) then
write (msg, '(a)') "Pointer has already allocated."
else if (err_number == 971) then
write (msg, fmt) "#", err_number, ": Memory deallocation failed."
else
msg = "Unknown error"
end if
#ifdef _MPI
if (myrank == 0) then
call MPI_Finalize(ierr)
#endif
call global_logger%log_error(message=msg)
stop
#ifdef _MPI
end if
#endif
end subroutine error_message