Check tracking results
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=labelLen), | intent(in) | :: | varname | |||
real(kind=rk), | intent(in) | :: | res(:) | |||
integer, | intent(out) | :: | error |
subroutine check_res( varname, res, error )
! ---------------------------------------------------------------------- !
character(len=labelLen), intent(in) :: varname
real(kind=rk), intent(in) :: res(:)
integer, intent(out) :: error
! ---------------------------------------------------------------------- !
integer :: iElem
real(kind=rk) :: diff_dens(nElems_track)
real(kind=rk) :: diff_state(nElems_track,4)
real(kind=rk) :: diff_vel(nElems_track,3)
! ---------------------------------------------------------------------- !
error = 0
select case (trim(varname))
case ('state')
do iElem = 1, nElems_track
diff_state(iElem,:) = res((iElem-1)*4 + 1 : (iElem-1)*4 + 4 ) &
& - state(iElem,:)
end do
if ( any(diff_state > eps) ) then
error = -1
write(*,*) 'Refernece value for state does not match'
end if
if (dumpRes) then
do iElem = 1, nElems_track
write(*,*) 'reference: ', state(iElem, :)
write(*,*) ' output: ', res( (iElem-1)*4 + 1 : (iElem-1)*4 + 4 )
end do
end if
case ('density')
diff_dens = res(:) - dens
if ( any(diff_dens > eps) ) then
error = -1
write(*,*) 'Refernece value for density does not match'
end if
if (dumpRes) then
write(*,*) 'reference: ', dens
write(*,*) ' output: ', res
end if
case ('velocity')
do iElem = 1, nElems_track
diff_vel(iElem,:) = res((iElem-1)*3 + 1 : (iElem-1)*3 + 3 ) &
& - vel(iElem,:)
end do
if ( any(diff_vel > eps) ) then
error = -1
write(*,*) 'Refernece value for velocity does not match'
end if
if (dumpRes) then
do iElem = 1, nElems_track
write(*,*) 'reference: ', vel(iElem, :)
write(*,*) ' output: ', res( (iElem-1)*3 + 1 : (iElem-1)*3 + 3 )
end do
end if
case default
write(*,*) 'Unknown variable name', trim(varname)
error = -1
end select
end subroutine check_res