@@ -26,21 +26,14 @@ function Base.copy(FEMB::FEMatrixBlock{TvM, TiM, TvG, TiG, FETypeX, FETypeY, APT
2626 return FEMatrixBlock {TvM, TiM, TvG, TiG, FETypeX, FETypeY, APTX, APTY} (deepcopy (FEMB. name), copy (FEMB. FES), copy (FEMB. FESY), FEMB. offset, FEMB. offsetY, FEMB. last_index, FEMB. last_indexY, entries)
2727end
2828
29- function Base. show (io:: IO , FEB:: FEMatrixBlock ; tol = 1.0e-14 )
30- @printf (io, " \n " )
31- for j in 1 : (FEB. offset + 1 ): FEB. last_index
32- for k in 1 : (FEB. offsetY + 1 ): FEB. last_indexY
33- if FEB. entries[j, k] > tol
34- @printf (io, " +%.1e" , FEB. entries[j, k])
35- elseif FEB. entries[j, k] < - tol
36- @printf (io, " %.1e" , FEB. entries[j, k])
37- else
38- @printf (io, " ********" )
39- end
40- end
41- @printf (io, " \n " )
42- end
43- return
29+ """
30+ $(TYPEDSIGNATURES)
31+
32+ Custom `show` function for `FEMatrixBlock` that prints its coordinates and the name.
33+ """
34+ function Base. show (io:: IO , FEB:: FEMatrixBlock )
35+ @printf (io, " [%d:%d,%d:%d]: %s" , FEB. offset+ 1 , FEB. last_index, FEB. offsetY+ 1 , FEB. last_indexY, FEB. name)
36+ return nothing
4437end
4538
4639
@@ -100,6 +93,9 @@ Base.getindex(FEF::FEMatrix{TvM, TiM, TvG, TiG, nbrow, nbcol, nbtotal}, i::Int,
10093Base. getindex (FEB:: FEMatrixBlock , i:: Int , j:: Int ) = FEB. entries[FEB. offset + i, FEB. offsetY + j]
10194Base. getindex (FEB:: FEMatrixBlock , i:: Any , j:: Any ) = FEB. entries[FEB. offset .+ i, FEB. offsetY .+ j]
10295Base. setindex! (FEB:: FEMatrixBlock , v, i:: Int , j:: Int ) = setindex! (FEB. entries, v, FEB. offset + i, FEB. offsetY + j)
96+ Base. first (FEB:: FEMatrixBlock ) = (FEB. offset+ 1 , FEB. offsetY+ 1 )
97+ Base. last (FEB:: FEMatrixBlock ) = (FEB. last_index, FEB. last_indexY)
98+
10399
104100
105101"""
@@ -147,14 +143,15 @@ Custom `show` function for `FEMatrix` that prints some information on its blocks
147143function Base. show (io:: IO , FEM:: FEMatrix{TvM, TiM, TvG, TiG, nbrow, nbcol, nbtotal} ) where {TvM, TiM, TvG, TiG, nbrow, nbcol, nbtotal}
148144 println (io, " \n FEMatrix information" )
149145 println (io, " ====================" )
150- println (io, " block | ndofsX | ndofsY | name (FETypeX, FETypeY) " )
146+ println (io, " block | starts | ends | size | name " )
151147 for j in 1 : length (FEM)
152148 n = mod (j - 1 , nbrow) + 1
153149 m = Int (ceil (j / nbrow))
154- @printf (io, " [%d,%d] |" , m, n)
155- @printf (io, " %6d |" , FEM[j]. FES. ndofs)
156- @printf (io, " %6d |" , FEM[j]. FESY. ndofs)
157- @printf (io, " %s (%s, %s)\n " , FEM[j]. name, FEM[j]. FES. name, FEM[j]. FESY. name)
150+ @printf (io, " [%2d,%2d] |" , m, n)
151+ @printf (io, " (%6d,%6d) |" , FEM[j]. offset+ 1 , FEM[j]. offsetY+ 1 )
152+ @printf (io, " (%6d,%6d) |" , FEM[j]. last_index, FEM[j]. last_indexY)
153+ @printf (io, " (%6d,%6d) |" , FEM[j]. FES. ndofs, FEM[j]. FESY. ndofs)
154+ @printf (io, " %s \n " , FEM[j]. name)
158155 end
159156 return println (io, " \n nnzvals = $(length (FEM. entries. cscmatrix. nzval)) " )
160157end
@@ -166,19 +163,19 @@ FEMatrix{TvM,TiM}(name::String, FES::FESpace{TvG,TiG,FETypeX,APTX}) where {TvG,T
166163
167164Creates FEMatrix with one square block (FES,FES).
168165"""
169- function FEMatrix (FES:: FESpace ; name = " auto " )
166+ function FEMatrix (FES:: FESpace ; name = :automatic )
170167 return FEMatrix {Float64, Int64} (FES; name = name)
171168end
172- function FEMatrix {TvM} (FES:: FESpace ; name = " auto " ) where {TvM}
169+ function FEMatrix {TvM} (FES:: FESpace ; name = :automatic ) where {TvM}
173170 return FEMatrix {TvM, Int64} (FES; name = name)
174171end
175- function FEMatrix {TvM, TiM} (FES:: FESpace{TvG, TiG, FETypeX, APTX} ; name = " auto " ) where {TvM, TiM, TvG, TiG, FETypeX, APTX}
172+ function FEMatrix {TvM, TiM} (FES:: FESpace{TvG, TiG, FETypeX, APTX} ; name = :automatic ) where {TvM, TiM, TvG, TiG, FETypeX, APTX}
176173 return FEMatrix {TvM, TiM} ([FES], [FES]; name = name)
177174end
178175
179176"""
180177````
181- FEMatrix{TvM,TiM}(FESX, FESY; name = "auto" )
178+ FEMatrix{TvM,TiM}(FESX, FESY; name = :automatic )
182179````
183180
184181Creates FEMatrix with one rectangular block (FESX,FESY) if FESX and FESY are single FESpaces, or
@@ -209,12 +206,12 @@ end
209206
210207"""
211208````
212- FEMatrix{TvM,TiM}(FESX, FESY; name = "auto" )
209+ FEMatrix{TvM,TiM}(FESX, FESY; name = :automatic )
213210````
214211
215212Creates an FEMatrix with blocks coressponding to the ndofs of FESX (rows) and FESY (columns).
216213"""
217- function FEMatrix {TvM, TiM} (FESX:: Array{<:FESpace{TvG, TiG}, 1} , FESY:: Array{<:FESpace{TvG, TiG}, 1} ; entries = nothing , name = nothing , tags = nothing , tagsX = tags, tagsY = tagsX, npartitions = 1 , kwargs... ) where {TvM, TiM, TvG, TiG}
214+ function FEMatrix {TvM, TiM} (FESX:: Array{<:FESpace{TvG, TiG}, 1} , FESY:: Array{<:FESpace{TvG, TiG}, 1} ; entries = nothing , name = :automatic , tags = nothing , tagsX = tags, tagsY = tagsX, npartitions = 1 , kwargs... ) where {TvM, TiM, TvG, TiG}
218215 ndofsX, ndofsY = 0 , 0
219216 for j in 1 : length (FESX)
220217 ndofsX += FESX[j]. ndofs
@@ -232,7 +229,7 @@ function FEMatrix{TvM, TiM}(FESX::Array{<:FESpace{TvG, TiG}, 1}, FESY::Array{<:F
232229 @assert size (entries) == (ndofsX, ndofsY) " size of given entries not matching number of dofs in given FE space(s)"
233230 end
234231
235- if name === nothing
232+ if name === :automatic || name === nothing
236233 name = " "
237234 end
238235
@@ -250,9 +247,9 @@ function FEMatrix{TvM, TiM}(FESX::Array{<:FESpace{TvG, TiG}, 1}, FESY::Array{<:F
250247 offsetY = 0
251248 for k in 1 : length (FESY)
252249 if (tagsX != = nothing ) && (tagsY != = nothing )
253- blockname = name * " [ $(tagsX[j]) , $( tagsY[k])"
250+ blockname = name * " $(tagsX[j]) [ $(FESX[j] . name) ] x $( tagsY[k])[ $(FESY[k] . name) ] "
254251 else
255- blockname = name * " [ $j , $k ] "
252+ blockname = name * " $(FESX[j] . name) x $(FESY[k] . name) "
256253 end
257254 Blocks[(j - 1 ) * length (FESY) + k] =
258255 FEMatrixBlock {TvM, TiM, TvG, TiG, eltype(FESX[j]), eltype(FESY[k]), assemblytype(FESX[j]), assemblytype(FESY[k])} (blockname, FESX[j], FESY[k], offset, offsetY, offset + FESX[j]. ndofs, offsetY + FESY[k]. ndofs, entries)
@@ -641,3 +638,12 @@ function submatrix(A::AbstractExtendableSparseMatrixCSC{Tv, Ti}, srows, scols) w
641638 flush! (S)
642639 return S
643640end
641+
642+ """
643+ $(TYPEDSIGNATURES)
644+
645+ Returns the FEMatrixBlock as an ExtendableSparseMatrix
646+ """
647+ function submatrix (A:: FEMatrixBlock{Tv, Ti} ) where {Tv, Ti}
648+ return submatrix (A. entries, A. offset+ 1 : A. last_index, A. offsetY+ 1 : A. last_indexY)
649+ end
0 commit comments