Write some debug data to file
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(fieldmat_type), | intent(in) | :: | self |
subroutine fm_write_debug_data(self)
use file_utils, only: open_output_file, close_output_file
use mp, only: iproc, nproc_comm, rank_comm
implicit none
class(fieldmat_type), intent(in) :: self
character(len=20) :: ext
integer :: unit
integer :: ik,is,ic,np,ip
!Make the file extension
write(ext,'(".debug.",I0,".md")') iproc
!Open output file
call open_output_file(unit,ext)
!Now write data
write(unit,'("Field matrix debug data for proc : ",I0)') iproc
write(unit,'(80("="))')
write(unit,'()')
!/Here we have details of what cells this proc can see and how
!they're marked
write(unit,'("Details of object locality and state")')
write(unit,'(80("-"))')
write(unit,'()')
write(unit,'(7(" ",A13," "))') "ik", "is", "ic", "is_local", "is_empty", "is_all_local", "is_head"
write(unit,'(7(" ",14("-")))')
do ik=1,self%naky
do is=1,self%kyb(ik)%nsupercell
do ic=1,self%kyb(ik)%supercells(is)%ncell
write(unit,'(3(I14," "),4(L14," "))') ik,is,ic,&
self%kyb(ik)%supercells(is)%cells(ic)%is_local,&
self%kyb(ik)%supercells(is)%cells(ic)%is_empty,&
self%kyb(ik)%supercells(is)%cells(ic)%is_all_local,&
self%kyb(ik)%supercells(is)%is_head
enddo
enddo
enddo
write(unit,'(" ",7(14("-")," "))')
write(unit,'()')
!/Here we see what limits the row blocks have for the cells
!we actually have
write(unit,'()')
write(unit,'("Row limits")')
write(unit,'(80("-"))')
write(unit,'()')
do ik=1,self%naky
write(unit,'("* ik : ",I0)') ik
! if(.not.self%kyb(ik)%is_local) cycle
do is=1,self%kyb(ik)%nsupercell
write(unit,'(" * is : ",I0)') is
! if(.not.self%kyb(ik)%supercells(is)%is_local) cycle
write(unit,'(" ","is_head - ",L1)') self%kyb(ik)%supercells(is)%is_head
write(unit,'(" ","is_empty - ",L1)') self%kyb(ik)%supercells(is)%is_empty
write(unit,'(" ","is_local - ",L1)') self%kyb(ik)%supercells(is)%is_local
write(unit,'(" ","is_all_local - ",L1)') self%kyb(ik)%supercells(is)%is_all_local
write(unit,'()')
write(unit,'(" ",4(" ",A8," "))') "ic", "rllim", "rulim", "nrow"
write(unit,'(" ",4(" ",9("-")))')
do ic=1,self%kyb(ik)%supercells(is)%ncell
if(size(self%kyb(ik)%supercells(is)%cells(ic)%rb)>0)then
write(unit,'(" ",4(I9," "))') ic,&
self%kyb(ik)%supercells(is)%cells(ic)%rb(1)%row_llim,&
self%kyb(ik)%supercells(is)%cells(ic)%rb(1)%row_ulim,&
self%kyb(ik)%supercells(is)%cells(ic)%rb(1)%nrow
endif
enddo
write(unit,'(" ",4(" ",9("-")))')
enddo
enddo
write(unit,'()')
!/Subcommunicators
write(unit,'()')
write(unit,'("Subcommunicators")')
write(unit,'(80("-"))')
write(unit,'()')
do ik=1,self%naky
write(unit,'("* ik : ",I0)') ik
do is=1,self%kyb(ik)%nsupercell
write(unit,'(" * is : ",I0)') is
write(unit,'()')
write(unit,'(" ",6(" ",A7," "))') "name", "nproc", "iproc", "proc0", "REnproc", "REiproc"
write(unit,'(" ",6(" ",8("-")))')
if(self%kyb(ik)%supercells(is)%sc_sub_all%nproc>0)then
call nproc_comm(self%kyb(ik)%supercells(is)%sc_sub_all%id,np)
call rank_comm(self%kyb(ik)%supercells(is)%sc_sub_all%id,ip)
else
np=-1
ip=-1
endif
write(unit,'(" ",(" ",A8),2(I8," "),1(L8," "),2(I8," "))') "all",&
self%kyb(ik)%supercells(is)%sc_sub_all%nproc,&
self%kyb(ik)%supercells(is)%sc_sub_all%iproc,&
self%kyb(ik)%supercells(is)%sc_sub_all%proc0,&
np,ip
if(self%kyb(ik)%supercells(is)%sc_sub_pd%nproc>0)then
call nproc_comm(self%kyb(ik)%supercells(is)%sc_sub_pd%id,np)
call rank_comm(self%kyb(ik)%supercells(is)%sc_sub_pd%id,ip)
else
np=-1
ip=-1
endif
write(unit,'(" ",(" ",A8),2(I8," "),1(L8," "),2(I8," "))') "pd",&
self%kyb(ik)%supercells(is)%sc_sub_pd%nproc,&
self%kyb(ik)%supercells(is)%sc_sub_pd%iproc,&
self%kyb(ik)%supercells(is)%sc_sub_pd%proc0,&
np,ip
write(unit,'(" ",6(" ",8("-")))')
write(unit,'()')
enddo
enddo
write(unit,'()')
!Now close output file
call close_output_file(unit)
end subroutine fm_write_debug_data