mld2p4:
Fixed docs, plus date on html manual. New data_input.f90.
|
Before Width: | Height: | Size: 368 B After Width: | Height: | Size: 376 B |
|
Before Width: | Height: | Size: 374 B After Width: | Height: | Size: 686 B |
|
Before Width: | Height: | Size: 685 B After Width: | Height: | Size: 374 B |
|
Before Width: | Height: | Size: 241 B After Width: | Height: | Size: 233 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 564 B After Width: | Height: | Size: 569 B |
|
Before Width: | Height: | Size: 687 B After Width: | Height: | Size: 694 B |
|
Before Width: | Height: | Size: 495 B After Width: | Height: | Size: 497 B |
|
Before Width: | Height: | Size: 644 B After Width: | Height: | Size: 272 B |
|
Before Width: | Height: | Size: 255 B After Width: | Height: | Size: 644 B |
|
Before Width: | Height: | Size: 198 B After Width: | Height: | Size: 255 B |
|
Before Width: | Height: | Size: 223 B After Width: | Height: | Size: 198 B |
|
Before Width: | Height: | Size: 648 B After Width: | Height: | Size: 223 B |
|
Before Width: | Height: | Size: 686 B After Width: | Height: | Size: 648 B |
@@ -67,7 +67,7 @@ University of Rome ``Tor Vergata'', Italy
|
|||||||
<BR>
|
<BR>
|
||||||
Software version: 1.0
|
Software version: 1.0
|
||||||
<BR>
|
<BR>
|
||||||
July 24, 2008
|
Sept. 9th, 2008
|
||||||
|
|
||||||
<BR>
|
<BR>
|
||||||
|
|
||||||
|
|||||||
@@ -276,7 +276,7 @@ three steps:
|
|||||||
ALT="$i=1,\ldots,m$">;
|
ALT="$i=1,\ldots,m$">;
|
||||||
</LI>
|
</LI>
|
||||||
<LI>prolongation and sum of the <IMG
|
<LI>prolongation and sum of the <IMG
|
||||||
WIDTH="23" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
WIDTH="22" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||||
SRC="img32.png"
|
SRC="img32.png"
|
||||||
ALT="$w_i$">'s, i.e. <!-- MATH
|
ALT="$w_i$">'s, i.e. <!-- MATH
|
||||||
$w = \sum_{i=1}^m (R_i^{\delta})^T w_i$
|
$w = \sum_{i=1}^m (R_i^{\delta})^T w_i$
|
||||||
@@ -309,7 +309,7 @@ time on parallel distributed-memory computers is the so-called <I>Restricted AS
|
|||||||
HREF="node25.html#CAI_SARKIS">5</A>,<A
|
HREF="node25.html#CAI_SARKIS">5</A>,<A
|
||||||
HREF="node25.html#EFSTATHIOU">13</A>]. It
|
HREF="node25.html#EFSTATHIOU">13</A>]. It
|
||||||
is obtained by zeroing the components of <IMG
|
is obtained by zeroing the components of <IMG
|
||||||
WIDTH="23" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
WIDTH="22" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||||
SRC="img32.png"
|
SRC="img32.png"
|
||||||
ALT="$w_i$"> corresponding to the
|
ALT="$w_i$"> corresponding to the
|
||||||
overlapping vertices when applying the prolongation. Therefore,
|
overlapping vertices when applying the prolongation. Therefore,
|
||||||
|
|||||||
@@ -272,7 +272,7 @@ S = I - \omega D^{-1} A ,
|
|||||||
-->
|
-->
|
||||||
<TABLE WIDTH="100%" ALIGN="CENTER">
|
<TABLE WIDTH="100%" ALIGN="CENTER">
|
||||||
<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:jac_smoother"></A><IMG
|
<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:jac_smoother"></A><IMG
|
||||||
WIDTH="126" HEIGHT="30" BORDER="0"
|
WIDTH="125" HEIGHT="30" BORDER="0"
|
||||||
SRC="img83.png"
|
SRC="img83.png"
|
||||||
ALT="\begin{displaymath}
|
ALT="\begin{displaymath}
|
||||||
S = I - \omega D^{-1} A ,
|
S = I - \omega D^{-1} A ,
|
||||||
|
|||||||
@@ -439,7 +439,7 @@ level.</CAPTION>
|
|||||||
<TR><TD ALIGN="LEFT"><code>mld_coarse_sweeps_</code></TD>
|
<TR><TD ALIGN="LEFT"><code>mld_coarse_sweeps_</code></TD>
|
||||||
<TD ALIGN="LEFT"><code>integer</code></TD>
|
<TD ALIGN="LEFT"><code>integer</code></TD>
|
||||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any int. num. <IMG
|
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any int. num. <IMG
|
||||||
WIDTH="31" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
WIDTH="32" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||||
SRC="img94.png"
|
SRC="img94.png"
|
||||||
ALT="$> 0$"></TD>
|
ALT="$> 0$"></TD>
|
||||||
<TD ALIGN="LEFT">4</TD>
|
<TD ALIGN="LEFT">4</TD>
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ Mathematics Department, Macquarie University, Sydney.
|
|||||||
The command line arguments were: <BR>
|
The command line arguments were: <BR>
|
||||||
<STRONG>latex2html</STRONG> <TT>-noaddress -dir ../../html userhtml.tex</TT>
|
<STRONG>latex2html</STRONG> <TT>-noaddress -dir ../../html userhtml.tex</TT>
|
||||||
<P>
|
<P>
|
||||||
The translation was initiated by Salvatore Filippone on 2008-09-04
|
The translation was initiated by Salvatore Filippone on 2008-09-09
|
||||||
<BR><HR>
|
<BR><HR>
|
||||||
|
|
||||||
</BODY>
|
</BODY>
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ Ax=b,
|
|||||||
-->
|
-->
|
||||||
<TABLE WIDTH="100%" ALIGN="CENTER">
|
<TABLE WIDTH="100%" ALIGN="CENTER">
|
||||||
<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="system1"></A><IMG
|
<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="system1"></A><IMG
|
||||||
WIDTH="57" HEIGHT="30" BORDER="0"
|
WIDTH="58" HEIGHT="30" BORDER="0"
|
||||||
SRC="img1.png"
|
SRC="img1.png"
|
||||||
ALT="\begin{displaymath}
|
ALT="\begin{displaymath}
|
||||||
Ax=b,
|
Ax=b,
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ University of Rome ``Tor Vergata'', Italy
|
|||||||
<BR>
|
<BR>
|
||||||
Software version: 1.0
|
Software version: 1.0
|
||||||
<BR>
|
<BR>
|
||||||
July 24, 2008
|
Sept. 9th, 2008
|
||||||
|
|
||||||
<BR>
|
<BR>
|
||||||
|
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ based on PSBLAS}\\[3ex]
|
|||||||
%\today
|
%\today
|
||||||
Software version: 1.0\\
|
Software version: 1.0\\
|
||||||
%\today
|
%\today
|
||||||
July 24, 2008
|
Sept. 9th, 2008
|
||||||
\clearpage
|
\clearpage
|
||||||
\ \\
|
\ \\
|
||||||
\thispagestyle{empty}
|
\thispagestyle{empty}
|
||||||
|
|||||||
@@ -40,52 +40,144 @@ module data_input
|
|||||||
|
|
||||||
interface read_data
|
interface read_data
|
||||||
module procedure read_char, read_int,&
|
module procedure read_char, read_int,&
|
||||||
& read_double, read_single
|
& read_double, read_single,&
|
||||||
|
& string_read_char, string_read_int,&
|
||||||
|
& string_read_double, string_read_single
|
||||||
end interface read_data
|
end interface read_data
|
||||||
|
interface trim_string
|
||||||
|
module procedure trim_string
|
||||||
|
end interface
|
||||||
|
|
||||||
|
character(len=4096), private :: charbuf
|
||||||
|
character, private, parameter :: def_marker="!"
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
|
||||||
subroutine read_char(val,file)
|
subroutine read_char(val,file,marker)
|
||||||
character(len=*), intent(out) :: val
|
character(len=*), intent(out) :: val
|
||||||
integer, intent(in) :: file
|
integer, intent(in) :: file
|
||||||
character(len=1024) :: charbuf
|
character(len=1), optional, intent(in) :: marker
|
||||||
integer :: idx
|
|
||||||
read(file,'(a)')charbuf
|
read(file,'(a)')charbuf
|
||||||
charbuf = adjustl(charbuf)
|
call read_data(val,charbuf,marker)
|
||||||
idx=index(charbuf,"!")
|
|
||||||
read(charbuf(1:idx-1),'(a)') val
|
|
||||||
end subroutine read_char
|
end subroutine read_char
|
||||||
subroutine read_int(val,file)
|
|
||||||
|
subroutine read_int(val,file,marker)
|
||||||
integer, intent(out) :: val
|
integer, intent(out) :: val
|
||||||
integer, intent(in) :: file
|
integer, intent(in) :: file
|
||||||
character(len=1024) :: charbuf
|
character(len=1), optional, intent(in) :: marker
|
||||||
integer :: idx
|
|
||||||
read(file,'(a)')charbuf
|
read(file,'(a)')charbuf
|
||||||
charbuf = adjustl(charbuf)
|
call read_data(val,charbuf,marker)
|
||||||
idx=index(charbuf,"!")
|
|
||||||
read(charbuf(1:idx-1),*) val
|
|
||||||
end subroutine read_int
|
end subroutine read_int
|
||||||
subroutine read_single(val,file)
|
subroutine read_single(val,file,marker)
|
||||||
use psb_base_mod
|
use psb_base_mod
|
||||||
real(psb_spk_), intent(out) :: val
|
real(psb_spk_), intent(out) :: val
|
||||||
integer, intent(in) :: file
|
integer, intent(in) :: file
|
||||||
character(len=1024) :: charbuf
|
character(len=1), optional, intent(in) :: marker
|
||||||
integer :: idx
|
|
||||||
read(file,'(a)')charbuf
|
read(file,'(a)')charbuf
|
||||||
charbuf = adjustl(charbuf)
|
call read_data(val,charbuf,marker)
|
||||||
idx=index(charbuf,"!")
|
|
||||||
read(charbuf(1:idx-1),*) val
|
|
||||||
end subroutine read_single
|
end subroutine read_single
|
||||||
subroutine read_double(val,file)
|
subroutine read_double(val,file,marker)
|
||||||
use psb_base_mod
|
use psb_base_mod
|
||||||
real(psb_dpk_), intent(out) :: val
|
real(psb_dpk_), intent(out) :: val
|
||||||
integer, intent(in) :: file
|
integer, intent(in) :: file
|
||||||
|
character(len=1), optional, intent(in) :: marker
|
||||||
|
|
||||||
|
read(file,'(a)')charbuf
|
||||||
|
call read_data(val,charbuf,marker)
|
||||||
|
|
||||||
|
end subroutine read_double
|
||||||
|
|
||||||
|
subroutine string_read_char(val,file,marker)
|
||||||
|
character(len=*), intent(out) :: val
|
||||||
|
character(len=*), intent(in) :: file
|
||||||
|
character(len=1), optional, intent(in) :: marker
|
||||||
|
character(len=1) :: marker_
|
||||||
character(len=1024) :: charbuf
|
character(len=1024) :: charbuf
|
||||||
integer :: idx
|
integer :: idx
|
||||||
|
if (present(marker)) then
|
||||||
|
marker_ = marker
|
||||||
|
else
|
||||||
|
marker_ = def_marker
|
||||||
|
end if
|
||||||
read(file,'(a)')charbuf
|
read(file,'(a)')charbuf
|
||||||
charbuf = adjustl(charbuf)
|
charbuf = adjustl(charbuf)
|
||||||
idx=index(charbuf,"!")
|
idx=index(charbuf,marker_)
|
||||||
|
read(charbuf(1:idx-1),'(a)') val
|
||||||
|
end subroutine string_read_char
|
||||||
|
|
||||||
|
subroutine string_read_int(val,file,marker)
|
||||||
|
integer, intent(out) :: val
|
||||||
|
character(len=*), intent(in) :: file
|
||||||
|
character(len=1), optional, intent(in) :: marker
|
||||||
|
character(len=1) :: marker_
|
||||||
|
character(len=1024) :: charbuf
|
||||||
|
integer :: idx
|
||||||
|
if (present(marker)) then
|
||||||
|
marker_ = marker
|
||||||
|
else
|
||||||
|
marker_ = def_marker
|
||||||
|
end if
|
||||||
|
read(file,'(a)')charbuf
|
||||||
|
charbuf = adjustl(charbuf)
|
||||||
|
idx=index(charbuf,marker_)
|
||||||
read(charbuf(1:idx-1),*) val
|
read(charbuf(1:idx-1),*) val
|
||||||
end subroutine read_double
|
end subroutine string_read_int
|
||||||
|
subroutine string_read_single(val,file,marker)
|
||||||
|
use psb_base_mod
|
||||||
|
real(psb_spk_), intent(out) :: val
|
||||||
|
character(len=*), intent(in) :: file
|
||||||
|
character(len=1), optional, intent(in) :: marker
|
||||||
|
character(len=1) :: marker_
|
||||||
|
character(len=1024) :: charbuf
|
||||||
|
integer :: idx
|
||||||
|
if (present(marker)) then
|
||||||
|
marker_ = marker
|
||||||
|
else
|
||||||
|
marker_ = def_marker
|
||||||
|
end if
|
||||||
|
read(file,'(a)')charbuf
|
||||||
|
charbuf = adjustl(charbuf)
|
||||||
|
idx=index(charbuf,marker_)
|
||||||
|
read(charbuf(1:idx-1),*) val
|
||||||
|
end subroutine string_read_single
|
||||||
|
subroutine string_read_double(val,file,marker)
|
||||||
|
use psb_base_mod
|
||||||
|
real(psb_dpk_), intent(out) :: val
|
||||||
|
character(len=*), intent(in) :: file
|
||||||
|
character(len=1), optional, intent(in) :: marker
|
||||||
|
character(len=1) :: marker_
|
||||||
|
character(len=1024) :: charbuf
|
||||||
|
integer :: idx
|
||||||
|
if (present(marker)) then
|
||||||
|
marker_ = marker
|
||||||
|
else
|
||||||
|
marker_ = def_marker
|
||||||
|
end if
|
||||||
|
read(file,'(a)')charbuf
|
||||||
|
charbuf = adjustl(charbuf)
|
||||||
|
idx=index(charbuf,marker_)
|
||||||
|
read(charbuf(1:idx-1),*) val
|
||||||
|
end subroutine string_read_double
|
||||||
|
|
||||||
|
function trim_string(string,marker)
|
||||||
|
character(len=*), intent(in) :: string
|
||||||
|
character(len=1), optional, intent(in) :: marker
|
||||||
|
character(len=len(string)) :: trim_string
|
||||||
|
character(len=1) :: marker_
|
||||||
|
integer :: idx
|
||||||
|
if (present(marker)) then
|
||||||
|
marker_ = marker
|
||||||
|
else
|
||||||
|
marker_ = def_marker
|
||||||
|
end if
|
||||||
|
idx=index(string,marker_)
|
||||||
|
trim_string = adjustl(string(idx:))
|
||||||
|
end function trim_string
|
||||||
end module data_input
|
end module data_input
|
||||||
|
|
||||||
|
|||||||
@@ -40,52 +40,144 @@ module data_input
|
|||||||
|
|
||||||
interface read_data
|
interface read_data
|
||||||
module procedure read_char, read_int,&
|
module procedure read_char, read_int,&
|
||||||
& read_double, read_single
|
& read_double, read_single,&
|
||||||
|
& string_read_char, string_read_int,&
|
||||||
|
& string_read_double, string_read_single
|
||||||
end interface read_data
|
end interface read_data
|
||||||
|
interface trim_string
|
||||||
|
module procedure trim_string
|
||||||
|
end interface
|
||||||
|
|
||||||
|
character(len=4096), private :: charbuf
|
||||||
|
character, private, parameter :: def_marker="!"
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
|
||||||
subroutine read_char(val,file)
|
subroutine read_char(val,file,marker)
|
||||||
character(len=*), intent(out) :: val
|
character(len=*), intent(out) :: val
|
||||||
integer, intent(in) :: file
|
integer, intent(in) :: file
|
||||||
character(len=1024) :: charbuf
|
character(len=1), optional, intent(in) :: marker
|
||||||
integer :: idx
|
|
||||||
read(file,'(a)')charbuf
|
read(file,'(a)')charbuf
|
||||||
charbuf = adjustl(charbuf)
|
call read_data(val,charbuf,marker)
|
||||||
idx=index(charbuf,"!")
|
|
||||||
read(charbuf(1:idx-1),'(a)') val
|
|
||||||
end subroutine read_char
|
end subroutine read_char
|
||||||
subroutine read_int(val,file)
|
|
||||||
|
subroutine read_int(val,file,marker)
|
||||||
integer, intent(out) :: val
|
integer, intent(out) :: val
|
||||||
integer, intent(in) :: file
|
integer, intent(in) :: file
|
||||||
character(len=1024) :: charbuf
|
character(len=1), optional, intent(in) :: marker
|
||||||
integer :: idx
|
|
||||||
read(file,'(a)')charbuf
|
read(file,'(a)')charbuf
|
||||||
charbuf = adjustl(charbuf)
|
call read_data(val,charbuf,marker)
|
||||||
idx=index(charbuf,"!")
|
|
||||||
read(charbuf(1:idx-1),*) val
|
|
||||||
end subroutine read_int
|
end subroutine read_int
|
||||||
subroutine read_single(val,file)
|
subroutine read_single(val,file,marker)
|
||||||
use psb_base_mod
|
use psb_base_mod
|
||||||
real(psb_spk_), intent(out) :: val
|
real(psb_spk_), intent(out) :: val
|
||||||
integer, intent(in) :: file
|
integer, intent(in) :: file
|
||||||
character(len=1024) :: charbuf
|
character(len=1), optional, intent(in) :: marker
|
||||||
integer :: idx
|
|
||||||
read(file,'(a)')charbuf
|
read(file,'(a)')charbuf
|
||||||
charbuf = adjustl(charbuf)
|
call read_data(val,charbuf,marker)
|
||||||
idx=index(charbuf,"!")
|
|
||||||
read(charbuf(1:idx-1),*) val
|
|
||||||
end subroutine read_single
|
end subroutine read_single
|
||||||
subroutine read_double(val,file)
|
subroutine read_double(val,file,marker)
|
||||||
use psb_base_mod
|
use psb_base_mod
|
||||||
real(psb_dpk_), intent(out) :: val
|
real(psb_dpk_), intent(out) :: val
|
||||||
integer, intent(in) :: file
|
integer, intent(in) :: file
|
||||||
|
character(len=1), optional, intent(in) :: marker
|
||||||
|
|
||||||
|
read(file,'(a)')charbuf
|
||||||
|
call read_data(val,charbuf,marker)
|
||||||
|
|
||||||
|
end subroutine read_double
|
||||||
|
|
||||||
|
subroutine string_read_char(val,file,marker)
|
||||||
|
character(len=*), intent(out) :: val
|
||||||
|
character(len=*), intent(in) :: file
|
||||||
|
character(len=1), optional, intent(in) :: marker
|
||||||
|
character(len=1) :: marker_
|
||||||
character(len=1024) :: charbuf
|
character(len=1024) :: charbuf
|
||||||
integer :: idx
|
integer :: idx
|
||||||
|
if (present(marker)) then
|
||||||
|
marker_ = marker
|
||||||
|
else
|
||||||
|
marker_ = def_marker
|
||||||
|
end if
|
||||||
read(file,'(a)')charbuf
|
read(file,'(a)')charbuf
|
||||||
charbuf = adjustl(charbuf)
|
charbuf = adjustl(charbuf)
|
||||||
idx=index(charbuf,"!")
|
idx=index(charbuf,marker_)
|
||||||
|
read(charbuf(1:idx-1),'(a)') val
|
||||||
|
end subroutine string_read_char
|
||||||
|
|
||||||
|
subroutine string_read_int(val,file,marker)
|
||||||
|
integer, intent(out) :: val
|
||||||
|
character(len=*), intent(in) :: file
|
||||||
|
character(len=1), optional, intent(in) :: marker
|
||||||
|
character(len=1) :: marker_
|
||||||
|
character(len=1024) :: charbuf
|
||||||
|
integer :: idx
|
||||||
|
if (present(marker)) then
|
||||||
|
marker_ = marker
|
||||||
|
else
|
||||||
|
marker_ = def_marker
|
||||||
|
end if
|
||||||
|
read(file,'(a)')charbuf
|
||||||
|
charbuf = adjustl(charbuf)
|
||||||
|
idx=index(charbuf,marker_)
|
||||||
read(charbuf(1:idx-1),*) val
|
read(charbuf(1:idx-1),*) val
|
||||||
end subroutine read_double
|
end subroutine string_read_int
|
||||||
|
subroutine string_read_single(val,file,marker)
|
||||||
|
use psb_base_mod
|
||||||
|
real(psb_spk_), intent(out) :: val
|
||||||
|
character(len=*), intent(in) :: file
|
||||||
|
character(len=1), optional, intent(in) :: marker
|
||||||
|
character(len=1) :: marker_
|
||||||
|
character(len=1024) :: charbuf
|
||||||
|
integer :: idx
|
||||||
|
if (present(marker)) then
|
||||||
|
marker_ = marker
|
||||||
|
else
|
||||||
|
marker_ = def_marker
|
||||||
|
end if
|
||||||
|
read(file,'(a)')charbuf
|
||||||
|
charbuf = adjustl(charbuf)
|
||||||
|
idx=index(charbuf,marker_)
|
||||||
|
read(charbuf(1:idx-1),*) val
|
||||||
|
end subroutine string_read_single
|
||||||
|
subroutine string_read_double(val,file,marker)
|
||||||
|
use psb_base_mod
|
||||||
|
real(psb_dpk_), intent(out) :: val
|
||||||
|
character(len=*), intent(in) :: file
|
||||||
|
character(len=1), optional, intent(in) :: marker
|
||||||
|
character(len=1) :: marker_
|
||||||
|
character(len=1024) :: charbuf
|
||||||
|
integer :: idx
|
||||||
|
if (present(marker)) then
|
||||||
|
marker_ = marker
|
||||||
|
else
|
||||||
|
marker_ = def_marker
|
||||||
|
end if
|
||||||
|
read(file,'(a)')charbuf
|
||||||
|
charbuf = adjustl(charbuf)
|
||||||
|
idx=index(charbuf,marker_)
|
||||||
|
read(charbuf(1:idx-1),*) val
|
||||||
|
end subroutine string_read_double
|
||||||
|
|
||||||
|
function trim_string(string,marker)
|
||||||
|
character(len=*), intent(in) :: string
|
||||||
|
character(len=1), optional, intent(in) :: marker
|
||||||
|
character(len=len(string)) :: trim_string
|
||||||
|
character(len=1) :: marker_
|
||||||
|
integer :: idx
|
||||||
|
if (present(marker)) then
|
||||||
|
marker_ = marker
|
||||||
|
else
|
||||||
|
marker_ = def_marker
|
||||||
|
end if
|
||||||
|
idx=index(string,marker_)
|
||||||
|
trim_string = adjustl(string(idx:))
|
||||||
|
end function trim_string
|
||||||
end module data_input
|
end module data_input
|
||||||
|
|
||||||
|
|||||||