Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • liangb30/cas-741-boliang
  • pignierb/cas741
  • jimoha1/cas741
  • huoy8/cas741
  • grandhia/cas741
  • chenq84/cas741
  • yex33/cas741
  • xuey45/cas741
  • garcilau/cas-741-uriel-garcilazo-msa
  • schankuc2/cas741
  • ahmady3/cas741
  • saadh/cas741
  • singhk56/cas741
  • lin523/cas741
  • fangz58/cas741
  • tranp30/cas741
  • ceranich/cas741
  • norouf1/cas741
  • mirzam48/cas741
  • djavahet/cas741
  • hossaa27/cas741
  • yiding_el/cas-741-upate-name
  • sayadia/cas741
  • elmasn2/cas741
  • cheemf8/cas741
  • cheny997/cas741
  • ma209/cas741
  • mousas26/cas741
  • liuy363/cas741
  • wongk124/cas741
  • dua11/cas741
  • zhoug28/cas741
  • courses/cas-741-tst
  • liy443/cas-741-fork-csv
  • sochania/cas741
  • liy443/cas-741-update-csv-old
  • mahdipoa/cas741
  • wangz892/cas741
  • wangn14/cas741
  • defourej/cas741
  • zhaox183/cas741
  • smiths/cas741
42 results
Show changes
Showing
with 89109 additions and 0 deletions
File added
File added
Source diff could not be displayed: it is too large. Options to address this: view the blob.
\documentclass[12pt,titlepage]{article}
\include{Preamble}
\author{Wen Yu}
\begin{document}
\begin{titlepage}
% Fonts for the title page
\newcommand{\texttl}{\textsf} %font for the title (Emil's version is \textsf)
\newcommand{\textau}{\textsf} %font for the authors, date, etc. (Emils version is \textsc)
\begin{center}
\HRule \\[0.4cm]
{ \huge \bfseries \texttl{Software Requirements Specification for a Parallel Mesh Generation Toolbox}}\\[0.4cm]
\HRule \\[2cm]
\textau{\LARGE Wen Yu}\\[2cm]
\textau{\LARGE {September 2008}}
\vfill
% Bottom of the page
%\includegraphics[width=0.27\textwidth]{logo.pdf}
\hfill
\textau{\LARGE
\raisebox{2pt}{\begin{tabular}[b]{r}
\raisebox{8pt}{Computing and Software} \\
McMaster University \end{tabular}}
}
\end{center}
\end{titlepage}
\tableofcontents
\newpage
\section{Reference Material}
\subsection{Table of Symbols, Abbreviations and Acronyms}
\subsubsection{Symbols}
\begin{tabular}{p{\firstCol}p{\secondCol}}
$\Omega$ & a closed bounded domain in $\mathbb{R}^{2}$ \\
$\Omega^{*}$ & a mesh covering the domain bounded by $\Omega$\\
$K$ & a simple shape, such as a line segment in 1D, a triangle or a quadrilateral in 2D, or a tetrahedron or hexahedron
in 3D\\
$M^{\mbox{IN}}$ & an input mesh\\
$M^{\mbox{OUT}}$ & an output mesh\\
$I$ & instructions on how a mesh should be \\
& refined/coarsened
\end{tabular}
%\newpage
\subsubsection{Abbreviations and Acronyms}
\begin{tabular}{p{\firstCol}p{\secondCol}}
1D & One Dimensional Space\\
2D & Two Dimensional Space\\
3D & Three Dimensional Space\\
FEA & Finite Element Analysis\\
HPC & High Performance Computing\\
PDE & Partial Differential Equation\\
PMGT & Parallel Mesh Generation Toolbox\\
SHARCNET & Shared Hierarchical Academic Research Computing Network\\
SRS & Software Requirements Specification\\
AOMD & Algorithm Oriented Mesh Database\\
\end{tabular}
\newpage
\subsection{Index of Requirements}
CoarseningMesh, \pageref{CoarseningMesh}\\
Conformal, \pageref{Conformal}\\\\
DomainDimension, \pageref{DomainDimension}\\\\
ElmShape, \pageref{ElmShape}\\
ElmTopology, \pageref{ElmTopology}\\
ElmUniqueID, \pageref{ElmUniqueID}\\
Exception, \pageref{Exception}\\\\
Help, \pageref{Help}\\\\
InputDefinition, \pageref{InputDefinition}\\\\
LookAndFeel, \pageref{LookAndFeel}\\\\
Maintainability, \pageref{Maintainability}\\
MeshType, \pageref{MeshType}\\\\
OutElmOrder, \pageref{OutElmOrder}\\
OutputStorage, \pageref{OutputStorage}\\
OutVertexOrder, \pageref{OutVertexOrder}\\\\
Performance, \pageref{Performance}\\
Portability, \pageref{Portability}\\
Precision, \pageref{Precision}\\\\
RCInstruction, \pageref{RCInstruction}\\
RefiningMesh, \pageref{RefiningMesh}\\
RefiningOrCoarsening, \pageref{RefiningOrCoarsening}\\\\
Usability, \pageref{Usability}\\\\
VertexUniqueID, \pageref{VertexUniqueID}
%\printindex
\newpage
\section{Introduction \label{AreqSecIntro}}
This section gives an overview of the Software Requirements Specification (SRS) for a Parallel Mesh Generation Toolbox (PMGT). First, the purpose of the document is provided. Second, the scope of PMGT is identified. Third, some terminology for software engineering and mesh generation are defined. Finally, the organization of the document is summarized. The Table of Symbols, Abbreviation and Acronyms, and Index of Requirement are given at the beginning of the SRS.
\subsection{Purpose of the Document}
This SRS provides a black-box description of PMGT. The intended audience of the SRS is the development team and the users of PMGT.
\subsection{Scope of the Software Product}
PMGT provides a library that will be embedded into a larger application, such as a finite element analysis (FEA) program.
\begin{itemize}
\item The input of PMGT is an existing mesh $M^{\mbox{IN}}$ with instructions $I$ provided by the user on how the mesh should be refined/coarsened.
\item PMGT refines/coarsens $M^{\mbox{IN}}$ according to the supplied instructions $I$ on how the mesh should be refined/coarsened.
\item PMGT will take advantage of parallel computation.
\item The output of PMGT is a refined/coarsened mesh $M^{\mbox{OUT}}$.
\end{itemize}
Note that depending on the given instruction, PMGT can either refine or coarsen the given mesh, but cannot do both at the same time. That is, any individual transition from $M^{\mbox{IN}}$ to $M^{\mbox{OUT}}$ will only do one of refining or coarsening. The embedding application will have access to reading the mesh information, such as information on the position of vertices and on the vertices that define a given element. However, the application cannot directly change any mesh data, except for the information indicating which elements should be refined/coarsened.
\subsection{Terminology Definition}
This subsection provides the definitions for terminology used in the SRS. There are two classes of terminology. One relates to software engineering, and the other relates to mesh generation. The definitions are listed in alphabetical order.
\subsubsection{Software Engineering Related Terminology\label{AreqSEterm}}
\begin{description}
\item[Constraint:] A statement that expresses measurable bounds for an element or function of the system. That is, a constraint is a factor that is imposed on the solution by force or compulsion and may limit or modify the design changes. \citep{IEEE1998}
\item[Context:] The boundaries between the system that we intend to build and the people, organizations, other system and pieces of technology that have a direct interface with the system. \citep{Volere2001}
\item[Functional Requirements:] Functional requirements define precisely what input are expected by the software, what outputs will be generated by the software, and the details of relationships that exist between those inputs and outputs. In short, functional requirements describe all aspects of interface between the software and its environment (that is, hardware, humans, and other software). \citep{Davis1990}
\item[Goal:] Goals capture, at different levels of abstraction, the various objectives the system under
consideration should achieve. \citep{Lamsweerde2001}
\item[Non-functional Requirements:] Non-functional requirements define the overall qualities or attributes to be exhibited by the resulting software system. \citep{Davis1990}
\item[Requirements:] A software requirement is: \begin {inparaenum}[\itshape i\upshape)]
\item a condition or capability needed by a user to solve a problem or achieve an objective;
\item a condition or capability that must be met or possessed by a system or system component to satisfy a contract,
standard, specification, or other formally imposed document; or,
\item a documented representation of a condition or capability as in the above two definitions.
\end{inparaenum} \citep{IEEE2000}
\item[Software Engineering:] Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software. \citep{IEEE1990}
\item[Software Requirements Specification:] A Software Requirements Specification (SRS) is a document containing a complete description of what the software will do without describing how it will do it. \citep{Davis1990}
\item[System:] An interdependent group of people, objects, and procedures constituted to achieve defined objectives or some operational role by performing specified functions. \citep{IEEE1998}
\item[System Context:] System Context documents the relationships between the system being specified and other human and computer systems. \citep{Sommerville1992}
\item[User:]The person, or persons, who operate or interact directly with the product. \citep{IEEE2000}
\end{description}
\subsubsection{Mesh Generation Related Terminology\label{AreqMGterm}}
\begin{description}
%\item [Aspect Ratio:] The aspect ratio of a simplex is defined as its maximum side length divided by its minimum altitude. \citep{Mitchell2000}
%The aspect ratio of a convex body is the ratio between its longest dimension and its shortest dimension.
\item [Cell:] Another name for an element, as defined in page \pageref{AreqElmDef}.
\item[Conformal Mesh:] A conformal mesh is a mesh (defined on page \pageref{def_mesh}) following the definition of a mesh, with the addition of the
following property:\\
The intersection of two elements in the mesh $\Omega^{*}$ is either the empty set, a vertex, an edge or a face (when the
dimension is 3). \citep{FreyAndGeorge2000}
\item [Connectivity:] There are two types of connectivity, one for the mesh and one for a mesh element:
\begin{enumerate}
\item ``The connectivity of a mesh is the definition of the connection between its vertices.''~\citep{FreyAndGeorge2000}
\item ``The connectivity of a mesh element is the definition of the connections between the vertices at the element
level.''~\citep{FreyAndGeorge2000}
\end{enumerate}
\item [Domain:] The area or volume that is to be discretized. The domain is sometimes referred to as the
computational domain. \citep{Smith2004}
\item [Edge:] An edge is a line segment between two vertices.
\item [Element \label{AreqElmDef}:] The original domain is discretized into smaller, usually simpler, shapes called elements.
The typical shapes for elements in 1D is a line, in 2D is a triangle or a quadrilateral, and in 3D a tetrahedron or a
hexahedron. Elements are also called cells. \citep{Smith2004}
\item [Embedding Application:] The software that uses PMGT.
\item [Face:] A face is a maximal connected subset of the plane without vertices inside the subset. In 2D, a face is a cell.\citep{FreyAndGeorge2000}
\item [Hybrid Mesh:] A mesh is said to be hybrid if it includes some elements with a different spatial dimension. \citep{FreyAndGeorge2000}
\item[Mesh:] \label{def_mesh}
In \citet{Smith2004}, a mesh is defined as follows:\\
Let $\Omega$ be a closed bounded domain in $\mathbb{R}$ or $\mathbb{R}^2$ or $\mathbb{R}^3$
and let $K$ be an element. A mesh of $\Omega$, denoted by $\Omega^{*}$, has the following properties:
\begin{enumerate}
\item $\Omega \approx \cup(K | K \in \Omega^{*} : K)$, where $\cup$ is first closed and then opened
\item the length of every element $K$, of dimension 1, in $\Omega^{*}$ is greater than zero
\item the interior of every element $K$, of dimension 2 or greater, in $\Omega^{*}$ is nonempty
\item the intersection of the interior of two elements is empty
\end{enumerate}
The only difference between above definition and the definition given by \citet{FreyAndGeorge2000} is that equality (=) had been changed to approximate equality ($\approx$).
\item [Mesh Generation:] The automatic mesh generation problem is that of attempting to define a set of elements to best describe a geometric domain, subject to various element size and shape criteria. \citep{Smith2004}
\item [Mixed Mesh:] A mesh is said to be mixed if it includes some elements of a different geometric nature. \citep{FreyAndGeorge2000}
\item [Structured Mesh:] The mesh in which the local organization of the grid points and the form of the grid cells do not depend on their position but are defined by a general rule. There is a pattern to the topology that repeats.
\citet{FreyAndGeorge2000} say, ``a mesh is called structured if its connectivity is of the finite difference type.''
They go on to remark, ``Peculiar meshes other than quad or hex meshes could have a structured connectivity. For
instance, one can consider a classical grid of quads where each of them are subdivided into two triangles using the same
subdivision pattern.''
\item [Topology:] ``The topology of a mesh element is the definition of this element in terms of its faces and edges,
these last two being defined in terms of the element's vertices.''~\citep{FreyAndGeorge2000}\\
The topology of a mesh is the set of topologies of its constitute mesh elements.
\item [Unstructured Mesh:] The mesh whose element connectivity of the neighbouring grid vertices varies from point to
point. Any mesh that is not structured is an unstructured mesh. \citep{Smith2004}
\item [Vertices:] The locations that define the shape of the cells. In 1D the vertices are the end-points of the
elements. For 2D and 3D elements the vertices correspond to the location in space that defines the intersection of
the edges of an element. \citep{Smith2004}
\end{description}
\subsection{Organization of the Document}
This SRS follows the template introduced by~\cite{Lai2004}. Lai's template targets an SRS for scientific computing software. In particular, the example shown is for engineering mechanics software, such as software to analyze beams. In the current work, Lai's template is modified to fit PMGT, which is a more general purpose software. For example, the instanced model section of Lai's template is removed since PMGT is not designed for solving a specific physical problem.
Section \ref{AreqSecIntro} (this section) is an introduction to the SRS.
The rest of the document is arranged as follows. Section \ref{AreqSecGSD} provides the general information about the system. Section \ref{AreqSecSSR} is the major part of the SRS. All functional requirements and non-functional requirements of the software are presented in this section. Section \ref{AreqSecOSI} discusses some other system issues. Section \ref{AreqSecTM} gives a traceability matrix that summaries the association of each requirement with goals, assumptions, theoretical models and data definitions introduced in \ref{AreqSecSSR}. This SRS also contains the list of possible changes in the requirements and values of auxiliary constants. The references are listed at the end of this document.
\section{General System Description \label{AreqSecGSD}}
This section describes the general information about the system. The interfaces between the system and its environment are defined first. Then the characteristics of potential users are discussed. At end of this section, some system constraints are described.
\subsection{System Context}
The software to be built is a library tool that will be called by other applications. There is no direct interaction between the system and the end users. Users of the embedding application, such as an FEA program, provide some parameters directly to the FEA program. Some of these parameters are passed to PMGT by the FEA program. The interface between PMGT and the embedding application should only show what PMGT can do and hide the information about how to do it. Therefore, users who are not experts in mesh generation or in parallel processing will be able to use this toolbox. %The characteristics of users of PMGT will be described in the Section \ref{userchar}.
\begin{figure}[ht]
\centering
\epsfig{file=syscon.eps, width=\textwidth}
\caption{System Context Diagram}
\label{AreqSyscon}
\end{figure}
Figure~\ref{AreqSyscon} shows the context that PMGT will normally fit into.
A circle represents an external entity outside the system, an embedding application in this case. The rectangle is the system itself. Arrows represent the data flows between them.
The \emph{input}: $M^{\mbox{IN}}\times I$
The \emph{output}: $M^{\mbox{OUT}}$.
PMGT has the following function:
\begin{quote}
A mesh $M^{\mbox{IN}}$ and some refining/coarsening instructions $I$ are given. PMGT generates a refined/coarsened mesh $M^{\mbox{OUT}}$ according to the instructions $I$.
\end{quote}
%\begin{quotation}
%\end{quotation}
\subsection {User Characteristics}\label{AreqUserchar}
The target user group of PMGT includes both software designers, who intend to embed this library in their applications, and theoreticians, who are involved in parallel mesh generation. A user of PMGT is expected to be familiar with the notion/knowledge of mesh creation. PMGT is a library used by other applications. Therefore, users should not be novices in terms of software design. The prerequisite software design knowledge are equivalent to that of a senior undergraduate student in science or engineering who took an introductory course on programming. For example, they should be comfortable with compilation of the programming language in which PMGT is written, be familiar with embedding a library in their software, $etc.$
\subsection{System Constraints}
This system is intended to be built on the Shared Hierarchical Academic Research Computing Network (SHARCNET).
SHARCNET is structured as a ``cluster of clusters'' across South Central Ontario, designed to meet the computational needs of researchers in a diverse number of research areas and to facilitate the development of leading-edge tools for high performance computing (HPC) grids.
Large production clusters, located at the Universities of Western Ontario, Guelph and McMaster, house over 400 HP/Compaq
Alpha processors and large symmetric multiprocessor computers. Windsor and Wilfrid Laurier host smaller development
clusters (8 processors), which enable researchers to develop and test code before moving to one of the larger clusters.
A glance of SHARCNET systems is shown in Table \ref{AreqSharcnet}. Note that the network is constantly being updated. Detailed information can be found at \citet{sharcnet2006}.
\begin{table}[htbp]
\centering
\begin{tabular}{p{0.2\textwidth}|p{0.2\textwidth}|p{0.1\textwidth}|p{0.1\textwidth}|p{0.25\textwidth}}
\hline \hline
System & Make & Type & CPUs & OS \\
\hline
bala & Compaq & Cluster & 8 & Red Hat Linux 7.2\\
cat & Unknown & Cluster & 162 & Red Hat Linux 8 \\
goblin & Sun & Cluster & 56 & Fedora Core 2 \\
hammerhead & Compaq & Cluster & 112 & Red Hat Linux 7.2 \\
idra & Compaq SC & Cluster & 128 & Tru64 \\
mako & HP & Cluster & 16 & Fedora Core 2 \\
tiger & Compaq & Cluster & 8 & Red Hat Linux 7.2 \\
typhon & Compaq & SMP & 16 & Tru64 \\
wobbe & Unknown & Cluster & 193 & Red Hat Linux 8 \\
TOTALS & & & 699 \\
\hline \hline
\end{tabular}
\caption{A Glance at the SHARCNET System}
\label{AreqSharcnet}
\end{table}
\section{Specific System Requirements \label{AreqSecSSR}}
This section describes the system requirements in detail. After the problem is clearly and unambiguously stated, some solution characteristics are specified. Non-functional requirements are also included in this section. The symbol $:=$ is used to indicate type definition. The notation for set building and expressions used in this section follows \citet{Gries1993}. To define the notation, first let $x$ be a list of dummies, $t$ a type, $R$ a predicate, $E$ an expression, $*$ an operator, and $P$ a predicate. Notation $\{ x:t\ |\ R:E\}$ represents a set of values that result from evaluating $E[x:=v]$ in the state for each value $v$ in $t$ such that $R[x:=v]$ holds in that state. Expression $(*x:t\ |\ R:P)$ denotes the application of operator $*$ to the values $P$ for all $x$ in $t$ for which range $R$ is true.
\subsection{Problem Description \label{AreqSecPD}}
The problems (goals) specified in this subsection represent ideal general models. The problems are simplified by introducing some assumptions, which are listed in Section \ref{AreqSolution}.
\subsubsection{Background Overview}
Many physical problems of importance to scientists and engineers are modeled as a set of Partial Differential Equations (PDEs). In most practical cases, it is necessary to solve the PDEs numerally. Numerical methods to solve PDEs frequently require that the domain of interest be divided into a mesh, which is a set of small, simple elements that cover the computational domain. In some applications, a single mesh is generated and used many times; in this case the processing time spent on mesh construction is not critical and a relatively slow, sequential algorithm suffices \citep{Ruppert1993}. However, some applications need adaptive meshing, which requires that the meshes be generated once and then modified many times. For instance, adaptive meshing is used for reliable Finite Element Analysis (FEA) using a posterrori error estimation \citep{Zienkiewicz2005}. The increased mesh interaction for adaptive meshing means an increased need for speed of managing the mesh data which suggest employing parallel processing techniques. Although generating a mesh using multiple processors is complicated, it can offer considerable speed-up over sequential processing. In addition, some FEA applications are implemented on multiple processors. If the adaptive mesh can be generated in multiple processors as well, the mesh data can remain on the local processors. Potentially, time to be used will be significantly reduced.
\subsubsection{Goal Statements}
There are two related goals for PMGT.
\begin{description}
\item[\refstepcounter{goalnum}\gthegoalnum \label{gRefining}:] Given a mesh $M^{\mbox{IN}}$ and instructions $I$ on how to refine the mesh, PMGT should generate a refined mesh $M^{\mbox{OUT}}$ according to the instructions $I$.
\item[\refstepcounter{goalnum}\gthegoalnum \label{gCoarsening}:]Given a mesh $M^{\mbox{IN}}$ and instructions $I$ on how to coarsen the mesh, PMGT should generate a coarsened mesh $M^{\mbox{OUT}}$ according to the instructions $I$.
\end{description}
\subsection{Solution Characteristics Specification\label{AreqSolution}}
The goals stated in the last section are too general to achieve. In this section, the assumptions are specified first to reduce the scope of the software. Second, the theoretical models for the goals are described. Third, data definitions are given to assist with defining the theoretical models. Finally, the system behaviour is summarized.
\subsubsection{Assumptions}
\begin{description}
\item [\refstepcounter{assnum} \atheassnum \label{aDimension}:]PMGT focuses on a 2D domain.
\item[\refstepcounter{assnum} \atheassnum \label{aClosed}:]The input and output meshes are bounded.
\item [\refstepcounter{assnum} \atheassnum \label{aUnstructured}:]The input and output meshes are unstructured.
\item[\refstepcounter{assnum} \atheassnum \label{aConformal}:]The input and output meshes are conformal.
\item[\refstepcounter{assnum} \atheassnum \label{aElmShape}:]The elements of input and output meshes are triangles.
\item[\refstepcounter{assnum} \atheassnum \label{aValidMesh}:] The initial mesh is valid.
\end{description}
\subsubsection{Theoretical Model}
The theoretical models corresponding to the goals given in Section \ref{AreqSecPD} describes the relationship between the input mesh ($M^{\mbox{IN}}$) and the output mesh ($M^{\mbox{OUT}}$). The meshes are assumed to be embedded in a 2D space.
\begin{description}
\item[\refstepcounter{tmnum} \tmthetmnum \label{tmRefining}:] Refining Mesh
\begin{description}
\item [\emph{Input}:] $M^{\mbox{IN}}$: {\tt MeshT}, $I$: {\tt RCinstructionT}
\item [\emph{Output}:] $M^{\mbox{OUT}}$: {\tt MeshT}
\end{description}
The following behavior is specified:
\begin{itemize}
\item {\it Refined}($M^{\mbox{OUT}},\ M^{\mbox{IN}}$)
\end{itemize}
That is, the output mesh is a refined version of the input mesh.
\item[\refstepcounter{tmnum} \tmthetmnum \label{tmCoarsening}:] Coarsening Mesh
\begin{description}
\item [\emph{Input}:] $M^{\mbox{IN}}$: {\tt MeshT}, $I$: {\tt RCinstructionT}
\item [\emph{Output}:] $M^{\mbox{OUT}}$: {\tt MeshT}
\end{description}
The following behavior is specified:
\begin{itemize}
\item {\it Coarsened}($M^{\mbox{OUT}},\ M^{\mbox{IN}}$)
\end{itemize}
That is, the output mesh is a coarsened version of the input mesh.
\end{description}
\subsubsection{Data Definitions}
The data definitions below are organized so that a definition listed in the beginning may be used to define a data item listed after it.
\begin{description}
\item [VertexT (\refstepcounter{ddnum} \dtheddnum \label{dVertexT}):] A vertex is represented by two real numbers, which are its $x$ coordinate and $y$ coordinate. More formally,\\
{\tt VertexT} := tuple of ($x: \mathbb{R},\ y: \mathbb{R}$).
\item [EdgeT (\refstepcounter{ddnum} \dtheddnum \label{dEdgeT}):] An edge is represented by a set of {\tt VertexT}. More formally,\\
{\tt EdgeT} := set of {\tt VertexT}.
\item [ValidEdge (\refstepcounter{ddnum} \dtheddnum \label{dValidEdge}):] An edge is valid if the edge is a line segment (that is, the set has two elements). More formally, \\
{\it ValidEdge}: {\tt EdgeT} $\rightarrow \mathbb{B}$\\
{\it ValidEdge}($e$: {\tt EdgeT}) $\equiv \# e = 2$
\item [CellT (\refstepcounter{ddnum} \dtheddnum \label{dCellT}):] A cell is represented by a set of $VertexT$. More formally, \\
{\tt CellT} := set of {\tt VertexT}
\item [Area (\refstepcounter{ddnum} \dtheddnum \label{dArea}):] The area of a triangle whose apexes are elements of a cell. More formally, \\
{\it Area}: {\tt CellT} $\rightarrow \mathbb{R}$\\
{\it Area}($c$: {\tt CellT}) $\equiv \Sigma v1,v2,v3$: {\tt VertexT} $|\ v1\in c \wedge v2\in c \wedge v3\in c \\
\wedge v1\neq v2 \wedge v2\neq v3 \wedge v3\neq v1:\\
\frac{1}{12}* |v1.x*v2.y - v2.x*v1.y +\\
v2.x*v3.y - v3.x*v2.y +\\
v1.x*v3.y - v3.x*v1.y |$
\item [ValidCell (\refstepcounter{ddnum} \dtheddnum \label{dValidCell}):] A cell is valid if the cell is a triangle (that is , the set has three elements) and the area of the triangle is greater than zero. More formally, \\
{\it ValidCell}: {\tt CellT} $\rightarrow \mathbb{B}$\\
{\it ValidCell}($c$: {\tt CellT}) $\equiv \# c = 3 \wedge$ {\it Area}($c$) $\geq 0$
\item [MeshT (\refstepcounter{ddnum} \dtheddnum \label{dMeshT}):] A mesh is represented by a set of cells. More formally,\\
{\tt MeshT} := set of {\tt CellT}.
\item [OnEdge (\refstepcounter{ddnum} \dtheddnum \label{dOnEdge}):] Checks if a vertex is on the line segment between two vertices (exclusive) of an edge. More formally,\\
{\it OnEdge}: {\tt VertexT} $\times$ {\tt EdgeT} $\rightarrow \mathbb{B}$\\
{\it OnEdge}($v$: {\tt VertexT}, $e$: {\tt EdgeT}) $\equiv \exists\ v1,\ v2$: {\tt VertexT} $|\\
v1 \in e \wedge v2 \in e \wedge v1 \neq v2 \wedge v \neq v1 \wedge v \neq v2:\\
(v1.x < v.x \leq v2.x \wedge \\(v.y-v1.y)/(v.x-v1.x)=(v2.y-v1.y)/(v2.x-v1.x))$
\item [BelongToCell (\refstepcounter{ddnum} \dtheddnum \label{dBelongToCell}):] Checks if an edge belongs to a cell. More formally, \\
{\it BelongToCell}: {\tt VertexT} $\times$ {\tt CellT} $\rightarrow \mathbb{B}$\\
{\it BelongeToCell}($e$: {\tt EdgeT}, $c$: {\tt CellT}) $\equiv \forall\ v$: {\tt VertexT} $|\ v\in e: v\in c$
\item [Inside (\refstepcounter{ddnum} \dtheddnum \label{dInside}):] Checks if a point (of type VertexT) is inside of a cell. The {\em inside} checking is false if the point is on an edge of the cell or the point is a vertex of the cell. (The algorithm to check if a point is inside a polygon is from \citet{Blackpawn}.) More formally,\\
{\it Inside}: {\tt VertexT} $\times$ {\tt CellT} $\rightarrow \mathbb{B}$\\
{\it Inside}($v$: {\tt VertexT}, $c$: {\tt CellT}) $\equiv \exists\ v1,\ v2,\ v3$: {\tt VertexT} $|\\
v1\in c \wedge v2\in c \wedge v3\in c \wedge v1\neq v2 \wedge v2\neq v3 \wedge v3 \neq v1:\\
((v.y-v1.y)*(v2.x-v1.x)-(v.x-v1.x)*(v2.y-v1.y))*\\
((v.y-v2.y)*(v3.x-v2.x)-(v.x-v2.x)*(v3.y-v2.y)) > 0 \wedge \\
((v.y-v2.y)*(v3.x-v2.x)-(v.x-v2.x)*(v3.y-v2.y))*\\
((v.y-v3.y)*(v1.x-v3.x)-(v.x-v3.x)*(v1.y-v3.y)) > 0$
\item [Vertices (\refstepcounter{ddnum} \dtheddnum \label{dVertices}):] A set of all vetices of the mesh. More formally,\\
{\it Vertices}: {\tt MeshT} $\rightarrow$ set of {\tt VertexT}\\
{\it Vertices}($m$: {\tt MeshT}) $\equiv$ \{$v$: {\tt VertexT} $|$ ($\forall\ c$: {\tt CellT} $|\ c\ \in m :v\ \in c):v\}$
\item [Edges (\refstepcounter{ddnum} \dtheddnum \label{dEdges}):] A set of all edges of the mesh. More formally, \\
{\it Edges}: {\tt MeshT} $\rightarrow $ set of $EdgeT$\\
{\it Edges}($m$: {\tt MeshT}) $\equiv \{v1,\ v2$: {\tt VertexT} $|\ (\forall c$: {\tt CellT} $|\ c \in m:\\ v1 \in c \wedge v2 \in c \wedge v1 \neq v2):\{v1, v2\}\}$
\item [BoundaryEdges (\refstepcounter{ddnum} \dtheddnum \label{dBoundaryEdges}):]A set of edges are boundary edges if they form a boundary of a mesh. More formally,\\
{\it BoundaryEdges}: {\tt MeshT} $\rightarrow $ set of $EdgeT$\\
{\it BoundaryEdges}($m$: {\tt MeshT}) $\equiv \{ b$: {\tt EdgeT} $|\ b\in$ {\it Edges}($m$) $\wedge \\
(\# \{c$: {\tt CellT} $|\ c\in m \wedge$ {\it BelongToCell}({\it b, c}): $c\}=1$): $b\}$
\item [BoundaryVertices (\refstepcounter{ddnum} \dtheddnum \label{dBoundaryVertices}):] A set of boundary vertices of the mesh. More formally,\\
{\it BoundaryVertices}: {\tt MeshT} $\rightarrow$ set of {\tt VertexT}\\
{\it BoundaryVertices}($m$: {\tt MeshT}) $\equiv \\
\{v$: {\tt VertexT} $|\ v \in$ {\it BoundaryEdges}($m$): $v\}$
\item [Bounded (\refstepcounter{ddnum} \dtheddnum \label{dBounded}):] A mesh is bounded if the boundary edges form a closed polygon(all vertices of boundary edges belong to exactly two boundary edges). More formally, \\
{\it Bounded}: {\tt MeshT} $\rightarrow \mathbb{B}$\\
{\it Bounded}($m$: {\tt MeshT}) $\equiv \forall v$: {\tt VertexT} $|\ v\in$ {\it BoundaryVertices}($m$): \\
($\# \{e$: {\tt EdgeT} $|\ e \in$ {\it BoundaryEdge}($m$) $\wedge v\in e: e\}=2)$
\item [Conformal (\refstepcounter{ddnum} \dtheddnum \label{dConformal}):] In 2D, a mesh is conformal if the intersection of any two cells is either a vertex or an edge or empty. More formally,\\
{\it Conformal}: {\tt MeshT} $\rightarrow \mathbb{B}$\\
{\it Conformal}($m$: {\tt MeshT}) $\equiv \forall c1, c2$: {\tt CellT} $|\ c1\in m \wedge c2\in m \wedge c1\neq c2 : \\
(\exists e$: {\tt EdgeT} $|\ e\in$ {\it Eeges}($m$): $(\exists v:$ {\tt VertexT} $|\ v\in$ {\it Vertices}($m$):\\
$(c1\cap c2 = e \vee c1\cap c2 = v \vee c1\cap c2 = \emptyset) \wedge (\neg$ {\it OnEdge(v, e)) ))}
\item [NoInteriorIntersect (\refstepcounter{ddnum} \dtheddnum \label{dNoInteriorIntersect}):] NoInteriorIntersect is true if a point in space (of type VertexT) is inside only one cell of the mesh. More formally,\\
{\it NoInteriorIntersect}: {\tt MeshT} $\rightarrow \mathbb{B}$\\
{\it NoInteriorIntersect}($m$: {\tt MeshT}) $\equiv \forall c1, c2$: {\tt CellT} $|\\ c1\in m \wedge c2\in m \wedge c1 \neq c2:
(\forall v$: {\tt VertexT} $|$ {\it Inside(v, c1)}: $\neg$ {\it Inside(v,c2))}
\item [ValidMesh (\refstepcounter{ddnum} \dtheddnum \label{dValidMesh}):] A mesh is valid if the mesh is bounded, conformal, and any point is only inside one cell. More formally, \\
{\it ValidMesh}: {\tt MeshT} $\rightarrow \mathbb{B}$\\
{\it ValidMesh}($m$: {\tt MeshT}) $\equiv (\forall e$: {\tt EdgeT} $|\ e\in$ {\it Edges(m): ValidEdge(e))} \\
$\wedge\ (\forall c$: {\tt CellT} $|\ c\in m$: {\it ValidCell(c))} $\wedge$\\
{\it Bounded(m)} $\wedge$ {\it Conformal(m)} $\wedge$ {\it NoInteriorIntersect(m)}
\item [CoveringUp (\refstepcounter{ddnum} \dtheddnum \label{dCoveringUp}):] True if two meshes covering up each other, that is, if all endpoints of the boundary edges of one mesh are on the boundary edges or are end points of the boundary edges of another mesh. More formally, \\
{\it CoveringUp}: {\tt MeshT} $\times$ {\tt MeshT} $\rightarrow \mathbb{B}$\\
{\it CoveringUp}($m1,\ m2$: {\tt MeshT}) $\equiv \forall v1,\ v2$: {\tt VertexT}, $| \\
v1 \in$ {\it BoundaryVertice(m1)} $\wedge\ v2\in$ {\it BoundaryVertices(m2)}: \\
$(\exists b1,\ b2$: {\tt EdgeT} $|\ b1\in$ {\it BoundaryEdges(m1)} $\wedge b2\in$ {\it BoundaryEdges(m2):
(OnEdge(v1, b2)} $\vee v1\in b2) \wedge$ {\it (OnEdge(v2, b1)} $\vee v2\in b1))$
\item [InstructionT (\refstepcounter{ddnum} \dtheddnum \label{dInstructionT}):] The type of instructions is defined as:\\
{\tt InstructionT} := \{{\tt REFINE, COARSEN, NOCHANGE}\}
\item [CellInstructionT (\refstepcounter{ddnum} \dtheddnum \label{dCellInstructionT}):] The type of instructions on a cell is defined as:\\
{\tt CellInstructionT}:= tuple of ({\it cell}: {\tt CellT}, {\it instr}: {\tt InstructionT})\\
(For each cell, there is an instruction for refining, coarsening, or nochange.)
\item [RCinstructionT (\refstepcounter{ddnum} \dtheddnum \label{dRCInstructionT}):] The type of instructions on a mesh is defined as:\\
{\tt RCinstructionT}:= tuple of ({\it rORc}: {\tt InstructionT}, {\it cInstr}: set of {\tt CellInstructionT})\\
(For each mesh, there is an instruction on whole mesh, and there are set of instruction on each cell.)
\item [Refined (\refstepcounter{ddnum} \dtheddnum \label{dRefined}):] True if a mesh $M'$ is a refined mesh of a mesh $M$. More formally\\
{\it Refined}: {\tt MeshT} $\times$ {\tt MeshT} $\times$ {\tt RCinstructionT} $\rightarrow \mathbb{B}$\\
{\it Refined}({\it m', m}: {\tt MeshT}, {\it rc}: {\tt RCinstructionT}) $\equiv$ \\
{\it rc.rORc} = {\tt REFINE} $\wedge$ {\it ValidMesh(m)} $\wedge$ {\it ValidMesh(m')} $\wedge$ \\
{\it CoveringUp(m', m)} $\wedge \# m' \geq \#m$
\item [Coarsened (\refstepcounter{ddnum} \dtheddnum \label{dCoarsened}):] True if a mesh $M'$ is a coarsened mesh of a mesh $M$. More formally \\
{\it Coarsened}: {\tt MeshT} $\times$ {\tt MeshT} $\times$ {\tt RCinstructionT} $\rightarrow \mathbb{B}$\\
{\it Coarsened}({\it m', m}: {\tt MeshT}, {\it rc}: {\tt RCinstructionT}) $\equiv$ \\
{\it rc.rORc} = {\tt COARSEN} $\wedge$ {\it ValidMesh(m)} $\wedge$ {\it ValidMesh(m')} $\wedge$ \\
{\it CoveringUp(m', m)} $\wedge \# m' \leq \# m$
\end{description}
\subsubsection{System Behaviour}
System Behaviour, shown through functional requirements, defines what the software should do. The functional requirements, as well as nonfunctional requirements in Section \ref{nonFunReq}, partially come from \citet{Smith2004}. \citet{Smith2004} listed all requirements that are common for mesh generation systems. They also considered the difference between meshes in term of variabilities. However, the mesh generations analyzed by \citet{Smith2004} are targeted at full FEA applications. PMGT only manages the geometric information about the mesh, not other FEA related information, such as boundary condition and material property. Hence, only commonalities that is meaningful for PMGT are selected. Variabilities with parameters of variation that are suitable for PMGT are also considered. Other part of the requirements are obtained from Dr. Smith.
New functional requirements, \emph{RCInstruction} (\fref{RCInstruction}) and \emph{Help} (\fref{Help}) are added. \fref{RCInstruction} is unique to PMGT and \fref{Help} facilities the non-functional requirements \emph{Usability} (\nref{Usability}).
We specify both functional requirements and non-functional requirements in the tables. In each table, the field \emph{Description} gives a brief description of this requirement. It tells what PMGT should do to fulfill this requirement. There are two potential sources, shown in the \emph{Source} field, for each requirement. One source is from \citet{Smith2004}, and the other comes from Dr.~Smith. If the requirement is from \citet{Smith2004}, then this field will show the commonality number, with a prefix $C$ and the associated variability, shown by a prefix $V$. Where applicable, \emph{Related Data Definitions} and \emph{Related Theoretical Models} gives the numbers of related data definitions and the numbers of related theoretical models, respectively. These two field only appear for functional requirements. The \emph{Binding Time} field either shows scope time or run time. \emph{Scope time} means that this requirement is determined when the SRS is written. \emph{Run time} means that this requirement is determined when the system is running. \emph{History} records the time of creating and changing of the requirements.
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{funnum} \fthefunnum \label{RefiningMesh} \\
{\bf Requirements Name} & \mi{RefiningMesh}\\ \hline
Description & PMGT should have capabilities for refining an existing mesh.\\
& {\it I.rORc} = {\tt REFINE} $\wedge$\\
& {\it Refined}($M^{\mbox{OUT}},\ M^{\mbox{IN}})$\\
Source & C1, V3\\
Related Data Definitions & \dref{dInstructionT}, \dref{dRCInstructionT}, \dref{dRefined}\\
Related Theoretical Models & \tmref{tmRefining}\\
Binding Time & Scope time\\
History & Created -- June, 2005.\\
& Modified -- October, 2005. Change the name from ``ImprovingMesh'' to ``RefiningMesh''.\\
& Modified -- October, 2006. Field for ``Related Data Definitions'' and ``Related Theoretical Models'' are added.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{funnum} \fthefunnum \label{CoarseningMesh} \\
{\bf Requirements Name} & \mi{CoarseningMesh}\\ \hline
Description & PMGT should have capabilities for coarsening an existing mesh.\\
& {\it I.rORc} = {\tt COARSEN} $\wedge $\\
& {\it Coarsened}$(M^{\mbox{OUT}}, M^{\mbox{IN}})$\\
Source & C1, V3\\
Related Data Definitions & \dref{dInstructionT}, \dref{dRCInstructionT}, \dref{dCoarsened}\\
Related Theoretical Models & \tmref{tmCoarsening}\\
Binding Time & Scope time\\
History & Created -- October, 2006.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{funnum} \fthefunnum \label{RefiningOrCoarsening} \\
{\bf Requirements Name} & \mi{RefiningOrCoarsening}\\ \hline
Description & PMGT can either refine a given mesh to a refined mesh, or coarsen a mesh to a coarsened mesh. However, PMGT cannot do both refining and coarsening at the same time.\\
Source & C1, V3\\
Related Data Definitions & \dref{dInstructionT}, \dref{dRCInstructionT}, \dref{dRefined}, \dref{dCoarsened}\\
Related Theoretical Models & \tmref{tmRefining}, \tmref{tmCoarsening}\\
Binding Time & Run time\\
History & Created -- October, 2006.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{funnum} \fthefunnum \label{MeshType} \\
{\bf Requirements Name} & \mi{MeshType}\\ \hline
Description & The mesh generated by PMGT is unstructured.\\
Source & C1, V6\\
Related Data Definitions & N/A \\
Related Theoretical Models & N/A \\
Binding Time & Scope time\\
History & Created -- June, 2005.\\
& Modified -- October, 2006. Field for ``Related Data Definitions'' and ``Related Theoretical Models'' are added.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{funnum} \fthefunnum \label{ElmShape} \\
{\bf Requirements Name} & \mi{ElmShape}\\ \hline
Description & The shape of the elements in both input and output meshes are triangles.\\
& $\forall c1, c2$: {\tt CellT} $|$\\
& $c1\in M^{\mbox{IN}} \wedge c2\in M^{\mbox{OUT}}:$\\
& $\# c1=3\wedge$ {\it Area}$(c1)>0 \wedge $\\
& $\# c2 = 3 \wedge$ {\it Area}$(c2)>0$\\
Source & C1, V9\\
Related Data Definitions & \dref{dCellT}, \dref{dArea}\\
Related Theoretical Models & \tmref{tmRefining}, \tmref{tmCoarsening} \\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005.\\
& Modified -- October, 2006. Take out the requirement for generating quadrilateral meshes.\\
& Modified -- October, 2006. Field for ``Related Data Definitions'' and ``Related Theoretical Models'' are added.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{funnum} \fthefunnum \label{DomainDimension} \\
{\bf Requirements Name} & \mi{DomainDimension}\\ \hline
Description & The computational domain is in 2D space.\\
Source & C1, V13\\
Related Data Definitions & N/A \\
Related Theoretical Models &\tmref{tmRefining}, \tmref{tmCoarsening} \\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005.\\
& Modified -- October, 2006. Field for ``Related Data Definitions'' and ``Related Theoretical Models'' are added.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{funnum} \fthefunnum \label{Conformal} \\
{\bf Requirements Name} & \mi{Conformal}\\ \hline
Description & Both input and output meshes are conformal.\\
& {\it Conformal}$(M^{\mbox{IN}}) \ \wedge$ \\
& {\it Conformal}$(M^{\mbox{OUT}})$\\
Source & C1, V18\\
Related Data Definitions & \dref{dConformal} \\
Related Theoretical Models & N/A \\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005.\\
& Modified -- October, 2006. Take out the requirement for generating non-conformal meshes.\\
& Modified -- October, 2006. Field for ``Related Data Definitions'' and ``Related Theoretical Models'' are added.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{funnum} \fthefunnum \label{InputDefinition} \\
{\bf Requirements Name} & \mi{InputDefinition}\\ \hline
Description & The input of PMGT should be provided by the embedding application.\\
Source & C8\\
Related Data Definitions & \dref{dMeshT}, \dref{dInstructionT}, \dref{dRCInstructionT} \\
Related Theoretical Models & \tmref{tmRefining}, \tmref{tmCoarsening} \\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005.\\
& Modified--October 2005. Change the name from ``Input'' to ``InputDefinition'' to clarify that this requirements is about the source of the input. \\
& Modified -- October, 2006. Field for ``Related Data Definitions'' and ``Related Theoretical Models'' are added.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{funnum} \fthefunnum \label{RCInstruction} \\
{\bf Requirements Name} & \mi{RCInstruction}\\ \hline
Description & The Instruction on how to refine/coarsen a mesh includes the instruction of whether to refine or coarsen the mesh and an individual instruction for each element of the the mesh to indicate refining, coarsening, or no change.\\
Source & Dr. Smith\\
Related Data Definitions & \dref{dInstructionT}, \dref{dCellInstructionT}, \dref{dRCInstructionT} \\
Related Theoretical Models & \tmref{tmRefining}, \tmref{tmCoarsening} \\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005\\
& Modified -- October, 2006. Field for ``Related Data Definitions'' and ``Related Theoretical Models'' are added.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{funnum} \fthefunnum \label{OutputStorage} \\
{\bf Requirements Name} & \mi{OutputStorage}\\ \hline
Description & The output of PMGT is stored in memory or in files or in both memory and files.\\
Source & C12, Dr. Smith\\
Related Data Definitions & N/A \\
Related Theoretical Models & N/A \\
%Depending on & None\\
Binding Time & Run time\\
History & Created -- June, 2005.\\
& Modified -- October 2005. Change the name from ``Output'' to ``OutputStorage'' to clarify that this requirements is about the storage of the output.\\
& Modified -- October 2006. Add the requirement of storing the output mesh in files or both memory and files.\\
& Modified -- October, 2006. Field for ``Related Data Definitions'' and ``Related Theoretical Models'' are added.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{funnum} \fthefunnum \label{VertexUniqueID} \\
{\bf Requirements Name} & \mi{VertexUniqueID}\\ \hline
Description & Each vertex in the output file has a unique identifier.\\
Source & C2\\
Related Data Definitions & N/A \\
Related Theoretical Models & N/A \\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005.\\
& Modified -- October, 2006. Field for ``Related Data Definitions'' and ``Related Theoretical Models'' are added.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{funnum} \fthefunnum \label{ElmUniqueID} \\
{\bf Requirements Name} & \mi{ElmUniqueID}\\ \hline
Description & Each element in the output file has a unique identifier.\\
Source & C3\\
Related Data Definitions & N/A \\
Related Theoretical Models & N/A \\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005.\\
& Modified -- October, 2006. Field for ``Related Data Definitions'' and ``Related Theoretical Models'' are added.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{funnum} \fthefunnum \label{ElmTopology} \\
{\bf Requirements Name} & \mi{ElmTopology}\\ \hline
Description & The topology of an element in the output file is given by the connectivity of its set of vertices.\\
Source & C4\\
Related Data Definitions & N/A \\
Related Theoretical Models & N/A \\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005.\\
& Modified -- October, 2006. Field for ``Related Data Definitions'' and ``Related Theoretical Models'' are added.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{funnum} \fthefunnum \label{OutElmOrder} \\
{\bf Requirements Name} & \mi{OutElmOrder}\\ \hline
Description & The element information in output files is listed in ascending order.\\
Source & C13, V34\\
Related Data Definitions & N/A \\
Related Theoretical Models & N/A \\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005.\\
& Modified -- October, 2006. Field for ``Related Data Definitions'' and ``Related Theoretical Models'' are added.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{funnum} \fthefunnum \label{OutVertexOrder} \\
{\bf Requirements Name} & \mi{OutVertexOrder}\\ \hline
Description & The vertex information, such as the coordinates, in output files is listed in ascending order.\\
Source & C14, V35\\
Related Data Definitions & N/A \\
Related Theoretical Models & N/A \\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005.\\
& Modified -- October, 2006. Field for ``Related Data Definitions'' and ``Related Theoretical Models'' are added.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{funnum} \fthefunnum \label{Help} \\
{\bf Requirements Name} & \mi{Help}\\ \hline
Description & Helps on documenting the interface and the functionality of each function should be provided.\\
Source & Dr. Smith\\
Related Data Definitions & N/A \\
Related Theoretical Models & N/A \\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005.\\
& Modified -- October 2005. Add the requirement of documenting functionality of each function.\\
& Modified -- October, 2006. Field for ``Related Data Definitions'' and ``Related Theoretical Models'' are added.\\
\hline \hline
\end{tabular}
\end{minipage}
\subsection{Non-functional Requirements \label{nonFunReq}}
All non-functional requirements listed in \citet{Smith2004} are selected except for C16, which is solution tolerance, since a mesh refined/coarsened by different algorithms may have different solutions, but all of these solutions can still be valid. All potential output meshes are valid as long as the output meshes are covering/covered up meshes of the original mesh, and they are refined/coarsened according to the RCInstruction. The resulting mesh is difficult to measure in terms of \emph{solution tolerance}. Three new non-functional requirements, which are \emph{LookAndFeel} (\nref{LookAndFeel}), \emph{Usability} (\nref{Usability}), and \emph{Maintainability} (\nref{Maintainability}), are added. These requirements are mentioned in \citet{Lai2004}.
PMGT is difficult to validate. One reason is that the solution for refining/coarsening a mesh is unknown, as mentioned above. The other reason is that it is difficult to write validatable requirements, especially for nonfunctional requirements. For example, what is the proper way for specifying the requirement of \emph{Usability} (\nref{Usability}) of PMGT? On the one hand, that \emph{the software should easy to use} is not validatable. On the other hand, that \emph{a person should be able to use the software in two days} is validatable. However, the measurement, \emph{two days}, often lacks a justifiable rationale.
The approach to validate this kind of requirements are to compare it with other software with similar functionality. Phrases that are in italics and capitalized, such as \emph{MANPROP}, represent constant defined in Section \ref{SecAC}. Usually, these constants come from other applications with similar functionalities. For example, the \emph{Usability} requirement of PMGT is presented as follows:
\begin{quotation}
This system should be easy to use. Users with the background specified in Section~\ref{AreqUserchar} should take \emph{LEARNTIME} to reproduce an example mesh, which is specified by the test case \cref{ATCrm} in the Appendix \ref{Atest}.
\end{quotation}
First, more general requirement is given. Then, a suggestion to reproduce an example mesh is specified. The constant \emph{LEARNTIME} is defined as the time to produce the same mesh for users with the same background using AOMD.
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{nfnum} \nthenfnum \label{Performance} \\
{\bf Requirements Name} & \mi{Performance}\\ \hline
Description & Refining/coarsening a mesh using multiple processors should be faster than when using a single processor. In addition, the performance of PMGT should be comparable with that of similar applications. The execution time to refine an example mesh, which is specified by the test case \cref{ATCrm} in the Appendix \ref{Atest}.\\
Source & C15, V39\\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{nfnum} \nthenfnum \label{Precision} \\
{\bf Requirements Name} & \mi{Precision}\\ \hline
Description & The number of decimal digits should agree with the IEEE standard for floating-point numbers.\\
Source & C17, V41\\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005.\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{nfnum} \nthenfnum \label{Exception} \\
{\bf Requirements Name} & \mi{Exception}\\ \hline
Description & Run-time exception handling should check at least the following exceptions: division by zero, redundant vertices, redundant edges, redundant cells.\\
Source & C18, V42\\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{nfnum} \nthenfnum \label{Portability} \\
{\bf Requirements Name} & \mi{Portability}\\ \hline
Description & PMGT should build on a platform with access to SHARCNET or on a the system that has similar architecture to SHARCNET. The memory capacity should be \emph{MEMCAP}.\\
Source & C19, V37, V38\\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{nfnum} \nthenfnum \label{LookAndFeel} \\
{\bf Requirements Name} & \mi{LookAndFeel}\\ \hline
Description & PMGT should follow the programming conventions of the language in which the application is coded in.\\
Source & Dr. Smith\\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{nfnum} \nthenfnum \label{Usability} \\
{\bf Requirements Name} & \mi{Usability}\\ \hline
Description & This system should be easy to use. Users with the background specified in Section~\ref{AreqUserchar} should take \emph{LEARNTIME} to reproduce an example mesh, which is specified in the Appendex \ref{Atest}. \\
Source & Dr. Smith\\
%Depending on & None\\
Binding Time & Scope time\\
History & Created -- June, 2005\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Requirements Number} & \refstepcounter{nfnum} \nthenfnum \label{Maintainability} \\
{\bf Requirements Name} & \mi{Maintainability}\\ \hline
Description & The system should be developed in the way that the effort spent to maintain the system or to add in features would be minimum. The redevelopment time to add a new algorithm to coarsen meshes in PMGT should be \emph{MANPROP}.\\
Source & Dr. Smith\\
Binding Time & Scope time\\
History & Created -- June, 2005\\
\hline \hline
\end{tabular}
\end{minipage}
\section{Other System Issues \label{AreqSecOSI}}
This section includes some other supporting information that might contribute to the success or failure of the system development. The following factors are considered:
\begin{itemize}
\item Open issues are statements of factors that are uncertain and might make significant difference to the system.
\item Off-the-shell solutions are existing systems and/or components bought or borrowed. They could be the potential solutions.
\item Waiting rooms provide a blueprint of how the system will be extended.
\end{itemize}
\subsection{Open Issues}
There are no open issues for PMGT at this stage.
\subsection{Off-the-shelf Solutions}
The following programs may be used in PMGT.
\begin{itemize}
\item AOMD: a mesh management library (or database) that is able to provide a variety of services for mesh users \citep{AOMD2006}.
\end{itemize}
\subsection{Waiting Rooms}
Here, we list the possible changes that can affect the extension of the system. These changes are related to the assumptions specified in Section \ref{AreqSolution}.
\begin{enumerate}
\item PMGT may produce both structured and unstructured meshes.
\item PMGT may produce both conformal and nonconformal meshes.
\item The elements of input and output mesh may be of a shape other than triangles.
\item The system may deal with invalid input mesh.
\item The system may accommodate a mixed mesh.
\item The system may accommodate a hybrid mesh.
\item The system may deal with a 3D problem domain.
\end{enumerate}
\section{Traceability Matrix \label{AreqSecTM}}
The traceability matrix defined in this section gives a big picture of the associations among goals, assumptions, data definitions, theoretical models, and functional requirements. Goals are ideal general models. After assumptions are applied, these goals are restricted to problems that can be solved by PMGT. Data definitions and theoretical models are used to describe the requirements. The matrix is too big to fit one page. For the sake of clarity, it is split into three parts in five tables, which are Table \ref{AreqTM11}, Table \ref{AreqTM12}, Table \ref{AreqTM21}, Table \ref{AreqTM22}, and Table \ref{AreqTM3}. In addition, only items that have a relation with items in the same part are listed. If there is a \checkmark in a cell, it means that if the goal, or the assumption, or the theoretical model, or the data definition, or the requirement in the corresponding column changes, the assumption, or the data definition, or the theoretical model, or the requirement in the corresponding row should also change.
\begin{table}[ht!]
\centering
\begin{tabular}{|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|}
\hline
&\gref{gRefining} & \gref{gCoarsening} & \aref{aDimension} & \aref{aClosed} & \aref{aUnstructured} & \aref{aConformal} & \aref{aElmShape} & \aref{aValidMesh}& \tmref{tmRefining} & \tmref{tmCoarsening}\\
\hline\hline
\aref{aDimension}& \checkmark & \checkmark & \checkmark & & & & & & & \\\hline %a1
\aref{aClosed}& \checkmark & \checkmark & & \checkmark & & & & & & \\\hline %a2
\aref{aUnstructured}& \checkmark & \checkmark & & & \checkmark & & & & & \\\hline %a3
\aref{aConformal}& \checkmark & \checkmark & & & & \checkmark & & & & \\\hline %a4
\aref{aElmShape}& \checkmark & \checkmark & \checkmark & & & & \checkmark & & &\\\hline %a5
\aref{aValidMesh}& \checkmark & \checkmark & & & & & & \checkmark & &\\\hline %a5
\hline
\dref{dVertexT}& \checkmark & \checkmark & \checkmark & & & & & & & \\\hline %d1
\dref{dEdgeT}& \checkmark & \checkmark & & & & & & & &\\\hline%d2
\dref{dValidEdge}& \checkmark & \checkmark & & & & & & & &\\\hline%d2
\dref{dCellT}& \checkmark & \checkmark & \checkmark & & & & \checkmark & & & \\\hline%d3
\dref{dArea}& \checkmark & \checkmark & \checkmark & & & & \checkmark & & & \\\hline%d3
\dref{dValidCell}& \checkmark & \checkmark & \checkmark & & & & \checkmark & & & \\\hline%d3
\dref{dMeshT}& \checkmark & \checkmark & & & & & & & & \\\hline%d4
\dref{dOnEdge}& \checkmark & \checkmark & \checkmark & & & & & & & \\\hline%d4
\dref{dBelongToCell}& \checkmark & \checkmark & \checkmark& & & & & & & \\\hline%d4
\dref{dInside}& \checkmark & \checkmark & \checkmark & & & & \checkmark & & & \\\hline%d4
\dref{dVertices}& \checkmark & \checkmark & & & & & & & & \\\hline%d4
\dref{dEdges}& \checkmark & \checkmark & \checkmark & & & & & \checkmark & & \\\hline%d4
\dref{dBoundaryEdges}& \checkmark & \checkmark & \checkmark & & & & & & &\\\hline%d5
\dref{dBoundaryVertices}& \checkmark & \checkmark & \checkmark & & & & & & &\\\hline%d5
\dref{dBounded}& \checkmark & \checkmark & \checkmark & \checkmark & & & & & &\\\hline%d6
\dref{dConformal}& \checkmark & \checkmark & \checkmark & & & \checkmark & & & &\\\hline%d7
\dref{dNoInteriorIntersect}& \checkmark & \checkmark & \checkmark &\checkmark & & & & & &\\\hline%d3
\dref{dValidMesh}& \checkmark & \checkmark & & & & & & & &\\\hline%d3
\dref{dInstructionT}& \checkmark & \checkmark & & & & & & & &\\\hline%d3
\dref{dCellInstructionT}& \checkmark & \checkmark & & & & & & & &\\\hline%d11
\dref{dRCInstructionT}& \checkmark & \checkmark & & & & & & & &\\\hline%d11
\dref{dCoveringUp}& \checkmark & \checkmark & \checkmark & \checkmark & & & & & &\\\hline%d8
\dref{dRefined}& \checkmark & & & & & & & & &\\\hline%d9
\dref{dCoarsened}& & \checkmark & & & & & & & &\\\hline%d10
\hline
\tmref{tmRefining} & \checkmark & & \checkmark & & & & & & \checkmark& \\\hline
\tmref{tmCoarsening}& & \checkmark & \checkmark & & & & & & &\checkmark\\\hline
\end{tabular}
\caption{Traceability Matrix (PART I): Goals, Assumptions, Theoretical Models, Data Definitions, and Requirements (I)}
\label{AreqTM11}
\end{table}
\begin{table}[ht]
\centering
\begin{tabular}{|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|}
\hline
&\gref{gRefining} & \gref{gCoarsening} & \aref{aDimension} & \aref{aClosed} & \aref{aUnstructured} & \aref{aConformal} & \aref{aElmShape} & \aref{aValidMesh}& \tmref{tmRefining} & \tmref{tmCoarsening}\\
\hline\hline
\fref{RefiningMesh}& \checkmark & & & & & & & & \checkmark & \\\hline%f2
\fref{CoarseningMesh}& & \checkmark & & & & & & & &\checkmark \\\hline%f3
\fref{RefiningOrCoarsening}& \checkmark & \checkmark & & & & & & & \checkmark & \checkmark\\\hline%f1
\fref{MeshType}& & & & & \checkmark & & & & & \\\hline%f4
\fref{ElmShape}& \checkmark & \checkmark & \checkmark & & & & \checkmark & & \checkmark & \checkmark \\\hline%f5
\fref{DomainDimension}& \checkmark & \checkmark & \checkmark & & & & & & \checkmark & \checkmark \\\hline%f6
\fref{Conformal}& \checkmark & \checkmark & & & & \checkmark & & & & \\\hline%f7
\fref{InputDefinition}& \checkmark & \checkmark & & & & & & & \checkmark & \checkmark\\\hline%f11
\fref{RCInstruction}& \checkmark & \checkmark & & & & & && \checkmark & \checkmark \\\hline%f12
\fref{OutputStorage}& \checkmark & \checkmark & & & & & & & & \\\hline%f13
\fref{Help} & \checkmark & \checkmark & & & & & & & & \\\hline%f16
\end{tabular}
\caption{Traceability Matrix (PART I): Goals, Assumptions, Theoretical Models, Data Definitions, and Requirements (II)}
\label{AreqTM12}
\end{table}
\begin{table}[ht]
\centering
\begin{tabular}{|p{0.05\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|}
\hline
&\dref{dVertexT} & \dref{dEdgeT} & \dref{dValidEdge} & \dref{dCellT} & \dref{dArea} & \dref{dValidCell} & \dref{dMeshT} & \dref{dOnEdge}& \dref{dBelongToCell}& \dref{dInside} & \dref{dVertices} & \dref{dEdges} \\
\hline\hline
\dref{dVertexT}& \checkmark & & & & & & & & & & & \\\hline %d1
\dref{dEdgeT}& \checkmark & \checkmark & & & & & & & & & & \\\hline%d2
\dref{dValidEdge}& & \checkmark & \checkmark & & & & & & & & & \\\hline%d2
\dref{dCellT}& \checkmark & & & \checkmark & & & & & & & & \\\hline%d3
\dref{dArea}& \checkmark & & & & \checkmark & & & & & & & \\\hline%d3
\dref{dValidCell}& & & & \checkmark & \checkmark & \checkmark & & & & & & \\\hline%d3
\dref{dMeshT}& & & & \checkmark & & & \checkmark & & & & & \\\hline%d4
\dref{dOnEdge}& \checkmark & \checkmark & & & & & & \checkmark & & & & \\\hline%d4
\dref{dBelongToCell}& \checkmark & \checkmark & & \checkmark & & & & & \checkmark& & & \\\hline%d4
\dref{dInside}& \checkmark & & & \checkmark & & & & & & \checkmark & & \\\hline%d4
\dref{dVertices}& \checkmark & & & \checkmark & & & \checkmark & & & & \checkmark & \\\hline%d4
\dref{dEdges}& \checkmark & \checkmark & & \checkmark & & & \checkmark & & & & & \checkmark \\\hline%d4
\dref{dBoundaryEdges}& & \checkmark & & \checkmark & & & & & \checkmark & & & \checkmark \\\hline%d5
\dref{dBoundaryVertices}& \checkmark & & & & & & \checkmark & & & & & \\\hline%d5
\dref{dBounded}& \checkmark & \checkmark & & & & & \checkmark & & & & & \\\hline%d6
\dref{dConformal}& \checkmark & \checkmark& & \checkmark & & & \checkmark & & & & \checkmark & \checkmark\\\hline%d7
\dref{dNoInteriorIntersect}& \checkmark & & & \checkmark & & & \checkmark & & & \checkmark & & \\\hline%d6
\dref{dValidMesh}& & & \checkmark & & & \checkmark & \checkmark & & & & & \\\hline%d6
\dref{dCoveringUp}& \checkmark & \checkmark & & & & & \checkmark & \checkmark & & & & \\\hline%d8
\dref{dInstructionT}& & & & & & & & & & & & \\\hline%d10
\dref{dCellInstructionT}& & & & \checkmark & & & & & & & & \\\hline%d11
\dref{dRCInstructionT}& & & & & & & & & & & & \\\hline%d11
\dref{dRefined}& & & & & & & & & & & & \\\hline%d9
\dref{dCoarsened}& & & & & & & & & & & & \\\hline%d10
\hline
\tmref{tmRefining}& & & & & & & \checkmark & & & & & \\\hline%f2
\tmref{tmCoarsening}& & & & & & & \checkmark & & & & & \\\hline%f3
\hline
\fref{RefiningMesh}& & & & & & & & & & & & \\\hline%f2
\fref{CoarseningMesh}& & & & & & & & & & & & \\\hline%f3
\fref{RefiningOrCoarsening}& & & & & & & & & & & & \checkmark \\\hline%f1
\fref{ElmShape}& & & & \checkmark & & \checkmark & & & & & & \\\hline%f5
\fref{Conformal}& & & & & & & & & & & & \\\hline%f7
\fref{InputDefinition}& & & & & & & \checkmark & & & & & \\\hline%f11
\fref{RCInstruction}& & & & & & & & & & & & \\\hline%f12
\end{tabular}
\caption{Traceability Matrix (PART II): Data Definitions and Requirements (I)}
\label{AreqTM21}
\end{table}
\begin{table}[ht]
\centering
\begin{tabular}{|p{0.05\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|p{0.04\textwidth}|}
\hline
&\dref{dBoundaryEdges} & \dref{dBoundaryVertices} & \dref{dBounded} & \dref{dConformal} & \dref{dNoInteriorIntersect} & \dref{dValidMesh} & \dref{dCoveringUp} & \dref{dInstructionT}& \dref{dCellInstructionT}& \dref{dRCInstructionT} & \dref{dRefined} & \dref{dCoarsened} \\
\hline\hline
\dref{dBoundaryEdges}& \checkmark & & & & & & & & & & & \\\hline%d5
\dref{dBoundaryVertices}& \checkmark & \checkmark & & & & & & & & & & \\\hline%d5
\dref{dBounded}& \checkmark & \checkmark & \checkmark & & & & & & & & & \\\hline%d6
\dref{dConformal}& & & & \checkmark & & & & & & & & \\\hline%d7
\dref{dNoInteriorIntersect}& & & & & \checkmark & & & & & & & \\\hline%d6
\dref{dValidMesh}& & & \checkmark & \checkmark & \checkmark & \checkmark & & & & & & \\\hline%d6
\dref{dCoveringUp}& \checkmark & \checkmark & & & & & \checkmark & & & & & \\\hline%d8
\dref{dInstructionT}& & & & & & & & \checkmark & & & & \\\hline%d10
\dref{dCellInstructionT}& & & & & & & & \checkmark & \checkmark & & & \\\hline%d11
\dref{dRCInstructionT}& & & & & & & & \checkmark & \checkmark & \checkmark & & \\\hline%d11
\dref{dRefined}& & & & & & \checkmark & \checkmark & \checkmark & & \checkmark& \checkmark & \\\hline%d9
\dref{dCoarsened}& & & & & & \checkmark & \checkmark & \checkmark & & \checkmark & & \checkmark\\\hline%d10
\hline
\tmref{tmRefining}& & & & & & & & & & \checkmark & \checkmark& \\\hline%f2
\tmref{tmCoarsening}& & & & & & & & & & \checkmark & & \checkmark \\\hline%f3
\hline
\fref{RefiningMesh}& & & & & & & & \checkmark & & \checkmark & \checkmark & \\\hline%f2
\fref{CoarseningMesh}& & & & & & & & \checkmark & & \checkmark & & \checkmark \\\hline%f3
\fref{RefiningOrCoarsening}& & & & & & & & \checkmark & & \checkmark & \checkmark & \checkmark \\\hline%f1
\fref{ElmShape}& & & & & & & & & & & & \\\hline%f5
\fref{Conformal}& & & & \checkmark & & & & & & & & \\\hline%f7
\fref{InputDefinition}& & & & & & & & \checkmark & & \checkmark & & \\\hline%f11
\fref{RCInstruction}& & & & & & & & \checkmark & \checkmark & \checkmark & & \\\hline%f12
\end{tabular}
\caption{Traceability Matrix (PART II): Data Definitions and Requirements (II)}
\label{AreqTM22}
\end{table}
\begin{table}[ht]
\centering
\begin{tabular}{|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|p{0.05\textwidth}|}
\hline
& \fref{RefiningMesh}& \fref{CoarseningMesh}& \fref{DomainDimension}&\fref{InputDefinition}&\fref{OutputStorage}& \nref{Usability}\\
\hline\hline
\fref{RefiningOrCoarsening}& \checkmark & \checkmark & & & & \\\hline%f1
\fref{ElmShape}& & & \checkmark & & & \\\hline%f5
\fref{RCInstruction}& & & & \checkmark & & \\\hline%f12
\fref{VertexUniqueID}& & & & & \checkmark & \\\hline%f8
\fref{ElmUniqueID}& & & & & \checkmark & \\\hline%f9
\fref{ElmTopology}& & & & & \checkmark & \\\hline%f10
\fref{OutElmOrder}& & & & & \checkmark & \\\hline%f14
\fref{OutVertexOrder}& & & & & \checkmark & \\\hline%f15
\fref{Help} & & & & & & \checkmark \\\hline%f16
\end{tabular}
\caption{Traceability Matrix (PART III): Requirements }
\label{AreqTM3}
\end{table}
\section{List of Possible Changes in the Requirements \label{AreqSecPC}}
The system might evolve to accommodate the following changes in the future. These changes will add additional goals to the software library.
\begin{enumerate}
\item The input of PMGT may include material properties.
\item The input of PMGT may include boundary conditions.
\end{enumerate}
\section{Values of Auxiliary Constants \label{SecAC}}
The constants given in this section are used to validate some nonfunctional requirements. The compatible software chosen is AOMD. However, other software can also be used as long as the other software has the required functionalities to validate the given requirement.
\begin{tabular}{p{\firstCol}p{\secondCol}}
\emph{LEARNTIME} & The time that reproduce the same example as that specified in nonfunctional requirement \nref{Usability} using AOMD.\\
\emph{MANPROP} & The redevelopment time to add the same algorithm as that specified in the nonfunctional requirement \nref{Maintainability}, using AOMD. If the algorithm is already in AOMD, the the time that AOMD took to add it.\\
\emph{RSPTIME} & The execution time to refine the same mesh as that specified in nonfunctional requirement \nref{Performance} using AOMD. \\
\emph{MEMCAP} & The typical memory capacity of a machine on SHARCNET.\\
\end{tabular}
\newpage
\bibliography{WenRef}
\bibliographystyle{plainnat}
\end{document}
%!PS-Adobe-2.0 EPSF-1.2
%%Creator: MATLAB, The Mathworks, Inc.
%%Title: C:\Documents and Settings\wen yu\Desktop\speedup.eps
%%CreationDate: 12/23/2006 13:22:01
%%DocumentNeededFonts: Helvetica
%%DocumentProcessColors: Cyan Magenta Yellow Black
%%Pages: 1
%%BoundingBox: 59 199 553 602
%%EndComments
%%BeginProlog
% MathWorks dictionary
/MathWorks 160 dict begin
% definition operators
/bdef {bind def} bind def
/ldef {load def} bind def
/xdef {exch def} bdef
/xstore {exch store} bdef
% operator abbreviations
/c /clip ldef
/cc /concat ldef
/cp /closepath ldef
/gr /grestore ldef
/gs /gsave ldef
/mt /moveto ldef
/np /newpath ldef
/cm /currentmatrix ldef
/sm /setmatrix ldef
/rm /rmoveto ldef
/rl /rlineto ldef
/s {show newpath} bdef
/sc {setcmykcolor} bdef
/sr /setrgbcolor ldef
/sg /setgray ldef
/w /setlinewidth ldef
/j /setlinejoin ldef
/cap /setlinecap ldef
/rc {rectclip} bdef
/rf {rectfill} bdef
% page state control
/pgsv () def
/bpage {/pgsv save def} bdef
/epage {pgsv restore} bdef
/bplot /gsave ldef
/eplot {stroke grestore} bdef
% orientation switch
/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
% coordinate system mappings
/dpi2point 0 def
% font control
/FontSize 0 def
/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
makefont setfont} bdef
/ISOLatin1Encoding where {pop /WindowsLatin1Encoding 256 array bdef
ISOLatin1Encoding WindowsLatin1Encoding copy pop
/.notdef/.notdef/quotesinglbase/florin/quotedblbase/ellipsis/dagger
/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/.notdef/.notdef
/.notdef/.notdef/quoteleft/quoteright/quotedblleft/quotedblright/bullet
/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/.notdef/.notdef
/Ydieresis WindowsLatin1Encoding 128 32 getinterval astore pop}
{/WindowsLatin1Encoding StandardEncoding bdef} ifelse
/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
exch dup 3 1 roll findfont dup length dict begin
{ 1 index /FID ne {def}{pop pop} ifelse } forall
/Encoding exch def currentdict end definefont pop} bdef
/isroman {findfont /CharStrings get /Agrave known} bdef
/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
exch FMS} bdef
/csm {1 dpi2point div -1 dpi2point div scale neg translate
dup landscapeMode eq {pop -90 rotate}
{rotateMode eq {90 rotate} if} ifelse} bdef
% line types: solid, dotted, dashed, dotdash
/SO { [] 0 setdash } bdef
/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
/DA { [6 dpi2point mul] 0 setdash } bdef
/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
dpi2point mul] 0 setdash } bdef
% macros for lines and objects
/L {lineto stroke} bdef
/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
/AP {{rlineto} repeat} bdef
/PDlw -1 def
/W {/PDlw currentlinewidth def setlinewidth} def
/PP {closepath eofill} bdef
/DP {closepath stroke} bdef
/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
neg 0 exch rlineto closepath} bdef
/FR {MR stroke} bdef
/PR {MR fill} bdef
/L1i {{currentfile picstr readhexstring pop} image} bdef
/tMatrix matrix def
/MakeOval {newpath tMatrix currentmatrix pop translate scale
0 0 1 0 360 arc tMatrix setmatrix} bdef
/FO {MakeOval stroke} bdef
/PO {MakeOval fill} bdef
/PD {currentlinewidth 2 div 0 360 arc fill
PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
/FA {newpath tMatrix currentmatrix pop translate scale
0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
/FAn {newpath tMatrix currentmatrix pop translate scale
0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
/vradius 0 def /hradius 0 def /lry 0 def
/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
/ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
vradius add translate hradius vradius scale 0 0 1 180 270 arc
tMatrix setmatrix lrx hradius sub uly vradius add translate
hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
lrx hradius sub lry vradius sub translate hradius vradius scale
0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
closepath} bdef
/FRR {MRR stroke } bdef
/PRR {MRR fill } bdef
/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
closepath} bdef
/FlrRR {MlrRR stroke } bdef
/PlrRR {MlrRR fill } bdef
/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
closepath} bdef
/FtbRR {MtbRR stroke } bdef
/PtbRR {MtbRR fill } bdef
/stri 6 array def /dtri 6 array def
/smat 6 array def /dmat 6 array def
/tmat1 6 array def /tmat2 6 array def /dif 3 array def
/asub {/ind2 exch def /ind1 exch def dup dup
ind1 get exch ind2 get sub exch } bdef
/tri_to_matrix {
2 0 asub 3 1 asub 4 0 asub 5 1 asub
dup 0 get exch 1 get 7 -1 roll astore } bdef
/compute_transform {
dmat dtri tri_to_matrix tmat1 invertmatrix
smat stri tri_to_matrix tmat2 concatmatrix } bdef
/ds {stri astore pop} bdef
/dt {dtri astore pop} bdef
/db {2 copy /cols xdef /rows xdef mul dup string
currentfile exch readhexstring pop
/bmap xdef pop pop} bdef
/it {gs np dtri aload pop moveto lineto lineto cp c
cols rows 8 compute_transform
{bmap} image gr}bdef
/il {newpath moveto lineto stroke}bdef
currentdict end def
%%EndProlog
%%BeginSetup
MathWorks begin
0 cap
end
%%EndSetup
%%Page: 1 1
%%BeginPageSetup
%%PageBoundingBox: 59 199 553 602
MathWorks begin
bpage
%%EndPageSetup
%%BeginObject: obj1
bplot
/dpi2point 12 def
portraitMode 0204 7344 csm
513 110 5924 4844 MR c np
85 dict begin %Colortable dictionary
/c0 { 0 0 0 sr} bdef
/c1 { 1 1 1 sr} bdef
/c2 { 1 0 0 sr} bdef
/c3 { 0 1 0 sr} bdef
/c4 { 0 0 1 sr} bdef
/c5 { 1 1 0 sr} bdef
/c6 { 1 0 1 sr} bdef
/c7 { 0 1 1 sr} bdef
c0
1 j
1 sg
0 0 6913 5185 PR
6 w
0 4225 5356 0 0 -4225 899 4614 4 MP
PP
-5356 0 0 4225 5356 0 0 -4225 899 4614 5 MP stroke
4 w
DO
SO
6 w
0 sg
899 389 mt 6255 389 L
899 4614 mt 6255 4614 L
6255 4614 mt 6255 389 L
899 4614 mt 899 389 L
899 4614 mt 6255 4614 L
899 4614 mt 899 389 L
899 4614 mt 899 4560 L
899 389 mt 899 442 L
%%IncludeResource: font Helvetica
/Helvetica /WindowsLatin1Encoding 120 FMSR
866 4759 mt
(0) s
1494 4614 mt 1494 4560 L
1494 389 mt 1494 442 L
1361 4759 mt
(1000) s
2089 4614 mt 2089 4560 L
2089 389 mt 2089 442 L
1956 4759 mt
(2000) s
2684 4614 mt 2684 4560 L
2684 389 mt 2684 442 L
2551 4759 mt
(3000) s
3279 4614 mt 3279 4560 L
3279 389 mt 3279 442 L
3146 4759 mt
(4000) s
3874 4614 mt 3874 4560 L
3874 389 mt 3874 442 L
3741 4759 mt
(5000) s
4469 4614 mt 4469 4560 L
4469 389 mt 4469 442 L
4336 4759 mt
(6000) s
5064 4614 mt 5064 4560 L
5064 389 mt 5064 442 L
4931 4759 mt
(7000) s
5659 4614 mt 5659 4560 L
5659 389 mt 5659 442 L
5526 4759 mt
(8000) s
6255 4614 mt 6255 4560 L
6255 389 mt 6255 442 L
6122 4759 mt
(9000) s
899 4614 mt 952 4614 L
6255 4614 mt 6201 4614 L
798 4658 mt
(0) s
899 4010 mt 952 4010 L
6255 4010 mt 6201 4010 L
798 4054 mt
(2) s
899 3406 mt 952 3406 L
6255 3406 mt 6201 3406 L
798 3450 mt
(4) s
899 2803 mt 952 2803 L
6255 2803 mt 6201 2803 L
798 2847 mt
(6) s
899 2199 mt 952 2199 L
6255 2199 mt 6201 2199 L
798 2243 mt
(8) s
899 1596 mt 952 1596 L
6255 1596 mt 6201 1596 L
731 1640 mt
(10) s
899 992 mt 952 992 L
6255 992 mt 6201 992 L
731 1036 mt
(12) s
899 389 mt 952 389 L
6255 389 mt 6201 389 L
731 433 mt
(14) s
899 389 mt 6255 389 L
899 4614 mt 6255 4614 L
6255 4614 mt 6255 389 L
899 4614 mt 899 389 L
gs 899 389 5357 4226 MR c np
3214 -6 1071 -402 357 -403 1077 4312 4 MP stroke
gs 1004 3428 4789 958 MR c np
36 36 1077 4312 FO
36 36 1434 3909 FO
36 36 2505 3507 FO
36 36 5719 3501 FO
gr
3214 -154 1071 -935 357 -755 1077 4312 4 MP stroke
gs 1004 2395 4789 1991 MR c np
1041 4312 mt 1113 4312 L
1077 4276 mt 1077 4348 L
1398 3557 mt 1470 3557 L
1434 3521 mt 1434 3593 L
2469 2622 mt 2541 2622 L
2505 2586 mt 2505 2658 L
5683 2468 mt 5755 2468 L
5719 2432 mt 5719 2504 L
1052 4287 mt 1102 4337 L
1102 4287 mt 1052 4337 L
1409 3532 mt 1459 3582 L
1459 3532 mt 1409 3582 L
2480 2597 mt 2530 2647 L
2530 2597 mt 2480 2647 L
5694 2443 mt 5744 2493 L
5744 2443 mt 5694 2493 L
gr
3214 -469 1071 -2263 357 -755 1077 4312 4 MP stroke
gs 1004 752 4789 3634 MR c np
1041 4312 mt 1113 4312 L
1077 4276 mt 1077 4348 L
1398 3557 mt 1470 3557 L
1434 3521 mt 1434 3593 L
2469 1294 mt 2541 1294 L
2505 1258 mt 2505 1330 L
5683 825 mt 5755 825 L
5719 789 mt 5719 861 L
gr
gr
3150 4902 mt
(Number of Cells) s
649 2740 mt -90 rotate
(Speedup) s
90 rotate
2404 294 mt
(Speedup for Different Number of Processors) s
4112 3697 mt
(np=2) s
4112 2738 mt
(np=4) s
4112 1252 mt
(np=8) s
end
eplot
%%EndObject
epage
end
showpage
%%Trailer
%%EOF
%!PS-Adobe-3.0 EPSF-3.0
%%Title: (Slide 1)
%%Version: 1 4
%%Creator: Adobe Acrobat 6.0
%%CreationDate: 13:01:39 11/07/06
%%For: (Wen Yu)
%%DocumentData: Clean7Bit
%%BoundingBox: 29 62 747 599
%%HiResBoundingBox: 29.0 62.0 747.0 599.0
%%Pages: 0
%%DocumentProcessColors: Black
%%DocumentNeededResources: (atend)
%%DocumentSuppliedResources:
%%+ procset (Adobe Acrobat - PDF operators) 1.2 0
%%+ procset (Adobe Acrobat - type operators) 1.2 0
%%+ procset (Adobe Acrobat - general image support) 1.2 0
%%+ procset (Adobe Acrobat - monochrome image support) 1.2 0
%%+ procset (Adobe Acrobat - color image support) 1.2 0
%%+ procset (Adobe Acrobat - indexed color image support) 1.2 0
%%EndComments
%%BeginProlog
%%EndProlog
%%BeginSetup
%ADOPrintSettings: L1 W0 VM op crd os scsa T h EF bg ucr sf ef r b fa pr SEPS ttf HB 0
%%BeginResource: file Pscript_T42Hdr PSVER
userdict /ct_T42Dict 15 dict put
ct_T42Dict begin
/Is2015?
{
version
cvi
2015
ge
} bind def
/AllocGlyphStorage
{
Is2015?
{
pop
}
{
{string} forall
} ifelse
} bind def
/Type42DictBegin
{
25 dict begin
/FontName exch def
/CharStrings 256 dict
begin
/.notdef 0 def
currentdict
end def
/Encoding exch def
/PaintType 0 def
/FontType 42 def
/FontMatrix [1 0 0 1 0 0] def
4 array astore cvx /FontBBox exch def
/sfnts
} bind def
/Type42DictEnd
{
currentdict dup /FontName get exch definefont end
ct_T42Dict exch
dup /FontName get exch put
} bind def
/RD {string currentfile exch readstring pop} executeonly def
/PrepFor2015
{
Is2015?
{
/GlyphDirectory
16
dict def
sfnts 0 get
dup
2 index
(glyx)
putinterval
2 index
(locx)
putinterval
pop
pop
}
{
pop
pop
} ifelse
} bind def
/AddT42Char
{
Is2015?
{
/GlyphDirectory get
begin
def
end
pop
pop
}
{
/sfnts get
4 index
get
3 index
2 index
putinterval
pop
pop
pop
pop
} ifelse
} bind def
end
%%EndResource
%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.16 0
%%Copyright: Copyright 1987-2003 Adobe Systems Incorporated.
%%Version: 1.16 0
systemdict /languagelevel known dup
{ currentglobal false setglobal }
{ false }
ifelse
exch
userdict /Adobe_CoolType_Utility 2 copy known
{ 2 copy get dup maxlength 25 add dict copy }
{ 25 dict }
ifelse put
Adobe_CoolType_Utility
begin
/ct_Level2? exch def
/ct_Clone? 1183615869 internaldict dup
/CCRun known not
exch /eCCRun known not
ct_Level2? and or def
ct_Level2?
{ globaldict begin currentglobal true setglobal }
if
/ct_AddStdCIDMap
ct_Level2?
{ {
((Hex) 57 StartData
0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0
7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60
d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8
cc36 74f4 1144 b13b 77) 0 () /SubFileDecode filter cvx exec
} }
{ {
<BAB431EA07F209EB8C4348311481D9D3F76E3D15246555577D87BC510ED54E
118C39697FA9F6DB58128E60EB8A12FA24D7CDD2FA94D221FA9EC8DA3E5E6A1C
4ACECC8C2D39C54E7C946031DD156C3A6B4A09AD29E1867A> eexec
} }
ifelse bind def
ct_Level2?
{ end setglobal }
if
/ct_UseNativeCapability? systemdict /composefont known def
/ct_MakeOCF 35 dict def
/ct_Vars 25 dict def
/ct_GlyphDirProcs 6 dict def
/ct_BuildCharDict 15 dict dup
begin
/charcode 2 string def
/dst_string 1500 string def
/nullstring () def
/usewidths? true def
end def
ct_Level2? { setglobal } { pop } ifelse
ct_GlyphDirProcs
begin
/GetGlyphDirectory
{
systemdict /languagelevel known
{ pop /CIDFont findresource /GlyphDirectory get }
{
1 index /CIDFont findresource /GlyphDirectory
get dup type /dicttype eq
{
dup dup maxlength exch length sub 2 index lt
{
dup length 2 index add dict copy 2 index
/CIDFont findresource/GlyphDirectory 2 index put
}
if
}
if
exch pop exch pop
}
ifelse
+
} def
/+
{
systemdict /languagelevel known
{
currentglobal false setglobal
3 dict begin
/vm exch def
}
{ 1 dict begin }
ifelse
/$ exch def
systemdict /languagelevel known
{
vm setglobal
/gvm currentglobal def
$ gcheck setglobal
}
if
? { $ begin } if
} def
/? { $ type /dicttype eq } def
/| {
userdict /Adobe_CoolType_Data known
{
Adobe_CoolType_Data /AddWidths? known
{
currentdict Adobe_CoolType_Data
begin
begin
AddWidths?
{
Adobe_CoolType_Data /CC 3 index put
? { def } { $ 3 1 roll put } ifelse
CC charcode exch 1 index 0 2 index 256 idiv put
1 index exch 1 exch 256 mod put
stringwidth 2 array astore
currentfont /Widths get exch CC exch put
}
{ ? { def } { $ 3 1 roll put } ifelse }
ifelse
end
end
}
{ ? { def } { $ 3 1 roll put } ifelse } ifelse
}
{ ? { def } { $ 3 1 roll put } ifelse }
ifelse
} def
/!
{
? { end } if
systemdict /languagelevel known
{ gvm setglobal }
if
end
} def
/: { string currentfile exch readstring pop } executeonly def
end
ct_MakeOCF
begin
/ct_cHexEncoding
[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
/ct_CID_STR_SIZE 8000 def
/ct_mkocfStr100 100 string def
/ct_defaultFontMtx [.001 0 0 .001 0 0] def
/ct_1000Mtx [1000 0 0 1000 0 0] def
/ct_raise {exch cvx exch errordict exch get exec stop} bind def
/ct_reraise
{ cvx $error /errorname get (Error: ) print dup ( ) cvs print
errordict exch get exec stop
} bind def
/ct_cvnsi
{
1 index add 1 sub 1 exch 0 4 1 roll
{
2 index exch get
exch 8 bitshift
add
}
for
exch pop
} bind def
/ct_GetInterval
{
Adobe_CoolType_Utility /ct_BuildCharDict get
begin
/dst_index 0 def
dup dst_string length gt
{ dup string /dst_string exch def }
if
1 index ct_CID_STR_SIZE idiv
/arrayIndex exch def
2 index arrayIndex get
2 index
arrayIndex ct_CID_STR_SIZE mul
sub
{
dup 3 index add 2 index length le
{
2 index getinterval
dst_string dst_index 2 index putinterval
length dst_index add /dst_index exch def
exit
}
{
1 index length 1 index sub
dup 4 1 roll
getinterval
dst_string dst_index 2 index putinterval
pop dup dst_index add /dst_index exch def
sub
/arrayIndex arrayIndex 1 add def
2 index dup length arrayIndex gt
{ arrayIndex get }
{
pop
exit
}
ifelse
0
}
ifelse
}
loop
pop pop pop
dst_string 0 dst_index getinterval
end
} bind def
ct_Level2?
{
/ct_resourcestatus
currentglobal mark true setglobal
{ /unknowninstancename /Category resourcestatus }
stopped
{ cleartomark setglobal true }
{ cleartomark currentglobal not exch setglobal }
ifelse
{
{
mark 3 1 roll /Category findresource
begin
ct_Vars /vm currentglobal put
({ResourceStatus} stopped) 0 () /SubFileDecode filter cvx exec
{ cleartomark false }
{ { 3 2 roll pop true } { cleartomark false } ifelse }
ifelse
ct_Vars /vm get setglobal
end
}
}
{ { resourcestatus } }
ifelse bind def
/CIDFont /Category ct_resourcestatus
{ pop pop }
{
currentglobal true setglobal
/Generic /Category findresource
dup length dict copy
dup /InstanceType /dicttype put
/CIDFont exch /Category defineresource pop
setglobal
}
ifelse
ct_UseNativeCapability?
{
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/CMapName /Identity-H def
/CMapVersion 1.000 def
/CMapType 1 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
1 begincidrange
<0000> <FFFF> 0
endcidrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
}
if
}
{
/ct_Category 2 dict begin
/CIDFont 10 dict def
/ProcSet 2 dict def
currentdict
end
def
/defineresource
{
ct_Category 1 index 2 copy known
{
get
dup dup maxlength exch length eq
{
dup length 10 add dict copy
ct_Category 2 index 2 index put
}
if
3 index 3 index put
pop exch pop
}
{ pop pop /defineresource /undefined ct_raise }
ifelse
} bind def
/findresource
{
ct_Category 1 index 2 copy known
{
get
2 index 2 copy known
{ get 3 1 roll pop pop}
{ pop pop /findresource /undefinedresource ct_raise }
ifelse
}
{ pop pop /findresource /undefined ct_raise }
ifelse
} bind def
/resourcestatus
{
ct_Category 1 index 2 copy known
{
get
2 index known
exch pop exch pop
{
0 -1 true
}
{
false
}
ifelse
}
{ pop pop /findresource /undefined ct_raise }
ifelse
} bind def
/ct_resourcestatus /resourcestatus load def
}
ifelse
/ct_CIDInit 2 dict
begin
/ct_cidfont_stream_init
{
{
dup (Binary) eq
{
pop
null
currentfile
ct_Level2?
{
{ cid_BYTE_COUNT () /SubFileDecode filter }
stopped
{ pop pop pop }
if
}
if
/readstring load
exit
}
if
dup (Hex) eq
{
pop
currentfile
ct_Level2?
{
{ null exch /ASCIIHexDecode filter /readstring }
stopped
{ pop exch pop (>) exch /readhexstring }
if
}
{ (>) exch /readhexstring }
ifelse
load
exit
}
if
/StartData /typecheck ct_raise
}
loop
cid_BYTE_COUNT ct_CID_STR_SIZE le
{
2 copy cid_BYTE_COUNT string exch exec
pop
1 array dup
3 -1 roll
0 exch put
}
{
cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi
dup array exch 2 sub 0 exch 1 exch
{
2 copy
5 index
ct_CID_STR_SIZE
string
6 index exec
pop
put
pop
}
for
2 index
cid_BYTE_COUNT ct_CID_STR_SIZE mod string
3 index exec
pop
1 index exch
1 index length 1 sub
exch put
}
ifelse
cid_CIDFONT exch /GlyphData exch put
2 index null eq
{
pop pop pop
}
{
pop /readstring load
1 string exch
{
3 copy exec
pop
dup length 0 eq
{
pop pop pop pop pop
true exit
}
if
4 index
eq
{
pop pop pop pop
false exit
}
if
}
loop
pop
}
ifelse
} bind def
/StartData
{
mark
{
currentdict
dup /FDArray get 0 get /FontMatrix get
0 get 0.001 eq
{
dup /CDevProc known not
{
/CDevProc 1183615869 internaldict /stdCDevProc 2 copy known
{ get }
{
pop pop
{ pop pop pop pop pop 0 -1000 7 index 2 div 880 }
}
ifelse
def
}
if
}
{
/CDevProc
{
pop pop pop pop pop
0
1 cid_temp /cid_CIDFONT get
/FDArray get 0 get
/FontMatrix get 0 get div
7 index 2 div
1 index 0.88 mul
} def
}
ifelse
/cid_temp 15 dict def
cid_temp
begin
/cid_CIDFONT exch def
3 copy pop
dup /cid_BYTE_COUNT exch def 0 gt
{
ct_cidfont_stream_init
FDArray
{
/Private get
dup /SubrMapOffset known
{
begin
/Subrs SubrCount array def
Subrs
SubrMapOffset
SubrCount
SDBytes
ct_Level2?
{
currentdict dup /SubrMapOffset undef
dup /SubrCount undef
/SDBytes undef
}
if
end
/cid_SD_BYTES exch def
/cid_SUBR_COUNT exch def
/cid_SUBR_MAP_OFFSET exch def
/cid_SUBRS exch def
cid_SUBR_COUNT 0 gt
{
GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval
0 cid_SD_BYTES ct_cvnsi
0 1 cid_SUBR_COUNT 1 sub
{
exch 1 index
1 add
cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add
GlyphData exch cid_SD_BYTES ct_GetInterval
0 cid_SD_BYTES ct_cvnsi
cid_SUBRS 4 2 roll
GlyphData exch
4 index
1 index
sub
ct_GetInterval
dup length string copy put
}
for
pop
}
if
}
{ pop }
ifelse
}
forall
}
if
cleartomark pop pop
end
CIDFontName currentdict /CIDFont defineresource pop
end end
}
stopped
{ cleartomark /StartData ct_reraise }
if
} bind def
currentdict
end def
/ct_saveCIDInit
{
/CIDInit /ProcSet ct_resourcestatus
{ true }
{ /CIDInitC /ProcSet ct_resourcestatus }
ifelse
{
pop pop
/CIDInit /ProcSet findresource
ct_UseNativeCapability?
{ pop null }
{ /CIDInit ct_CIDInit /ProcSet defineresource pop }
ifelse
}
{ /CIDInit ct_CIDInit /ProcSet defineresource pop null }
ifelse
ct_Vars exch /ct_oldCIDInit exch put
} bind def
/ct_restoreCIDInit
{
ct_Vars /ct_oldCIDInit get dup null ne
{ /CIDInit exch /ProcSet defineresource pop }
{ pop }
ifelse
} bind def
/ct_BuildCharSetUp
{
1 index
begin
CIDFont
begin
Adobe_CoolType_Utility /ct_BuildCharDict get
begin
/ct_dfCharCode exch def
/ct_dfDict exch def
CIDFirstByte ct_dfCharCode add
dup CIDCount ge
{ pop 0 }
if
/cid exch def
{
GlyphDirectory cid 2 copy known
{ get }
{ pop pop nullstring }
ifelse
dup length FDBytes sub 0 gt
{
dup
FDBytes 0 ne
{ 0 FDBytes ct_cvnsi }
{ pop 0 }
ifelse
/fdIndex exch def
dup length FDBytes sub FDBytes exch getinterval
/charstring exch def
exit
}
{
pop
cid 0 eq
{ /charstring nullstring def exit }
if
/cid 0 def
}
ifelse
}
loop
} def
/ct_SetCacheDevice
{
0 0 moveto
dup stringwidth
3 -1 roll
true charpath
pathbbox
0 -1000
7 index 2 div 880
setcachedevice2
0 0 moveto
} def
/ct_CloneSetCacheProc
{
1 eq
{
stringwidth
pop -2 div -880
0 -1000 setcharwidth
moveto
}
{
usewidths?
{
currentfont /Widths get cid
2 copy known
{ get exch pop aload pop }
{ pop pop stringwidth }
ifelse
}
{ stringwidth }
ifelse
setcharwidth
0 0 moveto
}
ifelse
} def
/ct_Type3ShowCharString
{
ct_FDDict fdIndex 2 copy known
{ get }
{
currentglobal 3 1 roll
1 index gcheck setglobal
ct_Type1FontTemplate dup maxlength dict copy
begin
FDArray fdIndex get
dup /FontMatrix 2 copy known
{ get }
{ pop pop ct_defaultFontMtx }
ifelse
/FontMatrix exch dup length array copy def
/Private get
/Private exch def
/Widths rootfont /Widths get def
/CharStrings 1 dict dup /.notdef
<d841272cf18f54fc13> dup length string copy put def
currentdict
end
/ct_Type1Font exch definefont
dup 5 1 roll put
setglobal
}
ifelse
dup /CharStrings get 1 index /Encoding get
ct_dfCharCode get charstring put
rootfont /WMode 2 copy known
{ get }
{ pop pop 0 }
ifelse
exch
1000 scalefont setfont
ct_str1 0 ct_dfCharCode put
ct_str1 exch ct_dfSetCacheProc
ct_SyntheticBold
{
currentpoint
ct_str1 show
newpath
moveto
ct_str1 true charpath
ct_StrokeWidth setlinewidth
stroke
}
{ ct_str1 show }
ifelse
} def
/ct_Type4ShowCharString
{
ct_dfDict ct_dfCharCode charstring
FDArray fdIndex get
dup /FontMatrix get dup ct_defaultFontMtx ct_matrixeq not
{ ct_1000Mtx matrix concatmatrix concat }
{ pop }
ifelse
/Private get
Adobe_CoolType_Utility /ct_Level2? get not
{
ct_dfDict /Private
3 -1 roll
{ put }
1183615869 internaldict /superexec get exec
}
if
1183615869 internaldict
Adobe_CoolType_Utility /ct_Level2? get
{ 1 index }
{ 3 index /Private get mark 6 1 roll }
ifelse
dup /RunInt known
{ /RunInt get }
{ pop /CCRun }
ifelse
get exec
Adobe_CoolType_Utility /ct_Level2? get not
{ cleartomark }
if
} bind def
/ct_BuildCharIncremental
{
{
Adobe_CoolType_Utility /ct_MakeOCF get begin
ct_BuildCharSetUp
ct_ShowCharString
}
stopped
{ stop }
if
end
end
end
end
} bind def
/BaseFontNameStr (BF00) def
/ct_Type1FontTemplate 14 dict
begin
/FontType 1 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/FontBBox [-250 -250 1250 1250] def
/Encoding ct_cHexEncoding def
/PaintType 0 def
currentdict
end def
/BaseFontTemplate 11 dict
begin
/FontMatrix [0.001 0 0 0.001 0 0] def
/FontBBox [-250 -250 1250 1250] def
/Encoding ct_cHexEncoding def
/BuildChar /ct_BuildCharIncremental load def
ct_Clone?
{
/FontType 3 def
/ct_ShowCharString /ct_Type3ShowCharString load def
/ct_dfSetCacheProc /ct_CloneSetCacheProc load def
/ct_SyntheticBold false def
/ct_StrokeWidth 1 def
}
{
/FontType 4 def
/Private 1 dict dup /lenIV 4 put def
/CharStrings 1 dict dup /.notdef <d841272cf18f54fc13> put def
/PaintType 0 def
/ct_ShowCharString /ct_Type4ShowCharString load def
}
ifelse
/ct_str1 1 string def
currentdict
end def
/BaseFontDictSize BaseFontTemplate length 5 add def
/ct_matrixeq
{
true 0 1 5
{
dup 4 index exch get exch 3 index exch get eq and
dup not
{ exit }
if
}
for
exch pop exch pop
} bind def
/ct_makeocf
{
15 dict
begin
exch /WMode exch def
exch /FontName exch def
/FontType 0 def
/FMapType 2 def
/FontMatrix matrix def
/bfCount 1 index /CIDCount get 256 idiv 1 add
dup 256 gt { pop 256} if def
/Encoding
256 array 0 1 bfCount 1 sub { 2 copy dup put pop } for
bfCount 1 255 { 2 copy bfCount put pop } for
def
/FDepVector bfCount dup 256 lt { 1 add } if array def
BaseFontTemplate BaseFontDictSize dict copy
begin
/CIDFont exch def
CIDFont /FontBBox known
{ CIDFont /FontBBox get /FontBBox exch def }
if
CIDFont /CDevProc known
{ CIDFont /CDevProc get /CDevProc exch def }
if
currentdict
end
BaseFontNameStr 3 (0) putinterval
0 1 bfCount dup 256 eq { 1 sub } if
{
FDepVector exch
2 index BaseFontDictSize dict copy
begin
dup /CIDFirstByte exch 256 mul def
FontType 3 eq
{ /ct_FDDict 2 dict def }
if
currentdict
end
1 index 16
BaseFontNameStr 2 2 getinterval cvrs pop
BaseFontNameStr exch definefont
put
}
for
ct_Clone?
{ /Widths 1 index /CIDFont get /GlyphDirectory get length dict def }
if
FontName
currentdict
end
definefont
ct_Clone?
{
gsave
dup 1000 scalefont setfont
ct_BuildCharDict
begin
/usewidths? false def
currentfont /Widths get
begin
exch /CIDFont get /GlyphDirectory get
{
pop
dup charcode exch 1 index 0 2 index 256 idiv put
1 index exch 1 exch 256 mod put
stringwidth 2 array astore def
}
forall
end
/usewidths? true def
end
grestore
}
{ exch pop }
ifelse
} bind def
/ct_ComposeFont
{
ct_UseNativeCapability?
{
2 index /CMap ct_resourcestatus
{ pop pop exch pop }
{
/CIDInit /ProcSet findresource
begin
12 dict
begin
begincmap
/CMapName 3 index def
/CMapVersion 1.000 def
/CMapType 1 def
exch /WMode exch def
/CIDSystemInfo 3 dict dup
begin
/Registry (Adobe) def
/Ordering
CMapName ct_mkocfStr100 cvs
(Adobe-) search
{
pop pop
(-) search
{
dup length string copy
exch pop exch pop
}
{ pop (Identity)}
ifelse
}
{ pop (Identity) }
ifelse
def
/Supplement 0 def
end def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
1 begincidrange
<0000> <FFFF> 0
endcidrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
}
ifelse
composefont
}
{
3 2 roll pop
0 get /CIDFont findresource
ct_makeocf
}
ifelse
} bind def
/ct_MakeIdentity
{
ct_UseNativeCapability?
{
1 index /CMap ct_resourcestatus
{ pop pop }
{
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CMapName 2 index def
/CMapVersion 1.000 def
/CMapType 1 def
/CIDSystemInfo 3 dict dup
begin
/Registry (Adobe) def
/Ordering
CMapName ct_mkocfStr100 cvs
(Adobe-) search
{
pop pop
(-) search
{ dup length string copy exch pop exch pop }
{ pop (Identity) }
ifelse
}
{ pop (Identity) }
ifelse
def
/Supplement 0 def
end def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
1 begincidrange
<0000> <FFFF> 0
endcidrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
}
ifelse
composefont
}
{
exch pop
0 get /CIDFont findresource
ct_makeocf
}
ifelse
} bind def
currentdict readonly pop
end
end
%%EndResource
/currentpacking where{pop currentpacking true setpacking}if
%%BeginResource: procset pdfvars 6.0 1
%%Copyright: Copyright 1987-2002 Adobe Systems Incorporated. All Rights Reserved.
%%Title: definition of dictionary of variables used by PDF & PDFText procsets
userdict /PDF 162 dict put
userdict /PDFVars 89 dict dup begin put
/docSetupDone false def
/InitAll 0 def
/TermAll 0 def
/DocInitAll 0 def
/DocTermAll 0 def
/_pdfEncodings 2 array def
/_pdf_str1 1 string def
/_pdf_i 0 def
/_pdf_na 0 def
/_pdf_showproc 0 def
/_italMtx [1 0 .212557 1 0 0] def
/_italMtx_WMode1 [1 -.212557 0 1 0 0] def
/_italMtxType0 [1 0 .1062785 1 0 0] def
/_italMtx_WMode1Type0 [1 -.1062785 0 1 0 0] def
/_basefont 0 def
/_basefonto 0 def
/_pdf_oldCIDInit null def
/_pdf_FontDirectory 30 dict def
/_categories 10 dict def
/_sa? true def
/_ColorSep5044? false def
/nulldict 0 dict def
/_processColors 0 def
/overprintstack null def
/_defaulttransfer currenttransfer def
/_defaultflatness currentflat def
/_defaulthalftone null def
/_defaultcolortransfer null def
/_defaultblackgeneration null def
/_defaultundercolorremoval null def
/_defaultcolortransfer null def
PDF begin
[/c/cs/cm/d/d0/f/h/i/j/J/l/m/M/n/q/Q/re/ri/S/sc/sh/Tf/w/W
/applyInterpFunc/applystitchFunc/domainClip/encodeInput
/initgs/int/limit/rangeClip
/defineRes/undefineRes/findRes/setSA/pl
/? /! /| /: /+ /GetGlyphDirectory
/pdf_flushFilters /pdf_readstring /pdf_dictOp /pdf_image /pdf_maskedImage
/pdf_shfill /pdf_sethalftone
] {null def} bind forall
end
end
%%EndResource
PDFVars begin PDF begin
%%BeginResource: procset pdfutil 6.0 1
%%Copyright: Copyright 1993-2001 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Basic utilities used by other PDF procsets
/bd {bind def} bind def
/ld {load def} bd
/bld {
dup length dict begin
{ null def } forall
bind
end
def
} bd
/dd { PDFVars 3 1 roll put } bd
/xdd { exch dd } bd
/Level2?
systemdict /languagelevel known
{ systemdict /languagelevel get 2 ge } { false } ifelse
def
/Level1? Level2? not def
/Level3?
systemdict /languagelevel known
{systemdict /languagelevel get 3 eq } { false } ifelse
def
/getifknown {
2 copy known { get true } { pop pop false } ifelse
} bd
/here {
currentdict exch getifknown
} bd
/isdefined? { where { pop true } { false } ifelse } bd
%%EndResource
%%BeginResource: procset l2compat 6.0 1
%%Copyright: Copyright 1987-2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Level 1 emulation of level 2 operators
/setcmykcolor isdefined? not
{
/setcmykcolor {
1 sub 4 1 roll
3 {
3 index add neg dup 0 lt { pop 0 } if
3 1 roll
} repeat
setrgbcolor
pop
} bd
} if
/rectclip isdefined? not
{
/rectclip { newpath re clip newpath } bd
} if
/rectfill isdefined? not
{
/rectfill { gsave newpath re fill grestore } bd
} if
/sethalftone isdefined? not
{
/sethalftone {
begin
HalftoneType 1 eq
{ Frequency Angle /SpotFunction load setscreen }
if
end
} bd
} if
Level1?
{
/pdf_show {show} bd
/xshow
{
PDFVars /_pdf_showproc /pdf_show load put
pdf_xshow
} bd
/yshow
{
PDFVars /_pdf_showproc /pdf_show load put
pdf_yshow
} bd
/xyshow
{
PDFVars /_pdf_showproc /pdf_show load put
pdf_xyshow
} bd
} if
/getrampcolor {
cvi
/indx exch def
[
0 1 NumComp 1 sub {
dup
Samples exch get
dup type /stringtype eq { indx get } if
exch
Scaling exch get aload pop
3 1 roll
mul add
} for
]
L1setcolor
} bd
/sssetbackground { L1setcolor } bd
%%EndResource
%%BeginResource: procset pdf 6.0 1
%%Copyright: Copyright 1998-2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: General operators for PDF, common to all Language Levels.
/cm { matrix astore concat } bd
/d /setdash ld
/f /fill ld
/h /closepath ld
/i {dup 0 eq {pop _defaultflatness} if setflat} bd
/j /setlinejoin ld
/J /setlinecap ld
/M /setmiterlimit ld
/n /newpath ld
/S /stroke ld
/w /setlinewidth ld
/W /clip ld
/sg /setgray ld
/initgs {
0 setgray
[] 0 d
0 j
0 J
10 M
1 w
false setSA
/_defaulttransfer load settransfer
0 i
/RelativeColorimetric ri
newpath
} bd
/int {
dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul
exch pop add exch pop
} bd
/limit {
dup 2 index le { exch } if pop
dup 2 index ge { exch } if pop
} bd
/domainClip {
Domain aload pop 3 2 roll
limit
} [/Domain] bld
/applyInterpFunc {
0 1 DimOut 1 sub
{
dup C0 exch get exch
dup C1 exch get exch
3 1 roll
1 index sub
3 index
N exp mul add
exch
currentdict /Range_lo known
{
dup Range_lo exch get exch
Range_hi exch get
3 2 roll limit
}
{
pop
}
ifelse
exch
} for
pop
} [/DimOut /C0 /C1 /N /Range_lo /Range_hi] bld
/encodeInput {
NumParts 1 sub
0 1 2 index
{
dup Bounds exch get
2 index gt
{ exit }
{ dup
3 index eq
{ exit }
{ pop } ifelse
} ifelse
} for
3 2 roll pop
dup Bounds exch get exch
dup 1 add Bounds exch get exch
2 mul
dup Encode exch get exch
1 add Encode exch get
int
} [/NumParts /Bounds /Encode] bld
/rangeClip {
exch dup Range_lo exch get
exch Range_hi exch get
3 2 roll
limit
} [/Range_lo /Range_hi] bld
/applyStitchFunc {
Functions exch get exec
currentdict /Range_lo known {
0 1 DimOut 1 sub {
DimOut 1 add -1 roll
rangeClip
} for
} if
} [/Functions /Range_lo /DimOut] bld
/pdf_flushfilters
{
aload length
{ dup status
1 index currentfile ne and
{ dup flushfile closefile }
{ pop }
ifelse
} repeat
} bd
/pdf_readstring
{
1 index dup length 1 sub get
exch readstring pop
exch pdf_flushfilters
} bind def
/pdf_dictOp
{
3 2 roll
10 dict copy
begin
_Filters dup length 1 sub get def
currentdict exch exec
_Filters pdf_flushfilters
end
} [/_Filters] bld
/pdf_image {{image} /DataSource pdf_dictOp} bd
/pdf_imagemask {{imagemask} /DataSource pdf_dictOp} bd
/pdf_shfill {{sh} /DataSource pdf_dictOp} bd
/pdf_sethalftone {{sethalftone} /Thresholds pdf_dictOp} bd
/pdf_maskedImage
{
10 dict copy begin
/miDict currentdict def
/DataDict DataDict 10 dict copy def
DataDict begin
/DataSource
_Filters dup length 1 sub get
def
miDict image
_Filters pdf_flushfilters
end
end
} [/miDict /DataDict /_Filters] bld
/RadialShade {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/r2 exch def
/c2y exch def
/c2x exch def
/r1 exch def
/c1y exch def
/c1x exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
c1x c2x eq
{
c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope c2y c1y sub c2x c1x sub div def
/theta slope 1 atan def
c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
c1x c1y translate
theta rotate
-90 rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
/max { 2 copy gt { pop } {exch pop} ifelse } bind def
/min { 2 copy lt { pop } {exch pop} ifelse } bind def
rampdict begin
40 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
c1x c1y translate
theta rotate
-90 rotate
/c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
/c1y 0 def
/c1x 0 def
/c2x 0 def
ext0 {
0 getrampcolor
c2y r2 add r1 sub 0.0001 lt
{
c1x c1y r1 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2y r1 add r2 le
{
c1x c1y r1 0 360 arc
fill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r1 neg def
/p1y c1y def
/p2x r1 def
/p2y c1y def
p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y p1x SS1 div neg def
/SS2 90 theta sub dup sin exch cos div def
/p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y p2x SS2 div neg def
r1 r2 gt
{
/L1maxX p1x yMin p1y sub SS1 div add def
/L2maxX p2x yMin p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
c1x c2x sub dup mul
c1y c2y sub dup mul
add 0.5 exp
0 dtransform
dup mul exch dup mul add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
/hires exch def
hires mul
/numpix exch def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
/xInc c2x c1x sub numsteps div def
/yInc c2y c1y sub numsteps div def
/rInc r2 r1 sub numsteps div def
/cx c1x def
/cy c1y def
/radius r1 def
newpath
xInc 0 eq yInc 0 eq rInc 0 eq and and
{
0 getrampcolor
cx cy radius 0 360 arc
stroke
NumSamples 1 sub getrampcolor
cx cy radius 72 hires div add 0 360 arc
0 setlinewidth
stroke
}
{
0
numsteps
{
dup
subsampling { round } if
getrampcolor
cx cy radius 0 360 arc
/cx cx xInc add def
/cy cy yInc add def
/radius radius rInc add def
cx cy radius 360 0 arcn
eofill
rampIndxInc add
}
repeat
pop
} ifelse
ext1 {
c2y r2 add r1 lt
{
c2x c2y r2 0 360 arc
fill
}
{
c2y r1 add r2 sub 0.0001 le
{
c2x c2y r2 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r2 neg def
/p1y c2y def
/p2x r2 def
/p2y c2y def
p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y c2y p1x SS1 div sub def
/SS2 90 theta sub dup sin exch cos div def
/p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y c2y p2x SS2 div sub def
r1 r2 lt
{
/L1maxX p1x yMax p1y sub SS1 div add def
/L2maxX p2x yMax p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
grestore
grestore
end
end
end
} ifelse
} bd
/GenStrips {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/y2 exch def
/x2 exch def
/y1 exch def
/x1 exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
x1 x2 eq
{
y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope y2 y1 sub x2 x1 sub div def
/theta slope 1 atan def
x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
x1 y1 translate
theta rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
rampdict begin
20 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
x1 y1 translate
theta rotate
/xStart 0 def
/xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
/ySpan yMax yMin sub def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
xStart 0 transform
xEnd 0 transform
3 -1 roll
sub dup mul
3 1 roll
sub dup mul
add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
mul
/numpix exch def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
ext0 {
0 getrampcolor
xMin xStart lt
{ xMin yMin xMin neg ySpan rectfill } if
} if
/xInc xEnd xStart sub numsteps div def
/x xStart def
0
numsteps
{
dup
subsampling { round } if
getrampcolor
x yMin xInc ySpan rectfill
/x x xInc add def
rampIndxInc add
}
repeat
pop
ext1 {
xMax xEnd gt
{ xEnd yMin xMax xEnd sub ySpan rectfill } if
} if
grestore
grestore
end
end
end
} ifelse
} bd
/currentdistillerparams where { pop currentdistillerparams /CoreDistVersion get 5000 lt}{true}ifelse
{
/PDFMark5 {cleartomark} bd
}
{
/PDFMark5 {pdfmark} bd
}ifelse
/ReadByPDFMark5
{
2 dict begin
/makerString exch def string /tmpString exch def
{
currentfile tmpString readline pop
makerString anchorsearch
{
pop pop cleartomark exit
}
{
3 copy /PUT PDFMark5 pop 2 copy (\n) /PUT PDFMark5
} ifelse
}loop
end
}bd
%%EndResource
%%BeginResource: procset sep_ops 6.0 1
%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Support for Separations in Level 1, following the conventions of Tech Note 5044
userdict /sep_ops 50 dict dup begin put
/bdef {bind def} bind def
/xdef {exch def} bdef
/colorimagebuffer {
0 1 2 index length 1 sub {
dup 2 index exch get 255 exch sub 2 index 3 1 roll put
} for
} bdef
/addprocs {
[ 3 1 roll
/exec load
dup 3 1 roll
] cvx
} bdef
/L1? {
systemdict /languagelevel known {
systemdict /languagelevel get 2 lt
}{
true
} ifelse
} bdef
/colorexists {
statusdict /processcolors known {
statusdict /processcolors get exec
}{
/deviceinfo where {
pop deviceinfo /Colors known {
deviceinfo /Colors get
statusdict /processcolors {
deviceinfo /Colors known {
deviceinfo /Colors get
}{
1
} ifelse
} put
}{
1
} ifelse
}{
1
} ifelse
} ifelse
1 gt
} bdef
/colorplate colorexists { 0 } { 5 } ifelse def
/negativecolorplate false def
/setcmykcolor where {
pop
gsave
1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub
0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub
0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub
0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub
4 {4 copy} repeat
grestore
1 dict begin
/foureq {
4 index eq 8 1 roll
4 index eq 8 1 roll
4 index eq 8 1 roll
4 index eq 8 1 roll
pop pop pop pop and and and
} def
1 0 0 0 foureq {/colorplate 1 store} if
0 1 0 0 foureq {/colorplate 2 store} if
0 0 1 0 foureq {/colorplate 3 store} if
0 0 0 1 foureq {/colorplate 4 store} if
0 0 0 0 foureq {/colorplate 6 store} if
end
} if
0 systemdict /currenttransfer get exec exec
1 systemdict /currenttransfer get exec exec
2 copy
eq
{
/colorplate 6 store
pop
/negativecolorplate exch 0.5 lt store
}
{
gt /negativecolorplate exch store
}
ifelse
/findcmykcustomcolor where { pop }
{
/findcmykcustomcolor {
[ 6 1 roll ] readonly
} bdef
} ifelse
/setoverprint where {
pop
}{
/setoverprint {
pop
} bdef
} ifelse
/currentoverprint where {
pop
}{
/currentoverprint {
false
} bdef
} ifelse
/setcustomcolor where {
pop
}{
L1? {
/setcustomcolor {
exch
aload pop pop
4 { 4 index mul 4 1 roll } repeat
5 -1 roll pop
setcmykcolor
} bdef
}{
/setcustomcolor {
exch
[ exch /Separation exch dup 4 get exch /DeviceCMYK exch
0 4 getinterval
[ exch /dup load exch cvx {mul exch dup}
/forall load /pop load dup] cvx
] setcolorspace setcolor
} bdef
} ifelse
} ifelse
/ik 0 def
/iy 0 def
/im 0 def
/ic 0 def
/imagetint {
ic .3 mul
im .59 mul
iy .11 mul
ik add add add dup
1 gt {pop 1} if
} bdef
/setcmykcolor where {
pop
}{
/setcmykcolor {
/ik xdef /iy xdef /im xdef /ic xdef
imagetint
1 exch sub setgray
} bdef
} ifelse
/customcolorimage where {
pop
}{
L1? {
/customcolorimage{
gsave
colorexists {
aload pop pop
/ik xdef /iy xdef /im xdef /ic xdef
currentcolortransfer
{ik mul ik sub 1 add} addprocs
4 1 roll {iy mul iy sub 1 add} addprocs
4 1 roll {im mul im sub 1 add} addprocs
4 1 roll {ic mul ic sub 1 add} addprocs
4 1 roll setcolortransfer
/magentabuf 0 string def
/yellowbuf 0 string def
/blackbuf 0 string def
{
colorimagebuffer dup length magentabuf length ne
{
dup length dup dup
/magentabuf exch string def
/yellowbuf exch string def
/blackbuf exch string def
} if
dup magentabuf copy yellowbuf copy
blackbuf copy pop
} addprocs
{magentabuf}{yellowbuf}{blackbuf} true 4 colorimage
}{
aload pop pop /ik xdef /iy xdef /im xdef /ic xdef /tint
imagetint def
currenttransfer
{tint mul 1 tint sub add} addprocs settransfer image
} ifelse
grestore
} bdef
}{
/customcolorimage {
gsave
[ exch /Separation exch dup 4 get exch /DeviceCMYK exch
0 4 getinterval
[ exch /dup load exch cvx {mul exch dup}
/forall load /pop load dup] cvx
] setcolorspace
10 dict begin
/ImageType 1 def
/DataSource exch def
/ImageMatrix exch def
/BitsPerComponent exch def
/Height exch def
/Width exch def
/Decode [1 0] def
currentdict end
image
grestore
} bdef
} ifelse
} ifelse
/setseparationgray where {
pop
}{
L1? {
/setseparationgray { 1 exch sub dup dup dup setcmykcolor } bdef
}{
/setseparationgray {
[/Separation /All /DeviceCMYK {dup dup dup}] setcolorspace
1 exch sub setcolor
} bdef
} ifelse
} ifelse
/separationimage where { pop }
{
/separationimage {
gsave
1 1 1 1 (All)
findcmykcustomcolor customcolorimage
grestore
} bdef
} ifelse
currentdict readonly pop end
%%EndResource
%%BeginResource: procset pdflev15044 6.0 1
%%Copyright: Copyright 1987-2002 Adobe Systems Incorporated. All Rights Reserved.
%%Title: PDF operators, Level 1, with emulated separations (TN 5044)
/_ColorSep5044? true dd
/docinitialize {
PDF begin
/_defaulthalftone
/currenthalftone where
{ pop currenthalftone }
{ 4 dict dup begin
currentscreen
/SpotFunction exch def
/Angle exch def
/Frequency exch def
/HalftoneType 1 def
end }
ifelse
dd
/currentcolortransfer where
{ pop /_defaultcolortransfer [ currentcolortransfer ] dd }
{ /_defaultcolortransfer [currenttransfer dup dup dup] dd }
ifelse
end
} bd
/initialize {
/overprintstack null dd
sep_ops begin
50 dict begin
_defaulthalftone sethalftone
} bd
/terminate {
end end
} bd
/currentcolortransfer where
{ pop }
{
/setcolortransfer
{
settransfer pop pop pop
} bd
} ifelse
/pl {
transform
0.25 sub round 0.25 add exch
0.25 sub round 0.25 add exch
itransform
} bd
/m { _sa? { pl } if moveto } bd
/l { _sa? { pl } if lineto } bd
/c
{
_sa? {3 {pl 6 2 roll} repeat} if
curveto
} bd
/ri/pop ld
/setSA { /_sa? xdd } bd
/re
{
_sa?
{
8 dict begin
/:h exch def
/:w exch def
/:y exch def
/:x exch def
:x :y pl
/:ymin exch def /:xmin exch def
:x :w add :y :h add pl
/:ymax exch def /:xmax exch def
:xmin :ymin moveto
:xmax :ymin lineto
:xmax :ymax lineto
:xmin :ymax lineto
closepath
end
}
{
4 2 roll moveto
1 index 0 rlineto
0 exch rlineto
neg 0 rlineto
closepath
} ifelse
} bd
/q
{
gsave
[currentoverprint overprintstack] /overprintstack xdd
}
[/overprintstack] bld
/Q
{
overprintstack aload pop /overprintstack xdd setoverprint
grestore
}
[/overprintstack] bld
/AlmostFull?
{ dup maxlength exch length sub 2 le
} bd
/Expand
{ 1 index maxlength mul cvi dict
dup begin exch { def } forall end
} bd
/xput
{ 3 2 roll
dup 3 index known not
{ dup AlmostFull? { 1.5 Expand } if
} if
dup 4 2 roll put
} bd
/defineRes
{ _categories 1 index known not
{ /_categories _categories 2 index 10 dict xput store
} if
_categories exch 2 copy get 5 -1 roll 4 index xput put
} bd
/undefineRes {
null exch
defineRes
} bd
/findRes {
_categories exch get exch get
} bd
/L1setcolor {
aload length
dup 0 eq
{ pop .5 setgray }
{ dup 1 eq
{ pop setgray }
{ 3 eq
{ setrgbcolor }
{ setcmykcolor }
ifelse }
ifelse }
ifelse
} bind dd
/concattransferfuncs {
[ 3 1 roll /exec load exch /exec load ] cvx
} bd
/concatandsettransfer {
/_defaulttransfer load concattransferfuncs settransfer
} bd
/concatandsetcolortransfer {
colorplate 0 eq
{
_defaultcolortransfer aload pop
8 -1 roll 5 -1 roll concattransferfuncs 7 1 roll
6 -1 roll 4 -1 roll concattransferfuncs 5 1 roll
4 -1 roll 3 -1 roll concattransferfuncs 3 1 roll
concattransferfuncs
setcolortransfer
} if
colorplate 1 ge colorplate 4 le and
{
4 colorplate sub index 4 { exch pop } repeat
concatandsettransfer
} if
colorplate 5 ge
{
0 index 4 { exch pop } repeat
concatandsettransfer
} if
} bd
/tn5044sethalftone
{
begin
HalftoneType 5 eq
{ [/Default /Cyan /Magenta /Yellow /Black /Default /Default /Default]
colorplate get
here not {
/Default here not { currentdict } if
} if
}
{ currentdict }
ifelse
end
begin
/TransferFunction here
{
concatandsettransfer
currentdict dup length dict
begin
{
1 index /TransferFunction ne { def } { pop pop } ifelse
} forall
currentdict
end
}
{
currentdict
} ifelse
end
sethalftone
} bd
/paintimage
{
colorplate 0 eq
{
{ {currentfile cyanstr readstring pop}
{currentfile magentastr readstring pop}
{currentfile yellowstr readstring pop}
{currentfile blackstr readstring pop
currentfile graystr readstring pop pop}
}
{ {currentfile cyanstr readhexstring pop}
{currentfile magentastr readhexstring pop}
{currentfile yellowstr readhexstring pop}
{currentfile blackstr readhexstring pop
currentfile graystr readhexstring pop pop}
} ifelse
true 4 colorimage
}
{
3 dict begin
/binaryOK exch def
[
1 1 5 {
dup
/currentfile cvx
[ /cyanstr /magentastr /yellowstr /blackstr /graystr ]
3 -1 roll 1 sub get cvx
binaryOK { /readstring } { /readhexstring } ifelse cvx
/pop cvx
5 -1 roll
colorplate dup 5 gt { pop 5 } if
eq not { /pop cvx } if
} for
] cvx bind
end
[
colorplate 6 eq {
/pop cvx
negativecolorplate { 0 } { 1 } ifelse
} if
colorplate 4 le
{
1 /exch cvx /sub cvx
} if
colorplate 6 ne
{
systemdict /currenttransfer get exec
aload pop
} if
] cvx
gsave
systemdict /settransfer get exec
systemdict /image get exec
grestore
} ifelse
} bd
%%EndResource
%%BeginResource: procset pdftext 6.0 1
%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Text operators for PDF
PDF /PDFText 78 dict dup begin put
/docinitialize
{
/resourcestatus where {
pop
/CIDParams /ProcSet resourcestatus {
pop pop
false /CIDParams /ProcSet findresource /SetBuildCompatible get exec
} if
} if
PDF begin
PDFText /_pdfDefineIdentity-H known
{ PDFText /_pdfDefineIdentity-H get exec}
if
end
} bd
/initialize {
PDFText begin
} bd
/terminate { end } bd
Level2?
{
/_safeput
{
3 -1 roll load 3 1 roll put
}
bd
}
{
/_safeput
{
2 index load dup dup length exch maxlength ge
{ dup length 5 add dict copy
3 index xdd
}
{ pop }
ifelse
3 -1 roll load 3 1 roll put
}
bd
}
ifelse
/pdf_has_composefont? systemdict /composefont known def
/CopyFont {
{
1 index /FID ne 2 index /UniqueID ne and
{ def } { pop pop } ifelse
} forall
} bd
/Type0CopyFont
{
exch
dup length dict
begin
CopyFont
[
exch
FDepVector
{
dup /FontType get 0 eq
{
1 index Type0CopyFont
/_pdfType0 exch definefont
}
{
/_pdfBaseFont exch
2 index exec
}
ifelse
exch
}
forall
pop
]
/FDepVector exch def
currentdict
end
} bd
Level2? {currentglobal true setglobal} if
/cHexEncoding
[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
Level2? {setglobal} if
/modEnc {
/_enc xdd
/_icode 0 dd
counttomark 1 sub -1 0
{
index
dup type /nametype eq
{
_enc _icode 3 -1 roll put
_icode 1 add
}
if
/_icode xdd
} for
cleartomark
_enc
} bd
/trEnc {
/_enc xdd
255 -1 0 {
exch dup -1 eq
{ pop /.notdef }
{ Encoding exch get }
ifelse
_enc 3 1 roll put
} for
pop
_enc
} bd
/TE {
/_i xdd
StandardEncoding 256 array copy modEnc
_pdfEncodings exch _i exch put
} bd
/TZ
{
/_usePDFEncoding xdd
findfont
dup length 6 add dict
begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
/pdf_origFontName FontName def
/FontName exch def
currentdict /PaintType known
{ PaintType 2 eq {/PaintType 0 def} if }
if
_usePDFEncoding 0 ge
{
/Encoding _pdfEncodings _usePDFEncoding get def
pop
}
{
_usePDFEncoding -1 eq
{
counttomark 0 eq
{ pop }
{
Encoding 256 array copy
modEnc /Encoding exch def
}
ifelse
}
{
256 array
trEnc /Encoding exch def
}
ifelse
}
ifelse
pdf_EuroProcSet pdf_origFontName known
{
pdf_origFontName pdf_AddEuroGlyphProc
} if
Level2?
{
currentdict /pdf_origFontName undef
} if
FontName currentdict
end
definefont pop
}
bd
Level2?
{
/TZG
{
currentglobal true setglobal
2 index _pdfFontStatus
{
2 index findfont
false setglobal
3 index findfont
true setglobal
ne
{
2 index findfont dup rcheck
{
dup length dict begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
currentdict end
}
if
3 index exch definefont pop
}
if
} if
setglobal
TZ
} bd
}
{
/TZG {TZ} bd
} ifelse
Level2?
{
currentglobal false setglobal
userdict /pdftext_data 5 dict put
pdftext_data
begin
/saveStacks
{
pdftext_data
begin
/vmmode currentglobal def
false setglobal
count array astore /os exch def
end
countdictstack array dictstack pdftext_data exch /ds exch put
cleardictstack pdftext_data /dscount countdictstack put
pdftext_data /vmmode get setglobal
} bind def
/restoreStacks
{
pdftext_data /vmmode currentglobal put false setglobal
clear cleardictstack
pdftext_data /ds get dup
pdftext_data /dscount get 1 2 index length 1 sub
{ get begin dup } for
pop pop
pdftext_data /os get aload pop
pdftext_data /vmmode get setglobal
} bind def
/testForClonePrinterBug
{
currentglobal true setglobal
/undefinedCategory /Generic /Category findresource
dup length dict copy /Category defineresource pop
setglobal
pdftext_data /saveStacks get exec
pdftext_data /vmmode currentglobal put false setglobal
/undefined /undefinedCategory { resourcestatus } stopped
pdftext_data exch /bugFound exch put
pdftext_data /vmmode get setglobal
pdftext_data /restoreStacks get exec
pdftext_data /bugFound get
} bind def
end
setglobal
/pdf_resourcestatus
pdftext_data /testForClonePrinterBug get exec
{
{
pdftext_data /saveStacks get exec
pdftext_data /os get dup dup length 1 sub
dup 1 sub dup 0 lt { pop 0 } if
exch 1 exch { get exch dup } for
pop pop
{ resourcestatus }
stopped
{
clear cleardictstack pdftext_data /restoreStacks get exec
{ pop pop } stopped pop false
}
{
count array astore pdftext_data exch /results exch put
pdftext_data /restoreStacks get exec pop pop
pdftext_data /results get aload pop
}
ifelse
}
}
{ { resourcestatus } }
ifelse
bd
}
if
Level2?
{
/_pdfUndefineResource
{
currentglobal 3 1 roll
_pdf_FontDirectory 2 index 2 copy known
{undef}
{pop pop}
ifelse
1 index (pdf) exch _pdfConcatNames 1 index
1 index 1 _pdfConcatNames 1 index
5 index 1 _pdfConcatNames 1 index
4
{
2 copy pdf_resourcestatus
{
pop 2 lt
{2 copy findresource gcheck setglobal undefineresource}
{pop pop}
ifelse
}
{ pop pop}
ifelse
} repeat
setglobal
} bd
}
{
/_pdfUndefineResource { pop pop} bd
}
ifelse
Level2?
{
/_pdfFontStatus
{
currentglobal exch
/Font pdf_resourcestatus
{pop pop true}
{false}
ifelse
exch setglobal
} bd
}
{
/_pdfFontStatusString 50 string def
_pdfFontStatusString 0 (fonts/) putinterval
/_pdfFontStatus
{
FontDirectory 1 index known
{ pop true }
{
_pdfFontStatusString 6 42 getinterval
cvs length 6 add
_pdfFontStatusString exch 0 exch getinterval
{ status } stopped
{pop false}
{
{ pop pop pop pop true}
{ false }
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
Level2?
{
/_pdfCIDFontStatus
{
/CIDFont /Category pdf_resourcestatus
{
pop pop
/CIDFont pdf_resourcestatus
{pop pop true}
{false}
ifelse
}
{ pop false }
ifelse
} bd
}
if
/_pdfString100 100 string def
/_pdfComposeFontName
{
dup length 1 eq
{
0 get
1 index
type /nametype eq
{
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
2 index exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
exch pop
true
}
{
pop pop
false
}
ifelse
}
{
false
}
ifelse
dup {exch cvn exch} if
} bd
/_pdfConcatNames
{
exch
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
3 -1 roll exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
cvn
} bind def
/_pdfTextTempString 50 string def
/_pdfRegOrderingArray [(Adobe-Japan1) (Adobe-CNS1) (Adobe-Korea1) (Adobe-GB1)] def
/_pdf_CheckCIDSystemInfo
{
1 index _pdfTextTempString cvs
(Identity) anchorsearch
{
pop pop pop pop true
}
{
false
_pdfRegOrderingArray
{
2 index exch
anchorsearch
{ pop pop pop true exit}
{ pop }
ifelse
}
forall
exch pop
exch /CIDFont findresource
/CIDSystemInfo get
3 -1 roll /CMap findresource
/CIDSystemInfo get
exch
3 -1 roll
{
2 copy
/Supplement get
exch
dup type /dicttype eq
{/Supplement get}
{pop 0 }
ifelse
ge
}
{ true }
ifelse
{
dup /Registry get
2 index /Registry get eq
{
/Ordering get
exch /Ordering get
dup type /arraytype eq
{
1 index type /arraytype eq
{
true
1 index length 1 sub -1 0
{
dup 2 index exch get exch 3 index exch get ne
{ pop false exit}
if
} for
exch pop exch pop
}
{ pop pop false }
ifelse
}
{
eq
}
ifelse
}
{ pop pop false }
ifelse
}
{ pop pop false }
ifelse
}
ifelse
} bind def
pdf_has_composefont?
{
/_pdfComposeFont
{
2 copy _pdfComposeFontName not
{
2 index
}
if
(pdf) exch _pdfConcatNames
dup _pdfFontStatus
{ dup findfont 5 2 roll pop pop pop true}
{
4 1 roll
1 index /CMap pdf_resourcestatus
{
pop pop
true
}
{false}
ifelse
1 index true exch
{
_pdfCIDFontStatus not
{pop false exit}
if
}
forall
and
{
1 index 1 index 0 get _pdf_CheckCIDSystemInfo
{
3 -1 roll pop
2 index 3 1 roll
composefont true
}
{
pop pop exch pop false
}
ifelse
}
{
_pdfComposeFontName
{
dup _pdfFontStatus
{
exch pop
1 index exch
findfont definefont true
}
{
pop exch pop
false
}
ifelse
}
{
exch pop
false
}
ifelse
}
ifelse
{ true }
{
dup _pdfFontStatus
{ dup findfont true }
{ pop false }
ifelse
}
ifelse
}
ifelse
} bd
}
{
/_pdfComposeFont
{
_pdfComposeFontName not
{
dup
}
if
dup
_pdfFontStatus
{exch pop dup findfont true}
{
1 index
dup type /nametype eq
{pop}
{cvn}
ifelse
eq
{pop false}
{
dup _pdfFontStatus
{dup findfont true}
{pop false}
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
/_pdfStyleDicts 4 dict dup begin
/Adobe-Japan1 4 dict dup begin
Level2?
{
/Serif
/HeiseiMin-W3-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMin-W3}
{
/HeiseiMin-W3 _pdfCIDFontStatus
{/HeiseiMin-W3}
{/Ryumin-Light}
ifelse
}
ifelse
def
/SansSerif
/HeiseiKakuGo-W5-83pv-RKSJ-H _pdfFontStatus
{/HeiseiKakuGo-W5}
{
/HeiseiKakuGo-W5 _pdfCIDFontStatus
{/HeiseiKakuGo-W5}
{/GothicBBB-Medium}
ifelse
}
ifelse
def
/HeiseiMaruGo-W4-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMaruGo-W4}
{
/HeiseiMaruGo-W4 _pdfCIDFontStatus
{/HeiseiMaruGo-W4}
{
/Jun101-Light-RKSJ-H _pdfFontStatus
{ /Jun101-Light }
{ SansSerif }
ifelse
}
ifelse
}
ifelse
/RoundSansSerif exch def
/Default Serif def
}
{
/Serif /Ryumin-Light def
/SansSerif /GothicBBB-Medium def
{
(fonts/Jun101-Light-83pv-RKSJ-H) status
}stopped
{pop}{
{ pop pop pop pop /Jun101-Light }
{ SansSerif }
ifelse
/RoundSansSerif exch def
}ifelse
/Default Serif def
}
ifelse
end
def
/Adobe-Korea1 4 dict dup begin
/Serif /HYSMyeongJo-Medium def
/SansSerif /HYGoThic-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-GB1 4 dict dup begin
/Serif /STSong-Light def
/SansSerif /STHeiti-Regular def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-CNS1 4 dict dup begin
/Serif /MKai-Medium def
/SansSerif /MHei-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
end
def
/TZzero
{
/_wmode xdd
/_styleArr xdd
/_regOrdering xdd
3 copy
_pdfComposeFont
{
5 2 roll pop pop pop
}
{
[
0 1 _styleArr length 1 sub
{
_styleArr exch get
_pdfStyleDicts _regOrdering 2 copy known
{
get
exch 2 copy known not
{ pop /Default }
if
get
}
{
pop pop pop /Unknown
}
ifelse
}
for
]
exch pop
2 index 3 1 roll
_pdfComposeFont
{3 -1 roll pop}
{
findfont dup /FontName get exch
}
ifelse
}
ifelse
dup /WMode 2 copy known
{ get _wmode ne }
{ pop pop _wmode 1 eq}
ifelse
{
exch _wmode _pdfConcatNames
dup _pdfFontStatus
{ exch pop dup findfont false}
{ exch true }
ifelse
}
{
dup /FontType get 0 ne
}
ifelse
{
dup /FontType get 3 eq _wmode 1 eq and
{
_pdfVerticalRomanT3Font dup length 10 add dict copy
begin
/_basefont exch
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put dup 16#a5 /yen put dup 16#b4 /yen put}
if
def
FontName
currentdict
end
definefont
def
/Encoding _basefont /Encoding get def
/_fauxfont true def
}
{
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
FontType 0 ne
{
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put}
if
def
/_fauxfont true def
} if
} ifelse
/WMode _wmode def
dup dup /FontName exch def
currentdict
end
definefont pop
}
{
pop
}
ifelse
/_pdf_FontDirectory 3 1 roll _safeput
}
bd
Level2?
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
selectfont
} bd
}
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
exch findfont exch
dup type /arraytype eq
{makefont}
{scalefont}
ifelse
setfont
} bd
}
ifelse
/cshow where
{
pop /pdf_cshow /cshow load dd
/pdf_remove2 {pop pop} dd
}
{
/pdf_cshow {exch forall} dd
/pdf_remove2 {} dd
} ifelse
/pdf_xshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_yshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0 exch
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_xyshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
{_pdf_na _pdf_i 1 add get} stopped
{ pop pop pop}
{
_pdf_x _pdf_y moveto
rmoveto
}
ifelse
}
ifelse
_pdf_i 2 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdfl1xs {/_pdf_showproc /show load dd pdf_xshow} bd
/pdfl1ys {/_pdf_showproc /show load dd pdf_yshow} bd
/pdfl1xys {/_pdf_showproc /show load dd pdf_xyshow} bd
Level2? _ColorSep5044? not and
{
/pdfxs {{xshow} stopped {pdfl1xs} if} bd
/pdfys {{yshow} stopped {pdfl1ys} if} bd
/pdfxys {{xyshow} stopped {pdfl1xys} if} bd
}
{
/pdfxs /pdfl1xs load dd
/pdfys /pdfl1ys load dd
/pdfxys /pdfl1xys load dd
} ifelse
/pdf_charpath {false charpath} bd
/pdf_xcharpath {/_pdf_showproc /pdf_charpath load dd pdf_xshow} bd
/pdf_ycharpath {/_pdf_showproc /pdf_charpath load dd pdf_yshow} bd
/pdf_xycharpath {/_pdf_showproc /pdf_charpath load dd pdf_xyshow} bd
/pdf_strokepath
{
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 false charpath
currentpoint S moveto
} bind
exch pdf_cshow
} bd
/pdf_xstrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xshow} bd
/pdf_ystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_yshow} bd
/pdf_xystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xyshow} bd
Level2? {currentglobal true setglobal} if
/d0/setcharwidth ld
/nND {{/.notdef} repeat} bd
/T3Defs {
/BuildChar
{
1 index /Encoding get exch get
1 index /BuildGlyph get exec
}
def
/BuildGlyph {
exch begin
GlyphProcs exch get exec
end
} def
/_pdfT3Font true def
} bd
/_pdfBoldRomanWidthProc
{
stringwidth 1 index 0 ne { exch .03 add exch }if setcharwidth
0 0
} bd
/_pdfType0WidthProc
{
dup stringwidth 0 0 moveto
2 index true charpath pathbbox
0 -1
7 index 2 div .88
setcachedevice2
pop
0 0
} bd
/_pdfType0WMode1WidthProc
{
dup stringwidth
pop 2 div neg -0.88
2 copy
moveto
0 -1
5 -1 roll true charpath pathbbox
setcachedevice
} bd
/_pdfBoldBaseFont
11 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/Encoding cHexEncoding def
/_setwidthProc /_pdfBoldRomanWidthProc load def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
pdf_has_composefont?
{
/_pdfBoldBaseCIDFont
11 dict begin
/CIDFontType 1 def
/CIDFontName /_pdfBoldBaseCIDFont def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_setwidthProc /_pdfType0WidthProc load def
/_bcstr2 2 string def
/BuildGlyph
{
exch begin
_basefont setfont
_bcstr2 1 2 index 256 mod put
_bcstr2 0 3 -1 roll 256 idiv put
_bcstr2 dup _setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
/_pdfDefineIdentity-H
{
/Identity-H /CMap PDFText /pdf_resourcestatus get exec
{
pop pop
}
{
/CIDInit/ProcSet findresource begin 12 dict begin
begincmap
/CIDSystemInfo
3 dict begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
currentdict
end
def
/CMapName /Identity-H def
/CMapVersion 1 def
/CMapType 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
CMapName currentdict/CMap defineresource pop
end
end
} ifelse
} def
} if
/_pdfVerticalRomanT3Font
10 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_pdfType0WidthProc
moveto
show
end
}bd
currentdict
end
def
Level2? {setglobal} if
/MakeBoldFont
{
dup /ct_SyntheticBold known
{
dup length 3 add dict begin
CopyFont
/ct_StrokeWidth .03 0 FontMatrix idtransform pop def
/ct_SyntheticBold true def
currentdict
end
definefont
}
{
dup dup length 3 add dict
begin
CopyFont
/PaintType 2 def
/StrokeWidth .03 0 FontMatrix idtransform pop def
/dummybold currentdict
end
definefont
dup /FontType get dup 9 ge exch 11 le and
{
_pdfBoldBaseCIDFont
dup length 3 add dict copy begin
dup /CIDSystemInfo get /CIDSystemInfo exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefont exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefonto exch def
currentdict
end
/CIDFont defineresource
}
{
_pdfBoldBaseFont
dup length 3 add dict copy begin
/_basefont exch def
/_basefonto exch def
currentdict
end
definefont
}
ifelse
}
ifelse
} bd
/MakeBold {
1 index
_pdf_FontDirectory 2 index 2 copy known
{get}
{exch pop}
ifelse
findfont
dup
/FontType get 0 eq
{
dup /WMode known {dup /WMode get 1 eq }{false} ifelse
version length 4 ge
and
{version 0 4 getinterval cvi 2015 ge }
{true}
ifelse
{/_pdfType0WidthProc}
{/_pdfType0WMode1WidthProc}
ifelse
_pdfBoldBaseFont /_setwidthProc 3 -1 roll load put
{MakeBoldFont} Type0CopyFont definefont
}
{
dup /_fauxfont known not 1 index /SubstMaster known not and
{
_pdfBoldBaseFont /_setwidthProc /_pdfBoldRomanWidthProc load put
MakeBoldFont
}
{
2 index 2 index eq
{ exch pop }
{
dup length dict begin
CopyFont
currentdict
end
definefont
}
ifelse
}
ifelse
}
ifelse
pop pop
dup /dummybold ne
{/_pdf_FontDirectory exch dup _safeput }
{ pop }
ifelse
}bd
/MakeItalic {
_pdf_FontDirectory exch 2 copy known
{get}
{exch pop}
ifelse
dup findfont
dup /FontInfo 2 copy known
{
get
/ItalicAngle 2 copy known
{get 0 eq }
{ pop pop true}
ifelse
}
{ pop pop true}
ifelse
{
exch pop
dup /FontType get 0 eq Level2? not and
{ dup /FMapType get 6 eq }
{ false }
ifelse
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1Type0 }
{ _italMtxType0 }
ifelse
}
{ pop pop _italMtxType0 }
ifelse
}
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1 }
{ _italMtx }
ifelse
}
{ pop pop _italMtx }
ifelse
}
ifelse
makefont
dup /FontType get 42 eq Level2? not or
{
dup length dict begin
CopyFont
currentdict
end
}
if
1 index exch
definefont pop
/_pdf_FontDirectory exch dup _safeput
}
{
pop
2 copy ne
{
/_pdf_FontDirectory 3 1 roll _safeput
}
{ pop pop }
ifelse
}
ifelse
}bd
/MakeBoldItalic {
/dummybold exch
MakeBold
/dummybold
MakeItalic
}bd
Level2?
{
/pdf_CopyDict
{1 index length add dict copy}
def
}
{
/pdf_CopyDict
{
1 index length add dict
1 index wcheck
{ copy }
{ begin
{def} forall
currentdict
end
}
ifelse
}
def
}
ifelse
/pdf_AddEuroGlyphProc
{
currentdict /CharStrings known
{
CharStrings /Euro known not
{
dup
/CharStrings
CharStrings 1 pdf_CopyDict
begin
/Euro pdf_EuroProcSet 4 -1 roll get def
currentdict
end
def
/pdf_PSBuildGlyph /pdf_PSBuildGlyph load def
/pdf_PathOps /pdf_PathOps load def
/Symbol eq Encoding 160 get /.notdef eq and
{
/Encoding Encoding dup length array copy
dup 160 /Euro put def
}
if
}
{ pop
}
ifelse
}
{ pop
}
ifelse
}
def
Level2? {currentglobal true setglobal} if
/pdf_PathOps 4 dict dup begin
/m {moveto} def
/l {lineto} def
/c {curveto} def
/cp {closepath} def
end
def
/pdf_PSBuildGlyph
{
gsave
8 -1 roll pop
7 1 roll
currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
dup 9 1 roll
{
currentdict /StrokeWidth 2 copy known
{
get 2 div
5 1 roll
4 -1 roll 4 index sub
4 1 roll
3 -1 roll 4 index sub
3 1 roll
exch 4 index add exch
4 index add
5 -1 roll pop
}
{
pop pop
}
ifelse
}
if
setcachedevice
pdf_PathOps begin
exec
end
{
currentdict /StrokeWidth 2 copy known
{ get }
{ pop pop 0 }
ifelse
setlinewidth stroke
}
{
fill
}
ifelse
grestore
} def
/pdf_EuroProcSet 13 dict def
pdf_EuroProcSet
begin
/Courier-Bold
{
600 0 6 -12 585 612
{
385 274 m
180 274 l
179 283 179 293 179 303 c
179 310 179 316 180 323 c
398 323 l
423 404 l
197 404 l
219 477 273 520 357 520 c
409 520 466 490 487 454 c
487 389 l
579 389 l
579 612 l
487 612 l
487 560 l
449 595 394 612 349 612 c
222 612 130 529 98 404 c
31 404 l
6 323 l
86 323 l
86 304 l
86 294 86 284 87 274 c
31 274 l
6 193 l
99 193 l
129 77 211 -12 359 -12 c
398 -12 509 8 585 77 c
529 145 l
497 123 436 80 356 80 c
285 80 227 122 198 193 c
360 193 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-BoldOblique /Courier-Bold load def
/Courier
{
600 0 17 -12 578 584
{
17 204 m
97 204 l
126 81 214 -12 361 -12 c
440 -12 517 17 578 62 c
554 109 l
501 70 434 43 366 43 c
266 43 184 101 154 204 c
380 204 l
400 259 l
144 259 l
144 270 143 281 143 292 c
143 299 143 307 144 314 c
418 314 l
438 369 l
153 369 l
177 464 249 529 345 529 c
415 529 484 503 522 463 c
522 391 l
576 391 l
576 584 l
522 584 l
522 531 l
473 566 420 584 348 584 c
216 584 122 490 95 369 c
37 369 l
17 314 l
87 314 l
87 297 l
87 284 88 272 89 259 c
37 259 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-Oblique /Courier load def
/Helvetica
{
556 0 24 -19 541 703
{
541 628 m
510 669 442 703 354 703 c
201 703 117 607 101 444 c
50 444 l
25 372 l
97 372 l
97 301 l
49 301 l
24 229 l
103 229 l
124 67 209 -19 350 -19 c
435 -19 501 25 509 32 c
509 131 l
492 105 417 60 343 60 c
267 60 204 127 197 229 c
406 229 l
430 301 l
191 301 l
191 372 l
455 372 l
479 444 l
194 444 l
201 531 245 624 348 624 c
433 624 484 583 509 534 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-Oblique /Helvetica load def
/Helvetica-Bold
{
556 0 12 -19 563 710
{
563 621 m
537 659 463 710 363 710 c
216 710 125 620 101 462 c
51 462 l
12 367 l
92 367 l
92 346 l
92 337 93 328 93 319 c
52 319 l
12 224 l
102 224 l
131 58 228 -19 363 -19 c
417 -19 471 -12 517 18 c
517 146 l
481 115 426 93 363 93 c
283 93 254 166 246 224 c
398 224 l
438 319 l
236 319 l
236 367 l
457 367 l
497 462 l
244 462 l
259 552 298 598 363 598 c
425 598 464 570 486 547 c
507 526 513 517 517 509 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-BoldOblique /Helvetica-Bold load def
/Symbol
{
750 0 20 -12 714 685
{
714 581 m
650 645 560 685 465 685 c
304 685 165 580 128 432 c
50 432 l
20 369 l
116 369 l
115 356 115 347 115 337 c
115 328 115 319 116 306 c
50 306 l
20 243 l
128 243 l
165 97 300 -12 465 -12 c
560 -12 635 25 685 65 c
685 155 l
633 91 551 51 465 51 c
340 51 238 131 199 243 c
555 243 l
585 306 l
184 306 l
183 317 182 326 182 336 c
182 346 183 356 184 369 c
614 369 l 644 432 l
199 432 l
233 540 340 622 465 622 c
555 622 636 580 685 520 c
cp
750 0 m
}
pdf_PSBuildGlyph
} def
/Times-Bold
{
500 0 16 -14 478 700
{
367 308 m
224 308 l
224 368 l
375 368 l
380 414 l
225 414 l
230 589 257 653 315 653 c
402 653 431 521 444 457 c
473 457 l
473 698 l
444 697 l
441 679 437 662 418 662 c
393 662 365 700 310 700 c
211 700 97 597 73 414 c
21 414 l
16 368 l
69 368 l
69 359 68 350 68 341 c
68 330 68 319 69 308 c
21 308 l
16 262 l
73 262 l
91 119 161 -14 301 -14 c
380 -14 443 50 478 116 c
448 136 l
415 84 382 40 323 40 c
262 40 231 77 225 262 c
362 262 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-BoldItalic
{
500 0 9 -20 542 686
{
542 686 m
518 686 l
513 673 507 660 495 660 c
475 660 457 683 384 683 c
285 683 170 584 122 430 c
58 430 l
34 369 l
105 369 l
101 354 92 328 90 312 c
34 312 l
9 251 l
86 251 l
85 238 84 223 84 207 c
84 112 117 -14 272 -14 c
326 -14 349 9 381 9 c
393 9 393 -10 394 -20 c
420 -20 l
461 148 l
429 148 l
416 109 362 15 292 15 c
227 15 197 55 197 128 c
197 162 204 203 216 251 c
378 251 l
402 312 l
227 312 l
229 325 236 356 241 369 c
425 369 l
450 430 l
255 430 l
257 435 264 458 274 488 c
298 561 337 654 394 654 c
437 654 484 621 484 530 c
484 516 l
516 516 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Italic
{
500 0 23 -10 595 692
{
399 317 m
196 317 l
199 340 203 363 209 386 c
429 386 l
444 424 l
219 424 l
246 514 307 648 418 648 c
448 648 471 638 492 616 c
529 576 524 529 527 479 c
549 475 l
595 687 l
570 687 l
562 674 558 664 542 664 c
518 664 474 692 423 692 c
275 692 162 551 116 424 c
67 424 l
53 386 l
104 386 l
98 363 93 340 90 317 c
37 317 l
23 279 l
86 279 l
85 266 85 253 85 240 c
85 118 137 -10 277 -10 c
370 -10 436 58 488 128 c
466 149 l
424 101 375 48 307 48 c
212 48 190 160 190 234 c
190 249 191 264 192 279 c
384 279 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Roman
{
500 0 10 -12 484 692
{
347 298 m
171 298 l
170 310 170 322 170 335 c
170 362 l
362 362 l
374 403 l
172 403 l
184 580 244 642 308 642 c
380 642 434 574 457 457 c
481 462 l
474 691 l
449 691 l
433 670 429 657 410 657 c
394 657 360 692 299 692 c
204 692 94 604 73 403 c
22 403 l
10 362 l
70 362 l
69 352 69 341 69 330 c
69 319 69 308 70 298 c
22 298 l
10 257 l
73 257 l
97 57 216 -12 295 -12 c
364 -12 427 25 484 123 c
458 142 l
425 101 384 37 316 37 c
256 37 189 84 173 257 c
335 257 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
end
Level2? {setglobal} if
currentdict readonly pop end
%%EndResource
PDFText begin
[39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
/guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
/hungarumlaut/ogonek/caron
0 TE
[1/dotlessi/caron 39/quotesingle 96/grave
127/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft
/quotedblright/bullet/endash/emdash/tilde/trademark/scaron
/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus
/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla
/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters
/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute
/ucircumflex/udieresis/yacute/thorn/ydieresis
1 TE
end
%%BeginResource: procset pdfasc.prc 6.0 1
%%Copyright: Copyright 1992-2003 Adobe Systems Incorporated. All Rights Reserved.
/ASR {
13 dict begin
/mirV? exch def
/mirH? exch def
/center? exch def
/autorotate? exch def
/angle exch def
/shrink exch def
/Pury exch def
/Purx exch def
/Plly exch def
/Pllx exch def
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury 0 eq Durx 0 eq and Dlly 0 eq Dllx 0 eq and and
{ shrink 0 gt { GClipBBox } { GPageBBox } ifelse }
{ ITransDBBox }
ifelse
/PHt Pury Plly sub def
/PW Purx Pllx sub def
/DHt Dury Dlly sub def
/DW Durx Dllx sub def
angle 90 eq angle 270 eq or
{
PHt /PHt PW def /PW exch def
} if
autorotate? PHt PW ne and DHt DW ne and
{
DHt DW ge
PHt PW ge
ne
{ /angle angle 90 add def
PHt /PHt PW def /PW exch def
}
if
} if
angle 0 ne
{
/angle angle 360 mod def
angle rotate
angle 90 eq
{ 0 DW neg translate }
if
angle 180 eq
{ DW neg DHt neg translate }
if
angle 270 eq
{ DHt neg 0 translate }
if
} if
center?
{
ITransBBox
Durx Dllx add 2 div Dury Dlly add 2 div
Purx Pllx add -2 div Pury Plly add -2 div
3 -1 roll add exch
3 -1 roll add exch
translate
}
{
ITransBBox
angle 0 eq
{Dllx Pllx sub Dury Pury sub}
if
angle 90 eq
{Durx Purx sub Dury Pury sub}
if
angle 180 eq
{Durx Purx sub Dlly Plly sub}
if
angle 270 eq
{Dllx Pllx sub Dlly Plly sub}
if
translate
}
ifelse
mirH? mirV? or
{
ITransBBox
mirH?
{
-1 1 scale
Durx Dllx add neg 0 translate
} if
mirV?
{
1 -1 scale
0 Dury Dlly add neg translate
} if
} if
shrink 0 ne
{
ITransBBox
Dury Dlly sub Pury Plly sub div
Durx Dllx sub Purx Pllx sub div
2 copy gt { exch } if pop
shrink 1 eq
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{
shrink 2 eq 1 index 1.0 lt and
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{ pop }
ifelse
}
ifelse
} if
end
} [/autorotate? /shrink? /mirH? /mirV? /angle /Pury /Purx /Plly /Pllx /Durx /Dury /Dllx /Dlly /PW /PHt /DW /DHt
/Devurx /Devury /Devllx /Devlly /pdfHt /pdfW]
bld
/GClipBBox
{
gsave newpath clippath pathbbox newpath grestore
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
ITransDBBox
} [/Durx /Dury /Dllx /Dlly]
bld
/GPageBBox
{
{
currentpagedevice /PageSize get aload pop
/Devury exch def /Devurx exch def
/Devllx 0 def /Devlly 0 def
ITransBBox
}
stopped
{ GClipBBox }
if
} [/Devurx /Devury /Devllx /Devlly ]
bld
/ITransDBBox
{
Durx Dury transform matrix defaultmatrix itransform
/Devury exch def
/Devurx exch def
Dllx Dlly transform matrix defaultmatrix itransform
/Devlly exch def
/Devllx exch def
Devury Devlly lt {/Devlly Devury /Devury Devlly def def} if
Devurx Devllx lt {/Devllx Devurx /Devurx Devllx def def} if
} [/Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
/ITransBBox
{
/um matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix def
Devllx Devlly um itransform
Devurx Devury um itransform
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury Dlly lt {/Dlly Dury /Dury Dlly def def} if
Durx Dllx lt {/Dllx Durx /Durx Dllx def def} if
} [ /um /Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
%%EndResource
currentdict readonly pop
end end
/currentpacking where {pop setpacking}if
PDFVars/DocInitAll{[PDF PDFText]{/docinitialize get exec}forall }put
PDFVars/InitAll{[PDF PDFText]{/initialize get exec}forall initgs}put
PDFVars/TermAll{[PDFText PDF]{/terminate get exec}forall}put
PDFVars begin PDF begin
PDFVars/DocInitAll get exec PDFVars/InitAll get exec
%%IncludeResource Arial-BoldMT
[/N20/Arial-BoldMT 1 TZ
[/NamespacePush PDFMark5
[/_objdef {Metadata_In_EPS} /type /stream /OBJ PDFMark5
[{Metadata_In_EPS} 1242 (% &end XMP packet& %) ReadByPDFMark5
<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
<?adobe-xap-filters esc="CRLF"?>
<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
<rdf:Description rdf:about='uuid:f5cd7338-5175-4eb3-af88-8b6e360476ab' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='Acrobat Distiller 6.0 (Windows)'></rdf:Description>
<rdf:Description rdf:about='uuid:f5cd7338-5175-4eb3-af88-8b6e360476ab' xmlns:xap='http://ns.adobe.com/xap/1.0/' xap:ModifyDate='2006-11-07T13:01:18-05:00' xap:CreateDate='2006-11-07T13:00:43-05:00' xap:CreatorTool='Acrobat PDFMaker 6.0 for PowerPoint' xap:MetadataDate='2006-11-07T13:01:18-05:00'></rdf:Description>
<rdf:Description rdf:about='uuid:f5cd7338-5175-4eb3-af88-8b6e360476ab' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:e394ec52-a537-4127-92ff-da24cda49806'/>
<rdf:Description rdf:about='uuid:f5cd7338-5175-4eb3-af88-8b6e360476ab' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Slide 1</rdf:li></rdf:Alt></dc:title><dc:creator><rdf:Seq><rdf:li>Wen Yu</rdf:li></rdf:Seq></dc:creator></rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end='w'?>
% &end XMP packet& %
[{Metadata_In_EPS} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT PDFMark5
[/Document 1 dict begin /Metadata {Metadata_In_EPS} def currentdict end /BDC PDFMark5
[/NamespacePop PDFMark5
PDFVars/TermAll get exec end end
%%EndSetup
PDFVars begin PDF begin PDFVars/InitAll get exec
29 62 718 537 rectclip
[ 0 -1 1 0 -33 628 ] concat
/N18 [/DeviceRGB] /ColorSpace defineRes pop
29.0 62.0 537.0 718.0 re
W
n
q
n
567.47998 61.011002 -540.0 719.999985 re
eoclip
n
q
0.0 10.08 -10.02 0.0 37.5 61.01054 cm
1.0 sg
q
n
0.0 0.0 1.0 1.0 re
10 dict dup begin
/ImageType 1 def
/Width 42 def
/Height 42 def
/ImageMatrix [42.0 0.0 0.0 -41.999996 0.0 41.999996] def
/BitsPerComponent 1 def
/Decode [0.0 1.0 ] def
/DataSource {currentfile userdict /CIstring get readhexstring pop} bind def
end
42 42 false 4 -1 roll dup /ImageMatrix get exch /DataSource get
userdict /CIstring 6 string put
imagemask
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
Q
Q
Q
2.25 w
8.0 M
1 J
n
243.479996 481.011017 77.999985 155.999969 re
0.0 sg
S
10.0 M
1 j
n
213.479996 253.011017 m
213.479996 206.631012 249.720001 169.011002 294.47998 169.011002 c
339.23999 169.011002 375.47998 206.631012 375.47998 253.011017 c
375.47998 299.391022 339.23999 337.011017 294.47998 337.011017 c
249.720001 337.011017 213.479996 299.391022 213.479996 253.011017 c
h
S
n
242.339996 319.131012 m
259.73999 475.551025 l
261.959991 475.311035 l
244.619995 318.891022 l
h
257.399994 474.651031 m
261.47998 481.011017 l
264.059998 473.93103 l
f
n
304.619995 481.131012 m
321.899994 336.711029 l
319.679993 336.471008 l
302.339996 480.891022 l
h
324.0 338.091003 m
321.47998 331.011017 l
317.339996 337.311005 l
f
0.0 sg
288.600006 204.050491 m
/N20 [0.0 18.0 -18.0 0.0 0.0 0.0] Tf
(Embedding)
[11.997133 15.993135 10.988863 9.998995 10.988863 10.988863 4.994998 10.988863 10.988863 ] pdfys
321.120636 203.991165 m
(Application)
[12.996002 10.997864 10.997864 5.003998 5.003998 10.007996 10.007996 5.993866 5.003998 10.997864 10.997864
] pdfys
288.600006 536.031738 m
(PMGT)
[11.995335 14.983067 13.993198 10.987064 ] pdfys
246.600647 378.051117 m
(Input)
[4.987798 10.981665 10.981665 10.981665 5.977666 ] pdfys
336.600647 370.49115 m
(Output)
[13.991398 10.985264 5.981266 10.985264 10.985264 5.981266 ] pdfys
n
[/EMC PDFMark5
PDFVars/TermAll get exec end end
%%PageTrailer
%%Trailer
%%DocumentNeededResources:
%%+ font Arial-BoldMT
%%EOF
File added
File added
Source diff could not be displayed: it is too large. Options to address this: view the blob.
\documentclass[12pt,titlepage]{article}
\include{Preamble}
\author{Wen Yu}
\begin{document}
\begin{titlepage}
% Fonts for the title page
\newcommand{\texttl}{\textsf} %font for the title (Emil's version is \textsf)
\newcommand{\textau}{\textsf} %font for the authors, date, etc. (Emils version is \textsc)
\begin{center}
\HRule \\[0.4cm]
{ \huge \bfseries \texttl{Summary of Validation Testing for a Parallel Mesh Generation Toolbox}}\\[0.4cm]
\HRule \\[2cm]
\textau{\LARGE Wen Yu}\\[2cm]
\textau{\LARGE {September 2008}}
\vfill
% Bottom of the page
%\includegraphics[width=0.27\textwidth]{logo.pdf}
\hfill
\textau{\LARGE
\raisebox{2pt}{\begin{tabular}[b]{r}
\raisebox{8pt}{Computing and Software} \\
McMaster University \end{tabular}}
}
\end{center}
\end{titlepage}
\tableofcontents
%to get cross-references correct
\refstepcounter{funnum} \label{RefiningMesh}
\refstepcounter{funnum} \label{CoarseningMesh}
\refstepcounter{funnum} \label{RefiningOrCoarsening}
\refstepcounter{funnum} \label{MeshType}
\refstepcounter{funnum} \label{ElmShape}
\refstepcounter{funnum} \label{DomainDimension}
\refstepcounter{funnum} \label{Conformal}
\refstepcounter{funnum} \label{InputDefinition}
\refstepcounter{funnum} \label{RCInstruction}
\refstepcounter{funnum} \label{OutputStorage}
\refstepcounter{funnum} \label{VertexUniqueID}
\refstepcounter{funnum} \label{ElmUniqueID}
\refstepcounter{funnum} \label{ElmTopology}
\refstepcounter{funnum} \label{OutElmOrder}
\refstepcounter{funnum} \label{OutVertexOrder}
\refstepcounter{funnum} \label{Help}
\refstepcounter{nfnum} \label{Performance}
\refstepcounter{nfnum} \label{Precision}
\refstepcounter{nfnum} \label{Exception}
\refstepcounter{nfnum} \label{Portability}
\refstepcounter{nfnum} \label{LookAndFeel}
\refstepcounter{nfnum} \label{Usability}
\refstepcounter{nfnum} \label{Maintainability}
\refstepcounter{mnum} \label{mMemory}
\refstepcounter{mnum} \label{mFileRW}
\refstepcounter{mnum} \label{mKeyboard}
\refstepcounter{mnum} \label{mScreen}
\refstepcounter{mnum} \label{mInput}
\refstepcounter{mnum} \label{mOutput}
\refstepcounter{mnum} \label{mService}
\refstepcounter{mnum} \label{mVertex}
\refstepcounter{mnum} \label{mEdge}
\refstepcounter{mnum} \label{mCell}
\refstepcounter{mnum} \label{mMesh}
\refstepcounter{mnum} \label{mRefining}
\refstepcounter{mnum} \label{mCoarsening}
\newpage
\section{Introduction \label{AtestSecIntro}}
This section gives an overview of the Testing Summary for a Parallel Mesh Generation Toolbox (PMGT). First, the purpose of the document is provided. Second, the scope of the testing is identified. Third, the organization of the document is summarized.
\subsection{Purpose of the Document}
This document specifies validation tests for a PMGT. The results of the tests and analysis are also provided. The intended audience is testers who are going to test the system and developers who are going to maintain the software. Note that test document is dynamic in the sense that it should be updated when the development of the system proceeds.
\subsection{Scope of the Testing }
In general, the purpose of testing is to help produce quality software. Due to limits on the time available for testing, the scope of the testing of PMGT is restricted to test the most important test factors. Like other scientific computing software, correctness and efficiency are considered to be the two most important test factors for PMGT. For efficiency testing, the focus is on execution time rather than on storage.
\subsection{Organization of the Document}
Section \ref{AtestSecIntro} (this section) is an introduction to the report. Section \ref{AtestSecTest} shows what is going to be tested and the coverage of the testing, with respect to the software requirements and the software design. Section \ref{AtestSecResult} gives the result of the testing and the analysis.
\section{Testing PMGT \label{AtestSecTest}}
Test cases are listed in Section \ref{AtestSecTestcases}. The detailed information for these test cases can be found in Section \ref{AtestSecResult}. The traceability matrix in Section \ref{AmatrixR} shows the association between test cases and the functional and nonfunctional requirements that are specified in the Software Requirements Specification (SRS) document. Similarly, a traceability matrix for test cases and the leaf modules as introduced in the Module Guide (MG) as shown in Section \ref{AmatrixM}. Tracking these relations is useful for developing and maintaining the software.
\subsection{Test Cases \label{AtestSecTestcases}}
The correctness validation test is designed for verifying the functional requirements RefiningMesh (\fref{RefiningMesh}), CoarseningMesh (\fref{CoarseningMesh}), ElmShape (\fref{ElmShape}), and Conformal (\fref{Conformal}). Other requirements for correctness are trivial and are satisfied obviously. For example, since the vertices are stored in an array, the OutVertexOrder (\fref{OutVertexOrder}) requirement is met by outputting the vertices in the order as the order of them in the array. The tests are against above requirements are automated. The automated validation tests requirements (ACVTRs) are listed in Section \ref{ACVTRs}. Since the output mesh also can also be displayed on screen, it can be checked manually. The visual correctness validation tests requirements (VCVTRs) are listed in Section \ref{VCVTRs}. The test cases are in Section \ref{TCs}.
\subsubsection{Automated Correctness Validation Tests Requirements \label{ACVTRs}}
A list of ACVTRs follows. All test cases should pass these tests. Some test cases relate to data definitions defined in the SRS. In these cases the related data definition defined is shown as D$x$, where $x$ is the number of the associated data definition given in the SRS.
\begin{itemize}
\item The area of each element is greater than zero (referring to \textbf{D5}). %hard coded reference
\item The boundary of the mesh is closed. (referring to \textbf{D15}). %hard coded reference
\item The mesh is conformal (referring to \textbf{D16}). %hard coded reference
\item The intersection of any two elements is empty (referring to \textbf{D17}). %hard coded reference
\item The input mesh and output mesh {\em CoveringUp} each other (referring to \textbf{D19}). %hard coded reference
\item The length of each edge is greater than zero. (This is required by the definition of a mesh, which is defined in the SRS.)
\item The vertices of each element are listed in a counterclockwise order. (The counterclockwise order of the vertices for each element is not necessary for implementing PMGT. However, it is adopted by most meshing and FEA software. PMGT uses this convention.)
\item The output mesh conforms to the Euler Equation. (This requirement is not documented in the SRS. However, any mesh should implicitly satisfy the equation $nc+nv-ne=1$, where $nc$ is the number of cells, $nv$ is the number of vertices, and $ne$ is the number of edges.)
\end{itemize}
\subsubsection{Visual Correctness Validation Tests Requirements\label{VCVTRs}}
The output meshes should also be visually checked to ensure that the following VCVTRs are met.
\begin{itemize}
\item No vertex is outside of the input domain.
\item No vertex is inside of a cell.
\item No dangling points or edges are present.
\item All cells are connected.
\item The mesh is conformal.
\end{itemize}
Some of the VCVTRs overlap with the ACVTRs. This redundancy provides increased confidence in case one testing method fails to catch an error.
\subsubsection{Test Cases\label{TCs}}
The test cases developed involve testing meshes against the above requirements. In each test case, except the last one, the input mesh is refined and then coarsened. Two algorithms for refining are used. One algorithm is called {\em Split}. It splits one cell into three by adding a point in the centroid of the triangle and connecting the added point to the three original vertices. The other algorithm is simply call {\em Refine}. It refines the original mesh by longest edge bisection.
The name of each test case includes three parts. For example, test case $AxxCBN$ means that the test uses $Axx$ algorithm for refining, where $Axx$ equals $Split$ or $Refine$. The letter $C$ indicates that coarsening is performed. If the $C$ is missing, the input mesh is not coarsened. $B$ is the number of refinements before coarsening. If $B$ is S, the mesh is refined once and then coarsen once. If the $B$ is M, the mesh is refined multiple time before coarsening. $N$ is a number. If the $N$ is omitted, it means only one of this kind of test performed. Otherwise the same test procedures is used several times on different input meshes. The reason for using the same procedure is that the topology of the output meshes may differ for different input meshes.
\begin{itemize}
\item Test Case {\em SplitCS} (\refstepcounter{casenum}\cthecasenum \label{ATCscs}): This test case tests the correctness of PMGT. The input mesh is shown in Figure \ref{input1}. The refining and coarsening criterion is that the cells intersected with the vertical line, $x=0.6$, are Split once, then the cells of the new mesh that intersect with the vertical line are coarsened once. When the splitting and coarsening is done, the vertical line is moved to the right one unit ($x=x+1.0$), and another Splitting and coarsening is performed. This procedure is repeated until no cells intersect with the vertical line.
\item Test Case {\em RefineCS1} (\refstepcounter{casenum}\cthecasenum \label{ATCrcs1}): This test case tests the correctness of PMGT. The input mesh is the same as \cref{ATCscs}, which is shown in Figure \ref{input1}. There is a vertical line at $x = 0.6$. The refining and coarsening criterion is that the cells that intersect with the vertical line are refined once, then the cells of the new mesh that intersect with the vertical line are coarsened once. When the refining and coarsening are done, the vertical line is moved to the right one unit, and another refining and coarsening is performed. This procedure is repeated until no cells intersect with the vertical line.
\item Test Case {\em RefineCS2} (\refstepcounter{casenum}\cthecasenum \label{ATCrcs2}): This test case tests the correctness of PMGT. The refining and coarsening criterion, vertical line function, and the test procedure are the same as test case \cref{ATCrcs1}. However, the input mesh is different. The input mesh is showed in Figure \ref{input2}.
\item Test Case {\em RefineCM} (\refstepcounter{casenum}\cthecasenum \label{ATCrcm}): This test case tests the correctness of PMGT. The input mesh is shown in Figure \ref{input3}. There is a vertical line at $x = 0.5$. The refining and coarsening criterion is the size of the cells. The size of the cell is measured by the length of the longest edge of the cell. The cells that intersect with the vertical line are refined until the criterion is met. When the refining is done, the vertical line is moved to the right $0.6$ unit ($x=x+0.6$), and another refinement is performed. After five refinements are done, the cells to be left of the vertical line by up to 2 units are coarsened, until the coarsening criterion is met. The refining and coarsening are stopped when the vertical line moves to a position outside of the domain.
\item Test Case {\em RefineM} (\refstepcounter{casenum}\cthecasenum \label{ATCrm}): This test case tests the correctness of PMGT. The input mesh is shown in Figure \ref{input4}. There is an arc with radius of 0.7 unit going through the mesh. Cells that intersect with the arc are refined until the required number of refinements has been reached.
\item Test Case {\em Split} (\refstepcounter{casenum}\cthecasenum \label{ATCss}): This test case tests both the correctness and speed of PMGT. The input mesh is shown in Figure \ref{input5}. This test simply splits all cells of the mesh 4 times. It is done in both the serial version and the parallel version with different number of processors. The execution time of setting the cells to be refined and splitting the cells is measured.
\end{itemize}
\subsection{Traceability Matrix for SRS \label{AmatrixR}}
In the traceability matrix for software requirements, if a test case tests the functionality of a software requirement, there will be a check mark on the cell for the corresponding test case. In each row of the traceability matrix for software requirements (Table \ref{AtestTMr}), if the requirement in that row defines the correctness or the speed of the software, one or more cells in this row are checked. Otherwise, all cells in the row are empty. Table \ref{AtestTMr} shows that the test cases developed in Section \ref{AtestSecTestcases} assist with validating the correctness and speed of the software. The detailed information for each functional and nonfunctional requirements can be found in the SRS document.
The names of the requirements and their corresponding numbers are listed below for convenience.
\begin{description}
\item[\fref{RefiningMesh}:] RefiningMesh
\item[\fref{CoarseningMesh}:] CoarseningMesh
\item[\fref{RefiningOrCoarsening}:] RefiningOrCoarsening
\item[\fref{MeshType}:] MeshType
\item[\fref{ElmShape}:] ElmShape
\item[\fref{DomainDimension}:] DomainDimension
\item[\fref{Conformal}:] Conformal
\item[\fref{InputDefinition}:] InputDefinition
\item[\fref{RCInstruction}:] RCInstruction
\item[\fref{OutputStorage}:] OutputStorage
\item[\fref{VertexUniqueID}:] VertexUniqueID
\item[\fref{ElmUniqueID}:] ElmUniqueID
\item[\fref{ElmTopology}:] ElmTopology
\item[\fref{OutElmOrder}:] OutElmOrder
\item[\fref{OutVertexOrder}:] OutVertexOrder
\item[\fref{Help}:] Help
\item[\nref{Performance}:] Performance
\item[\nref{Precision}:] Precision
\item[\nref{Exception}:] Exception
\item[\nref{Portability}:] Portability
\item[\nref{LookAndFeel}:] LookAndFeel
\item[\nref{Usability}:] Usability
\item[\nref{Maintainability}:] Maintainability
\end{description}
\begin{table}[ht]
\centering
\begin{tabular}{|p{0.06\textwidth}|p{0.06\textwidth}|p{0.06\textwidth}|p{0.06\textwidth}|p{0.06\textwidth}|p{0.06\textwidth}|p{0.06\textwidth}|}
\hline
&\cref{ATCscs} & \cref{ATCrcs1} & \cref{ATCrcs2} & \cref{ATCrcm} & \cref{ATCrm}&\cref{ATCss}\\
\hline\hline
\fref{RefiningMesh}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark\\\hline%f2
\fref{CoarseningMesh}& \checkmark & \checkmark & \checkmark & \checkmark & & \\\hline%f3
\fref{RefiningOrCoarsening}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark \\\hline%f1
\fref{MeshType}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark& \\\hline%f4
\fref{ElmShape}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark& \\\hline%f5
\fref{DomainDimension}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark& \\\hline%f6
\fref{Conformal}& \checkmark &\checkmark & \checkmark & \checkmark & \checkmark& \\\hline%f7
\fref{InputDefinition}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark \\\hline
\fref{RCInstruction}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark \\\hline
\fref{OutputStorage}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \\\hline
\fref{VertexUniqueID}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \\\hline
\fref{ElmUniqueID}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \\\hline
\fref{ElmTopology}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \\\hline
\fref{OutElmOrder}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \\\hline
\fref{OutVertexOrder}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \\\hline
\fref{Help} & & & & & & \\\hline
\nref{Performance} & & & & & & \checkmark \\\hline
\nref{Precision} & & & & & & \\\hline
\nref{Exception} & & & & & & \\\hline
\nref{Portability} & & & & & & \\\hline
\nref{LookAndFeel} & & & & & & \\\hline
\nref{Usability} & & & & & & \\\hline
\nref{Maintainability} & & & & & & \\\hline
\end{tabular}
\caption{Traceability Matrix: Test Cases and Requirements}
\label{AtestTMr}
\end{table}
\subsection{Traceability Matrix for MG \label{AmatrixM}}
Similar to Section \ref{AmatrixR}, the traceability matrix for modules (Table \ref{AtestTMm}) shows that the test cases validate the modules that are associated with correctness and speed. The names of modules appear in Table \ref{AtestTMm} are listed below. The detailed information for each module can be found in the MG document.
\begin{description}
\item[\mref{mMemory}:] Virtual Memory Module
\item[\mref{mFileRW}:] File Read/Write Module
\item[\mref{mKeyboard}:] Keyboard Input Module
\item[\mref{mScreen}:] Screen Output Module
\item[\mref{mInput}:] Input Format Module
\item[\mref{mOutput}:] Output Format Module
\item[\mref{mService}:] Service Module
\item[\mref{mVertex}:] Vertex Module
\item[\mref{mEdge}:] Edge Module
\item[\mref{mCell}:] Cell Module
\item[\mref{mMesh}:] Mesh Module
\item[\mref{mRefining}:] Refining Module
\item[\mref{mCoarsening}:] Coarsening Module
\end{description}
\begin{table}[ht]
\centering
\begin{tabular}{|p{0.06\textwidth}|p{0.06\textwidth}|p{0.06\textwidth}|p{0.06\textwidth}|p{0.06\textwidth}|p{0.06\textwidth}|p{0.06\textwidth}|}
\hline
&\cref{ATCscs} & \cref{ATCrcs1} & \cref{ATCrcs2} & \cref{ATCrcm} & \cref{ATCrm}&\cref{ATCss}\\
\hline\hline
\mref{mMemory}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark \\\hline
\mref{mFileRW}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark \\\hline
\mref{mKeyboard}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark \\\hline
\mref{mScreen}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark \\\hline
\mref{mInput}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark \\\hline
\mref{mOutput}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark \\\hline
\mref{mService}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \\\hline
\mref{mVertex}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark \\\hline
\mref{mEdge}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark \\\hline
\mref{mCell}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark \\\hline
\mref{mMesh}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark \\\hline
\mref{mRefining}& \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark \\\hline
\mref{mCoarsening}& \checkmark & \checkmark & \checkmark & \checkmark & & \\\hline
\end{tabular}
\caption{Traceability Matrix: Test Cases and Modules}
\label{AtestTMm}
\end{table}
\section{Results and Analysis\label{AtestSecResult}}
The results of the test cases defined in Section \ref{TCs} are listed in Section \ref{AtestSectestresult}. The analysis, including charts that compare the execution time of the parallel version to the serial version are provided in Section \ref{AtestSecAnalysis}.
\subsection {Testing Results \label{AtestSectestresult}}
The following tables list the testing results of each test case. The field {\em Test Case Number} and {\em Test Case Name} list the number and the name of each test case. The {\em Input field} gives the number of the figure that is the input for that test case, or a description of the input mesh. The {\em Expected Output} describes the requirements of the output mesh. The {\em Actual Output} gives the result of the test. The {\em Selected Output Mesh} field should give the output meshes. However, there are too many intermediate mesh to display, and displaying only the final mesh is too simple to illustrate the feature of the test case. Selected intermediate meshes and final mesh are included in the {\em Actual Output} field. The {\em Result} field indicates whether the test is passed or failed.
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Test Case Number} & \cref{ATCscs} \\
{\bf Test Case Name} & SplitCS\\
\hline
Input & Figure \ref{input1}\\
Expected Output & ACVTRs and VCVTRs listed in Section \ref{AtestSecTest} are met\\
Actual Output & Summary of the correctness test:\\
& 15 tests are performed.\\
& 15 tests succeed.\\
& 0 tests fail.\\
Selected Output Mesh &Figure \ref{output11}, \ref{output12}, \ref{output13}\\
Result & Passed\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Test Case Number} & \cref{ATCrcs1} \\
{\bf Test Case Name} & RefineCS1\\
\hline
Input & Figure \ref{input1}\\
Expected Output & ACVTRs and VCVTRs listed in Section \ref{AtestSecTest} are met\\
Actual Output & Summary of the correctness test:\\
& 15 tests are performed.\\
& 15 tests succeed.\\
& 0 tests fail.\\
Selected Output Mesh & Figure \ref{output21}, \ref{output22}, \ref{output23}\\
Result & Passed\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Test Case Number} & \cref{ATCrcs2} \\
{\bf Test Case Name} & RefineCS2\\
\hline
Input & Figure \ref{input2}\\
Expected Output & ACVTRs and VCVTRs listed in Section \ref{AtestSecTest} are met\\
Actual Output & Summary of the correctness test:\\
& 15 tests are performed.\\
& 15 tests succeed.\\
& 0 tests fail.\\
Selected Output Mesh & Figure \ref{output31}, \ref{output32}, \ref{output33}\\
Result & Passed\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Test Case Number} & \cref{ATCrcm} \\
{\bf Test Case Name} & RefineCM\\
\hline
Input & Figure \ref{input3}\\
Expected Output & ACVTRs and VCVTRs listed in Section \ref{AtestSecTest} are met\\
Actual Output & Summary of the correctness test:\\
& 15 tests are performed.\\
& 15 tests succeed.\\
& 0 tests fail.\\
Selected Output Mesh & Figure \ref{output41}, \ref{output42}, \ref{output43}, \ref{output44}\\
Result & Passed\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Test Case Number} & \cref{ATCrm} \\
{\bf Test Case Name} & RefineM\\
\hline
Input & Figure \ref{input4}\\
Expected Output & ACVTRs and VCVTRs listed in Section \ref{AtestSecTest} are met\\
Actual Output & Summary of the correctness test:\\
& 15 tests are performed.\\
& 15 tests succeed.\\
& 0 tests fail.\\
Selected Output Mesh & Figure \ref{output51}, \ref{output52}, \ref{output53}\\
Result & Passed\\
\hline \hline
\end{tabular}
\end{minipage}
\vspace{1cm}
\begin{minipage}{\textwidth}
\begin{tabular}{p{\colAwidth}|p{\colBwidth}}
\hline \hline
{\bf Test Case Number} & \cref{ATCss} \\
{\bf Test Case Name} & SplitM\\
\hline
Input & Figure \ref{input4}\\
Expected Output & ACVTRs and VCVTRs listed in Section \ref{AtestSecTest} are met\\
& Execution time increases as the number of cells increases. Execution time decreases as the number of processors increases.\\
Actual Output & Execution time as indicated in Figure \ref{output61}\\
Selected Output Mesh & The mesh is too dense to be shown.\\
Result & Passed\\
\hline \hline
\end{tabular}
\end{minipage}
\begin{figure}[ht]
\centering
\epsfig{file=output61.eps, width= \textwidth}
\caption{Output of \cref{ATCss}}
\label{output61}
\end{figure}
\subsection {Analysis \label{AtestSecAnalysis}}
All of the test cases conform to the ACVTRs and VCVTRs listed in Section \ref{AtestSecTest}. The test result of \cref{ATCss} show that when the number of cells increased, the execution time increased, and when the number of processors increased, the execution time decreased. That is, this test is passed. Figure \ref{speedup} show the speedup when using different numbers of processors. The speedup is defined as
\[ Speedup(n) = \frac{T_{1}}{T_{n}}
\]
Where $T_{1}$ is the execution time of the serial version, and $T_{n}$ is the execution time of the parallel version with $n$ processors. In general, $Speedup(n) < n$. However, for PMGT, when the number of cells is greater than 2700, $Speedup(n) > n$, which is a super linear speedup. Since the algorithms used for the serial version and the parallel version are the same, the super linear speedup is probably due to the cache effect. That is, when the numbers of processors increases, the size of the accumulated caches from different processors also increases. With the larger accumulated cache size, more, or even all, core data set can fit into the caches and the memory access time reduces dramatically. This may explain the extra speedup in additional to the speedup due to parallel computation.
\begin{figure}
\centering
\epsfig{file=speedup.eps, width= \textwidth}
\caption{Speedup for Different Numbers of Processors}
\label{speedup}
\end{figure}
\begin{figure}
\centering
\epsfig{file=input1.eps, width= 0.7\textwidth}
\caption{Input 1}
\label{input1}
\end{figure}
\begin{figure}
\centering
\epsfig{file=input2.eps, width= 0.7\textwidth}
\caption{Input 2}
\label{input2}
\end{figure}
\begin{figure}
\centering
\epsfig{file=input3.eps, width= 0.7\textwidth}
\caption{Input 3}
\label{input3}
\end{figure}
\begin{figure}
\centering
\epsfig{file=input4.eps, width= 0.7\textwidth}
\caption{Input 4}
\label{input4}
\end{figure}
\begin{figure}
\centering
\epsfig{file=input5.eps, width= 0.7\textwidth}
\caption{Input 5}
\label{input5}
\end{figure}
\begin{figure}
\centering
\epsfig{file=output11.eps, width=0.7\textwidth}
\caption{Output 1 of \cref{ATCscs}}
\label{output11}
\end{figure}
\begin{figure}
\centering
\epsfig{file=output12.eps, width=0.7\textwidth}
\caption{Output 2 of \cref{ATCscs}}
\label{output12}
\end{figure}
\begin{figure}
\centering
\epsfig{file=output13.eps, width=0.7\textwidth}
\caption{Output 3 of \cref{ATCscs}}
\label{output13}
\end{figure}
\begin{figure}
\centering
\epsfig{file=output21.eps, width=0.7\textwidth}
\caption{Output 1 of \cref{ATCrcs1}}
\label{output21}
\end{figure}
\begin{figure}
\centering
\epsfig{file=output22.eps, width=0.7\textwidth}
\caption{Output 2 of \cref{ATCrcs1}}
\label{output22}
\end{figure}
\begin{figure}
\centering
\epsfig{file=output23.eps, width=0.7\textwidth}
\caption{Output 3 of \cref{ATCrcs1}}
\label{output23}
\end{figure}
\clearpage
\begin{figure}
\centering
\epsfig{file=output31.eps, width=0.7\textwidth}
\caption{Output 1 of \cref{ATCrcs2}}
\label{output31}
\end{figure}
\begin{figure}
\centering
\epsfig{file=output32.eps, width=0.7\textwidth}
\caption{Output 2 of \cref{ATCrcs2}}
\label{output32}
\end{figure}
\begin{figure}
\centering
\epsfig{file=output33.eps, width=0.7\textwidth}
\caption{Output 3 of \cref{ATCrcs2}}
\label{output33}
\end{figure}
\begin{figure}
\centering
\epsfig{file=output41.eps, width=0.7\textwidth}
\caption{Output 1 of \cref{ATCrcm}}
\label{output41}
\end{figure}
\begin{figure}
\centering
\epsfig{file=output42.eps, width=0.7\textwidth}
\caption{Output 2 of \cref{ATCrcm}}
\label{output42}
\end{figure}
\begin{figure}
\centering
\epsfig{file=output43.eps, width=0.7\textwidth}
\caption{Output 3 of \cref{ATCrcm}}
\label{output43}
\end{figure}
\begin{figure}
\centering
\epsfig{file=output44.eps, width=0.7\textwidth}
\caption{Output 4 of \cref{ATCrcm}}
\label{output44}
\end{figure}
\begin{figure}
\centering
\epsfig{file=output51.eps, width=0.7\textwidth}
\caption{Output 1 of \cref{ATCrm}}
\label{output51}
\end{figure}
\begin{figure}
\centering
\epsfig{file=output52.eps, width=0.7\textwidth}
\caption{Output 2 of \cref{ATCrm}}
\label{output52}
\end{figure}
\begin{figure}
\centering
\epsfig{file=output53.eps, width=0.7\textwidth}
\caption{Output 3 of \cref{ATCrm}}
\label{output53}
\end{figure}
%\newpage
%\bibliography{WenRef}
%\bibliographystyle{plainnat}
\end{document}
%!PS-Adobe-3.0 EPSF-3.0
%%Title: (Slide 1)
%%Version: 1 4
%%Creator: Adobe Acrobat 6.0
%%CreationDate: 13:37:41 12/26/06
%%For: (Wen Yu)
%%DocumentData: Clean7Bit
%%BoundingBox: 29 62 747 599
%%HiResBoundingBox: 29.0 62.0 747.0 599.0
%%Pages: 0
%%DocumentProcessColors: Black
%%DocumentNeededResources: (atend)
%%DocumentSuppliedResources:
%%+ procset (Adobe Acrobat - PDF operators) 1.2 0
%%+ procset (Adobe Acrobat - type operators) 1.2 0
%%+ procset (Adobe Acrobat - general image support) 1.2 0
%%+ procset (Adobe Acrobat - monochrome image support) 1.2 0
%%+ procset (Adobe Acrobat - color image support) 1.2 0
%%+ procset (Adobe Acrobat - indexed color image support) 1.2 0
%%EndComments
%%BeginProlog
%%EndProlog
%%BeginSetup
%ADOPrintSettings: L1 W0 VM op crd os scsa T h EF bg ucr sf ef r b fa pr SEPS ttf HB 0
%%BeginResource: file Pscript_T42Hdr PSVER
userdict /ct_T42Dict 15 dict put
ct_T42Dict begin
/Is2015?
{
version
cvi
2015
ge
} bind def
/AllocGlyphStorage
{
Is2015?
{
pop
}
{
{string} forall
} ifelse
} bind def
/Type42DictBegin
{
25 dict begin
/FontName exch def
/CharStrings 256 dict
begin
/.notdef 0 def
currentdict
end def
/Encoding exch def
/PaintType 0 def
/FontType 42 def
/FontMatrix [1 0 0 1 0 0] def
4 array astore cvx /FontBBox exch def
/sfnts
} bind def
/Type42DictEnd
{
currentdict dup /FontName get exch definefont end
ct_T42Dict exch
dup /FontName get exch put
} bind def
/RD {string currentfile exch readstring pop} executeonly def
/PrepFor2015
{
Is2015?
{
/GlyphDirectory
16
dict def
sfnts 0 get
dup
2 index
(glyx)
putinterval
2 index
(locx)
putinterval
pop
pop
}
{
pop
pop
} ifelse
} bind def
/AddT42Char
{
Is2015?
{
/GlyphDirectory get
begin
def
end
pop
pop
}
{
/sfnts get
4 index
get
3 index
2 index
putinterval
pop
pop
pop
pop
} ifelse
} bind def
end
%%EndResource
%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.16 0
%%Copyright: Copyright 1987-2003 Adobe Systems Incorporated.
%%Version: 1.16 0
systemdict /languagelevel known dup
{ currentglobal false setglobal }
{ false }
ifelse
exch
userdict /Adobe_CoolType_Utility 2 copy known
{ 2 copy get dup maxlength 25 add dict copy }
{ 25 dict }
ifelse put
Adobe_CoolType_Utility
begin
/ct_Level2? exch def
/ct_Clone? 1183615869 internaldict dup
/CCRun known not
exch /eCCRun known not
ct_Level2? and or def
ct_Level2?
{ globaldict begin currentglobal true setglobal }
if
/ct_AddStdCIDMap
ct_Level2?
{ {
((Hex) 57 StartData
0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0
7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60
d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8
cc36 74f4 1144 b13b 77) 0 () /SubFileDecode filter cvx exec
} }
{ {
<BAB431EA07F209EB8C4348311481D9D3F76E3D15246555577D87BC510ED54E
118C39697FA9F6DB58128E60EB8A12FA24D7CDD2FA94D221FA9EC8DA3E5E6A1C
4ACECC8C2D39C54E7C946031DD156C3A6B4A09AD29E1867A> eexec
} }
ifelse bind def
ct_Level2?
{ end setglobal }
if
/ct_UseNativeCapability? systemdict /composefont known def
/ct_MakeOCF 35 dict def
/ct_Vars 25 dict def
/ct_GlyphDirProcs 6 dict def
/ct_BuildCharDict 15 dict dup
begin
/charcode 2 string def
/dst_string 1500 string def
/nullstring () def
/usewidths? true def
end def
ct_Level2? { setglobal } { pop } ifelse
ct_GlyphDirProcs
begin
/GetGlyphDirectory
{
systemdict /languagelevel known
{ pop /CIDFont findresource /GlyphDirectory get }
{
1 index /CIDFont findresource /GlyphDirectory
get dup type /dicttype eq
{
dup dup maxlength exch length sub 2 index lt
{
dup length 2 index add dict copy 2 index
/CIDFont findresource/GlyphDirectory 2 index put
}
if
}
if
exch pop exch pop
}
ifelse
+
} def
/+
{
systemdict /languagelevel known
{
currentglobal false setglobal
3 dict begin
/vm exch def
}
{ 1 dict begin }
ifelse
/$ exch def
systemdict /languagelevel known
{
vm setglobal
/gvm currentglobal def
$ gcheck setglobal
}
if
? { $ begin } if
} def
/? { $ type /dicttype eq } def
/| {
userdict /Adobe_CoolType_Data known
{
Adobe_CoolType_Data /AddWidths? known
{
currentdict Adobe_CoolType_Data
begin
begin
AddWidths?
{
Adobe_CoolType_Data /CC 3 index put
? { def } { $ 3 1 roll put } ifelse
CC charcode exch 1 index 0 2 index 256 idiv put
1 index exch 1 exch 256 mod put
stringwidth 2 array astore
currentfont /Widths get exch CC exch put
}
{ ? { def } { $ 3 1 roll put } ifelse }
ifelse
end
end
}
{ ? { def } { $ 3 1 roll put } ifelse } ifelse
}
{ ? { def } { $ 3 1 roll put } ifelse }
ifelse
} def
/!
{
? { end } if
systemdict /languagelevel known
{ gvm setglobal }
if
end
} def
/: { string currentfile exch readstring pop } executeonly def
end
ct_MakeOCF
begin
/ct_cHexEncoding
[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
/ct_CID_STR_SIZE 8000 def
/ct_mkocfStr100 100 string def
/ct_defaultFontMtx [.001 0 0 .001 0 0] def
/ct_1000Mtx [1000 0 0 1000 0 0] def
/ct_raise {exch cvx exch errordict exch get exec stop} bind def
/ct_reraise
{ cvx $error /errorname get (Error: ) print dup ( ) cvs print
errordict exch get exec stop
} bind def
/ct_cvnsi
{
1 index add 1 sub 1 exch 0 4 1 roll
{
2 index exch get
exch 8 bitshift
add
}
for
exch pop
} bind def
/ct_GetInterval
{
Adobe_CoolType_Utility /ct_BuildCharDict get
begin
/dst_index 0 def
dup dst_string length gt
{ dup string /dst_string exch def }
if
1 index ct_CID_STR_SIZE idiv
/arrayIndex exch def
2 index arrayIndex get
2 index
arrayIndex ct_CID_STR_SIZE mul
sub
{
dup 3 index add 2 index length le
{
2 index getinterval
dst_string dst_index 2 index putinterval
length dst_index add /dst_index exch def
exit
}
{
1 index length 1 index sub
dup 4 1 roll
getinterval
dst_string dst_index 2 index putinterval
pop dup dst_index add /dst_index exch def
sub
/arrayIndex arrayIndex 1 add def
2 index dup length arrayIndex gt
{ arrayIndex get }
{
pop
exit
}
ifelse
0
}
ifelse
}
loop
pop pop pop
dst_string 0 dst_index getinterval
end
} bind def
ct_Level2?
{
/ct_resourcestatus
currentglobal mark true setglobal
{ /unknowninstancename /Category resourcestatus }
stopped
{ cleartomark setglobal true }
{ cleartomark currentglobal not exch setglobal }
ifelse
{
{
mark 3 1 roll /Category findresource
begin
ct_Vars /vm currentglobal put
({ResourceStatus} stopped) 0 () /SubFileDecode filter cvx exec
{ cleartomark false }
{ { 3 2 roll pop true } { cleartomark false } ifelse }
ifelse
ct_Vars /vm get setglobal
end
}
}
{ { resourcestatus } }
ifelse bind def
/CIDFont /Category ct_resourcestatus
{ pop pop }
{
currentglobal true setglobal
/Generic /Category findresource
dup length dict copy
dup /InstanceType /dicttype put
/CIDFont exch /Category defineresource pop
setglobal
}
ifelse
ct_UseNativeCapability?
{
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/CMapName /Identity-H def
/CMapVersion 1.000 def
/CMapType 1 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
1 begincidrange
<0000> <FFFF> 0
endcidrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
}
if
}
{
/ct_Category 2 dict begin
/CIDFont 10 dict def
/ProcSet 2 dict def
currentdict
end
def
/defineresource
{
ct_Category 1 index 2 copy known
{
get
dup dup maxlength exch length eq
{
dup length 10 add dict copy
ct_Category 2 index 2 index put
}
if
3 index 3 index put
pop exch pop
}
{ pop pop /defineresource /undefined ct_raise }
ifelse
} bind def
/findresource
{
ct_Category 1 index 2 copy known
{
get
2 index 2 copy known
{ get 3 1 roll pop pop}
{ pop pop /findresource /undefinedresource ct_raise }
ifelse
}
{ pop pop /findresource /undefined ct_raise }
ifelse
} bind def
/resourcestatus
{
ct_Category 1 index 2 copy known
{
get
2 index known
exch pop exch pop
{
0 -1 true
}
{
false
}
ifelse
}
{ pop pop /findresource /undefined ct_raise }
ifelse
} bind def
/ct_resourcestatus /resourcestatus load def
}
ifelse
/ct_CIDInit 2 dict
begin
/ct_cidfont_stream_init
{
{
dup (Binary) eq
{
pop
null
currentfile
ct_Level2?
{
{ cid_BYTE_COUNT () /SubFileDecode filter }
stopped
{ pop pop pop }
if
}
if
/readstring load
exit
}
if
dup (Hex) eq
{
pop
currentfile
ct_Level2?
{
{ null exch /ASCIIHexDecode filter /readstring }
stopped
{ pop exch pop (>) exch /readhexstring }
if
}
{ (>) exch /readhexstring }
ifelse
load
exit
}
if
/StartData /typecheck ct_raise
}
loop
cid_BYTE_COUNT ct_CID_STR_SIZE le
{
2 copy cid_BYTE_COUNT string exch exec
pop
1 array dup
3 -1 roll
0 exch put
}
{
cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi
dup array exch 2 sub 0 exch 1 exch
{
2 copy
5 index
ct_CID_STR_SIZE
string
6 index exec
pop
put
pop
}
for
2 index
cid_BYTE_COUNT ct_CID_STR_SIZE mod string
3 index exec
pop
1 index exch
1 index length 1 sub
exch put
}
ifelse
cid_CIDFONT exch /GlyphData exch put
2 index null eq
{
pop pop pop
}
{
pop /readstring load
1 string exch
{
3 copy exec
pop
dup length 0 eq
{
pop pop pop pop pop
true exit
}
if
4 index
eq
{
pop pop pop pop
false exit
}
if
}
loop
pop
}
ifelse
} bind def
/StartData
{
mark
{
currentdict
dup /FDArray get 0 get /FontMatrix get
0 get 0.001 eq
{
dup /CDevProc known not
{
/CDevProc 1183615869 internaldict /stdCDevProc 2 copy known
{ get }
{
pop pop
{ pop pop pop pop pop 0 -1000 7 index 2 div 880 }
}
ifelse
def
}
if
}
{
/CDevProc
{
pop pop pop pop pop
0
1 cid_temp /cid_CIDFONT get
/FDArray get 0 get
/FontMatrix get 0 get div
7 index 2 div
1 index 0.88 mul
} def
}
ifelse
/cid_temp 15 dict def
cid_temp
begin
/cid_CIDFONT exch def
3 copy pop
dup /cid_BYTE_COUNT exch def 0 gt
{
ct_cidfont_stream_init
FDArray
{
/Private get
dup /SubrMapOffset known
{
begin
/Subrs SubrCount array def
Subrs
SubrMapOffset
SubrCount
SDBytes
ct_Level2?
{
currentdict dup /SubrMapOffset undef
dup /SubrCount undef
/SDBytes undef
}
if
end
/cid_SD_BYTES exch def
/cid_SUBR_COUNT exch def
/cid_SUBR_MAP_OFFSET exch def
/cid_SUBRS exch def
cid_SUBR_COUNT 0 gt
{
GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval
0 cid_SD_BYTES ct_cvnsi
0 1 cid_SUBR_COUNT 1 sub
{
exch 1 index
1 add
cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add
GlyphData exch cid_SD_BYTES ct_GetInterval
0 cid_SD_BYTES ct_cvnsi
cid_SUBRS 4 2 roll
GlyphData exch
4 index
1 index
sub
ct_GetInterval
dup length string copy put
}
for
pop
}
if
}
{ pop }
ifelse
}
forall
}
if
cleartomark pop pop
end
CIDFontName currentdict /CIDFont defineresource pop
end end
}
stopped
{ cleartomark /StartData ct_reraise }
if
} bind def
currentdict
end def
/ct_saveCIDInit
{
/CIDInit /ProcSet ct_resourcestatus
{ true }
{ /CIDInitC /ProcSet ct_resourcestatus }
ifelse
{
pop pop
/CIDInit /ProcSet findresource
ct_UseNativeCapability?
{ pop null }
{ /CIDInit ct_CIDInit /ProcSet defineresource pop }
ifelse
}
{ /CIDInit ct_CIDInit /ProcSet defineresource pop null }
ifelse
ct_Vars exch /ct_oldCIDInit exch put
} bind def
/ct_restoreCIDInit
{
ct_Vars /ct_oldCIDInit get dup null ne
{ /CIDInit exch /ProcSet defineresource pop }
{ pop }
ifelse
} bind def
/ct_BuildCharSetUp
{
1 index
begin
CIDFont
begin
Adobe_CoolType_Utility /ct_BuildCharDict get
begin
/ct_dfCharCode exch def
/ct_dfDict exch def
CIDFirstByte ct_dfCharCode add
dup CIDCount ge
{ pop 0 }
if
/cid exch def
{
GlyphDirectory cid 2 copy known
{ get }
{ pop pop nullstring }
ifelse
dup length FDBytes sub 0 gt
{
dup
FDBytes 0 ne
{ 0 FDBytes ct_cvnsi }
{ pop 0 }
ifelse
/fdIndex exch def
dup length FDBytes sub FDBytes exch getinterval
/charstring exch def
exit
}
{
pop
cid 0 eq
{ /charstring nullstring def exit }
if
/cid 0 def
}
ifelse
}
loop
} def
/ct_SetCacheDevice
{
0 0 moveto
dup stringwidth
3 -1 roll
true charpath
pathbbox
0 -1000
7 index 2 div 880
setcachedevice2
0 0 moveto
} def
/ct_CloneSetCacheProc
{
1 eq
{
stringwidth
pop -2 div -880
0 -1000 setcharwidth
moveto
}
{
usewidths?
{
currentfont /Widths get cid
2 copy known
{ get exch pop aload pop }
{ pop pop stringwidth }
ifelse
}
{ stringwidth }
ifelse
setcharwidth
0 0 moveto
}
ifelse
} def
/ct_Type3ShowCharString
{
ct_FDDict fdIndex 2 copy known
{ get }
{
currentglobal 3 1 roll
1 index gcheck setglobal
ct_Type1FontTemplate dup maxlength dict copy
begin
FDArray fdIndex get
dup /FontMatrix 2 copy known
{ get }
{ pop pop ct_defaultFontMtx }
ifelse
/FontMatrix exch dup length array copy def
/Private get
/Private exch def
/Widths rootfont /Widths get def
/CharStrings 1 dict dup /.notdef
<d841272cf18f54fc13> dup length string copy put def
currentdict
end
/ct_Type1Font exch definefont
dup 5 1 roll put
setglobal
}
ifelse
dup /CharStrings get 1 index /Encoding get
ct_dfCharCode get charstring put
rootfont /WMode 2 copy known
{ get }
{ pop pop 0 }
ifelse
exch
1000 scalefont setfont
ct_str1 0 ct_dfCharCode put
ct_str1 exch ct_dfSetCacheProc
ct_SyntheticBold
{
currentpoint
ct_str1 show
newpath
moveto
ct_str1 true charpath
ct_StrokeWidth setlinewidth
stroke
}
{ ct_str1 show }
ifelse
} def
/ct_Type4ShowCharString
{
ct_dfDict ct_dfCharCode charstring
FDArray fdIndex get
dup /FontMatrix get dup ct_defaultFontMtx ct_matrixeq not
{ ct_1000Mtx matrix concatmatrix concat }
{ pop }
ifelse
/Private get
Adobe_CoolType_Utility /ct_Level2? get not
{
ct_dfDict /Private
3 -1 roll
{ put }
1183615869 internaldict /superexec get exec
}
if
1183615869 internaldict
Adobe_CoolType_Utility /ct_Level2? get
{ 1 index }
{ 3 index /Private get mark 6 1 roll }
ifelse
dup /RunInt known
{ /RunInt get }
{ pop /CCRun }
ifelse
get exec
Adobe_CoolType_Utility /ct_Level2? get not
{ cleartomark }
if
} bind def
/ct_BuildCharIncremental
{
{
Adobe_CoolType_Utility /ct_MakeOCF get begin
ct_BuildCharSetUp
ct_ShowCharString
}
stopped
{ stop }
if
end
end
end
end
} bind def
/BaseFontNameStr (BF00) def
/ct_Type1FontTemplate 14 dict
begin
/FontType 1 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/FontBBox [-250 -250 1250 1250] def
/Encoding ct_cHexEncoding def
/PaintType 0 def
currentdict
end def
/BaseFontTemplate 11 dict
begin
/FontMatrix [0.001 0 0 0.001 0 0] def
/FontBBox [-250 -250 1250 1250] def
/Encoding ct_cHexEncoding def
/BuildChar /ct_BuildCharIncremental load def
ct_Clone?
{
/FontType 3 def
/ct_ShowCharString /ct_Type3ShowCharString load def
/ct_dfSetCacheProc /ct_CloneSetCacheProc load def
/ct_SyntheticBold false def
/ct_StrokeWidth 1 def
}
{
/FontType 4 def
/Private 1 dict dup /lenIV 4 put def
/CharStrings 1 dict dup /.notdef <d841272cf18f54fc13> put def
/PaintType 0 def
/ct_ShowCharString /ct_Type4ShowCharString load def
}
ifelse
/ct_str1 1 string def
currentdict
end def
/BaseFontDictSize BaseFontTemplate length 5 add def
/ct_matrixeq
{
true 0 1 5
{
dup 4 index exch get exch 3 index exch get eq and
dup not
{ exit }
if
}
for
exch pop exch pop
} bind def
/ct_makeocf
{
15 dict
begin
exch /WMode exch def
exch /FontName exch def
/FontType 0 def
/FMapType 2 def
/FontMatrix matrix def
/bfCount 1 index /CIDCount get 256 idiv 1 add
dup 256 gt { pop 256} if def
/Encoding
256 array 0 1 bfCount 1 sub { 2 copy dup put pop } for
bfCount 1 255 { 2 copy bfCount put pop } for
def
/FDepVector bfCount dup 256 lt { 1 add } if array def
BaseFontTemplate BaseFontDictSize dict copy
begin
/CIDFont exch def
CIDFont /FontBBox known
{ CIDFont /FontBBox get /FontBBox exch def }
if
CIDFont /CDevProc known
{ CIDFont /CDevProc get /CDevProc exch def }
if
currentdict
end
BaseFontNameStr 3 (0) putinterval
0 1 bfCount dup 256 eq { 1 sub } if
{
FDepVector exch
2 index BaseFontDictSize dict copy
begin
dup /CIDFirstByte exch 256 mul def
FontType 3 eq
{ /ct_FDDict 2 dict def }
if
currentdict
end
1 index 16
BaseFontNameStr 2 2 getinterval cvrs pop
BaseFontNameStr exch definefont
put
}
for
ct_Clone?
{ /Widths 1 index /CIDFont get /GlyphDirectory get length dict def }
if
FontName
currentdict
end
definefont
ct_Clone?
{
gsave
dup 1000 scalefont setfont
ct_BuildCharDict
begin
/usewidths? false def
currentfont /Widths get
begin
exch /CIDFont get /GlyphDirectory get
{
pop
dup charcode exch 1 index 0 2 index 256 idiv put
1 index exch 1 exch 256 mod put
stringwidth 2 array astore def
}
forall
end
/usewidths? true def
end
grestore
}
{ exch pop }
ifelse
} bind def
/ct_ComposeFont
{
ct_UseNativeCapability?
{
2 index /CMap ct_resourcestatus
{ pop pop exch pop }
{
/CIDInit /ProcSet findresource
begin
12 dict
begin
begincmap
/CMapName 3 index def
/CMapVersion 1.000 def
/CMapType 1 def
exch /WMode exch def
/CIDSystemInfo 3 dict dup
begin
/Registry (Adobe) def
/Ordering
CMapName ct_mkocfStr100 cvs
(Adobe-) search
{
pop pop
(-) search
{
dup length string copy
exch pop exch pop
}
{ pop (Identity)}
ifelse
}
{ pop (Identity) }
ifelse
def
/Supplement 0 def
end def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
1 begincidrange
<0000> <FFFF> 0
endcidrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
}
ifelse
composefont
}
{
3 2 roll pop
0 get /CIDFont findresource
ct_makeocf
}
ifelse
} bind def
/ct_MakeIdentity
{
ct_UseNativeCapability?
{
1 index /CMap ct_resourcestatus
{ pop pop }
{
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CMapName 2 index def
/CMapVersion 1.000 def
/CMapType 1 def
/CIDSystemInfo 3 dict dup
begin
/Registry (Adobe) def
/Ordering
CMapName ct_mkocfStr100 cvs
(Adobe-) search
{
pop pop
(-) search
{ dup length string copy exch pop exch pop }
{ pop (Identity) }
ifelse
}
{ pop (Identity) }
ifelse
def
/Supplement 0 def
end def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
1 begincidrange
<0000> <FFFF> 0
endcidrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
}
ifelse
composefont
}
{
exch pop
0 get /CIDFont findresource
ct_makeocf
}
ifelse
} bind def
currentdict readonly pop
end
end
%%EndResource
/currentpacking where{pop currentpacking true setpacking}if
%%BeginResource: procset pdfvars 6.0 1
%%Copyright: Copyright 1987-2002 Adobe Systems Incorporated. All Rights Reserved.
%%Title: definition of dictionary of variables used by PDF & PDFText procsets
userdict /PDF 162 dict put
userdict /PDFVars 89 dict dup begin put
/docSetupDone false def
/InitAll 0 def
/TermAll 0 def
/DocInitAll 0 def
/DocTermAll 0 def
/_pdfEncodings 2 array def
/_pdf_str1 1 string def
/_pdf_i 0 def
/_pdf_na 0 def
/_pdf_showproc 0 def
/_italMtx [1 0 .212557 1 0 0] def
/_italMtx_WMode1 [1 -.212557 0 1 0 0] def
/_italMtxType0 [1 0 .1062785 1 0 0] def
/_italMtx_WMode1Type0 [1 -.1062785 0 1 0 0] def
/_basefont 0 def
/_basefonto 0 def
/_pdf_oldCIDInit null def
/_pdf_FontDirectory 30 dict def
/_categories 10 dict def
/_sa? true def
/_ColorSep5044? false def
/nulldict 0 dict def
/_processColors 0 def
/overprintstack null def
/_defaulttransfer currenttransfer def
/_defaultflatness currentflat def
/_defaulthalftone null def
/_defaultcolortransfer null def
/_defaultblackgeneration null def
/_defaultundercolorremoval null def
/_defaultcolortransfer null def
PDF begin
[/c/cs/cm/d/d0/f/h/i/j/J/l/m/M/n/q/Q/re/ri/S/sc/sh/Tf/w/W
/applyInterpFunc/applystitchFunc/domainClip/encodeInput
/initgs/int/limit/rangeClip
/defineRes/undefineRes/findRes/setSA/pl
/? /! /| /: /+ /GetGlyphDirectory
/pdf_flushFilters /pdf_readstring /pdf_dictOp /pdf_image /pdf_maskedImage
/pdf_shfill /pdf_sethalftone
] {null def} bind forall
end
end
%%EndResource
PDFVars begin PDF begin
%%BeginResource: procset pdfutil 6.0 1
%%Copyright: Copyright 1993-2001 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Basic utilities used by other PDF procsets
/bd {bind def} bind def
/ld {load def} bd
/bld {
dup length dict begin
{ null def } forall
bind
end
def
} bd
/dd { PDFVars 3 1 roll put } bd
/xdd { exch dd } bd
/Level2?
systemdict /languagelevel known
{ systemdict /languagelevel get 2 ge } { false } ifelse
def
/Level1? Level2? not def
/Level3?
systemdict /languagelevel known
{systemdict /languagelevel get 3 eq } { false } ifelse
def
/getifknown {
2 copy known { get true } { pop pop false } ifelse
} bd
/here {
currentdict exch getifknown
} bd
/isdefined? { where { pop true } { false } ifelse } bd
%%EndResource
%%BeginResource: procset l2compat 6.0 1
%%Copyright: Copyright 1987-2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Level 1 emulation of level 2 operators
/setcmykcolor isdefined? not
{
/setcmykcolor {
1 sub 4 1 roll
3 {
3 index add neg dup 0 lt { pop 0 } if
3 1 roll
} repeat
setrgbcolor
pop
} bd
} if
/rectclip isdefined? not
{
/rectclip { newpath re clip newpath } bd
} if
/rectfill isdefined? not
{
/rectfill { gsave newpath re fill grestore } bd
} if
/sethalftone isdefined? not
{
/sethalftone {
begin
HalftoneType 1 eq
{ Frequency Angle /SpotFunction load setscreen }
if
end
} bd
} if
Level1?
{
/pdf_show {show} bd
/xshow
{
PDFVars /_pdf_showproc /pdf_show load put
pdf_xshow
} bd
/yshow
{
PDFVars /_pdf_showproc /pdf_show load put
pdf_yshow
} bd
/xyshow
{
PDFVars /_pdf_showproc /pdf_show load put
pdf_xyshow
} bd
} if
/getrampcolor {
cvi
/indx exch def
[
0 1 NumComp 1 sub {
dup
Samples exch get
dup type /stringtype eq { indx get } if
exch
Scaling exch get aload pop
3 1 roll
mul add
} for
]
L1setcolor
} bd
/sssetbackground { L1setcolor } bd
%%EndResource
%%BeginResource: procset pdf 6.0 1
%%Copyright: Copyright 1998-2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: General operators for PDF, common to all Language Levels.
/cm { matrix astore concat } bd
/d /setdash ld
/f /fill ld
/h /closepath ld
/i {dup 0 eq {pop _defaultflatness} if setflat} bd
/j /setlinejoin ld
/J /setlinecap ld
/M /setmiterlimit ld
/n /newpath ld
/S /stroke ld
/w /setlinewidth ld
/W /clip ld
/sg /setgray ld
/initgs {
0 setgray
[] 0 d
0 j
0 J
10 M
1 w
false setSA
/_defaulttransfer load settransfer
0 i
/RelativeColorimetric ri
newpath
} bd
/int {
dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul
exch pop add exch pop
} bd
/limit {
dup 2 index le { exch } if pop
dup 2 index ge { exch } if pop
} bd
/domainClip {
Domain aload pop 3 2 roll
limit
} [/Domain] bld
/applyInterpFunc {
0 1 DimOut 1 sub
{
dup C0 exch get exch
dup C1 exch get exch
3 1 roll
1 index sub
3 index
N exp mul add
exch
currentdict /Range_lo known
{
dup Range_lo exch get exch
Range_hi exch get
3 2 roll limit
}
{
pop
}
ifelse
exch
} for
pop
} [/DimOut /C0 /C1 /N /Range_lo /Range_hi] bld
/encodeInput {
NumParts 1 sub
0 1 2 index
{
dup Bounds exch get
2 index gt
{ exit }
{ dup
3 index eq
{ exit }
{ pop } ifelse
} ifelse
} for
3 2 roll pop
dup Bounds exch get exch
dup 1 add Bounds exch get exch
2 mul
dup Encode exch get exch
1 add Encode exch get
int
} [/NumParts /Bounds /Encode] bld
/rangeClip {
exch dup Range_lo exch get
exch Range_hi exch get
3 2 roll
limit
} [/Range_lo /Range_hi] bld
/applyStitchFunc {
Functions exch get exec
currentdict /Range_lo known {
0 1 DimOut 1 sub {
DimOut 1 add -1 roll
rangeClip
} for
} if
} [/Functions /Range_lo /DimOut] bld
/pdf_flushfilters
{
aload length
{ dup status
1 index currentfile ne and
{ dup flushfile closefile }
{ pop }
ifelse
} repeat
} bd
/pdf_readstring
{
1 index dup length 1 sub get
exch readstring pop
exch pdf_flushfilters
} bind def
/pdf_dictOp
{
3 2 roll
10 dict copy
begin
_Filters dup length 1 sub get def
currentdict exch exec
_Filters pdf_flushfilters
end
} [/_Filters] bld
/pdf_image {{image} /DataSource pdf_dictOp} bd
/pdf_imagemask {{imagemask} /DataSource pdf_dictOp} bd
/pdf_shfill {{sh} /DataSource pdf_dictOp} bd
/pdf_sethalftone {{sethalftone} /Thresholds pdf_dictOp} bd
/pdf_maskedImage
{
10 dict copy begin
/miDict currentdict def
/DataDict DataDict 10 dict copy def
DataDict begin
/DataSource
_Filters dup length 1 sub get
def
miDict image
_Filters pdf_flushfilters
end
end
} [/miDict /DataDict /_Filters] bld
/RadialShade {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/r2 exch def
/c2y exch def
/c2x exch def
/r1 exch def
/c1y exch def
/c1x exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
c1x c2x eq
{
c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope c2y c1y sub c2x c1x sub div def
/theta slope 1 atan def
c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
c1x c1y translate
theta rotate
-90 rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
/max { 2 copy gt { pop } {exch pop} ifelse } bind def
/min { 2 copy lt { pop } {exch pop} ifelse } bind def
rampdict begin
40 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
c1x c1y translate
theta rotate
-90 rotate
/c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
/c1y 0 def
/c1x 0 def
/c2x 0 def
ext0 {
0 getrampcolor
c2y r2 add r1 sub 0.0001 lt
{
c1x c1y r1 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2y r1 add r2 le
{
c1x c1y r1 0 360 arc
fill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r1 neg def
/p1y c1y def
/p2x r1 def
/p2y c1y def
p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y p1x SS1 div neg def
/SS2 90 theta sub dup sin exch cos div def
/p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y p2x SS2 div neg def
r1 r2 gt
{
/L1maxX p1x yMin p1y sub SS1 div add def
/L2maxX p2x yMin p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
c1x c2x sub dup mul
c1y c2y sub dup mul
add 0.5 exp
0 dtransform
dup mul exch dup mul add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
/hires exch def
hires mul
/numpix exch def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
/xInc c2x c1x sub numsteps div def
/yInc c2y c1y sub numsteps div def
/rInc r2 r1 sub numsteps div def
/cx c1x def
/cy c1y def
/radius r1 def
newpath
xInc 0 eq yInc 0 eq rInc 0 eq and and
{
0 getrampcolor
cx cy radius 0 360 arc
stroke
NumSamples 1 sub getrampcolor
cx cy radius 72 hires div add 0 360 arc
0 setlinewidth
stroke
}
{
0
numsteps
{
dup
subsampling { round } if
getrampcolor
cx cy radius 0 360 arc
/cx cx xInc add def
/cy cy yInc add def
/radius radius rInc add def
cx cy radius 360 0 arcn
eofill
rampIndxInc add
}
repeat
pop
} ifelse
ext1 {
c2y r2 add r1 lt
{
c2x c2y r2 0 360 arc
fill
}
{
c2y r1 add r2 sub 0.0001 le
{
c2x c2y r2 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r2 neg def
/p1y c2y def
/p2x r2 def
/p2y c2y def
p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y c2y p1x SS1 div sub def
/SS2 90 theta sub dup sin exch cos div def
/p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y c2y p2x SS2 div sub def
r1 r2 lt
{
/L1maxX p1x yMax p1y sub SS1 div add def
/L2maxX p2x yMax p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
grestore
grestore
end
end
end
} ifelse
} bd
/GenStrips {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/y2 exch def
/x2 exch def
/y1 exch def
/x1 exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
x1 x2 eq
{
y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope y2 y1 sub x2 x1 sub div def
/theta slope 1 atan def
x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
x1 y1 translate
theta rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
rampdict begin
20 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
x1 y1 translate
theta rotate
/xStart 0 def
/xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
/ySpan yMax yMin sub def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
xStart 0 transform
xEnd 0 transform
3 -1 roll
sub dup mul
3 1 roll
sub dup mul
add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
mul
/numpix exch def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
ext0 {
0 getrampcolor
xMin xStart lt
{ xMin yMin xMin neg ySpan rectfill } if
} if
/xInc xEnd xStart sub numsteps div def
/x xStart def
0
numsteps
{
dup
subsampling { round } if
getrampcolor
x yMin xInc ySpan rectfill
/x x xInc add def
rampIndxInc add
}
repeat
pop
ext1 {
xMax xEnd gt
{ xEnd yMin xMax xEnd sub ySpan rectfill } if
} if
grestore
grestore
end
end
end
} ifelse
} bd
/currentdistillerparams where { pop currentdistillerparams /CoreDistVersion get 5000 lt}{true}ifelse
{
/PDFMark5 {cleartomark} bd
}
{
/PDFMark5 {pdfmark} bd
}ifelse
/ReadByPDFMark5
{
2 dict begin
/makerString exch def string /tmpString exch def
{
currentfile tmpString readline pop
makerString anchorsearch
{
pop pop cleartomark exit
}
{
3 copy /PUT PDFMark5 pop 2 copy (\n) /PUT PDFMark5
} ifelse
}loop
end
}bd
%%EndResource
%%BeginResource: procset sep_ops 6.0 1
%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Support for Separations in Level 1, following the conventions of Tech Note 5044
userdict /sep_ops 50 dict dup begin put
/bdef {bind def} bind def
/xdef {exch def} bdef
/colorimagebuffer {
0 1 2 index length 1 sub {
dup 2 index exch get 255 exch sub 2 index 3 1 roll put
} for
} bdef
/addprocs {
[ 3 1 roll
/exec load
dup 3 1 roll
] cvx
} bdef
/L1? {
systemdict /languagelevel known {
systemdict /languagelevel get 2 lt
}{
true
} ifelse
} bdef
/colorexists {
statusdict /processcolors known {
statusdict /processcolors get exec
}{
/deviceinfo where {
pop deviceinfo /Colors known {
deviceinfo /Colors get
statusdict /processcolors {
deviceinfo /Colors known {
deviceinfo /Colors get
}{
1
} ifelse
} put
}{
1
} ifelse
}{
1
} ifelse
} ifelse
1 gt
} bdef
/colorplate colorexists { 0 } { 5 } ifelse def
/negativecolorplate false def
/setcmykcolor where {
pop
gsave
1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub
0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub
0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub
0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub
4 {4 copy} repeat
grestore
1 dict begin
/foureq {
4 index eq 8 1 roll
4 index eq 8 1 roll
4 index eq 8 1 roll
4 index eq 8 1 roll
pop pop pop pop and and and
} def
1 0 0 0 foureq {/colorplate 1 store} if
0 1 0 0 foureq {/colorplate 2 store} if
0 0 1 0 foureq {/colorplate 3 store} if
0 0 0 1 foureq {/colorplate 4 store} if
0 0 0 0 foureq {/colorplate 6 store} if
end
} if
0 systemdict /currenttransfer get exec exec
1 systemdict /currenttransfer get exec exec
2 copy
eq
{
/colorplate 6 store
pop
/negativecolorplate exch 0.5 lt store
}
{
gt /negativecolorplate exch store
}
ifelse
/findcmykcustomcolor where { pop }
{
/findcmykcustomcolor {
[ 6 1 roll ] readonly
} bdef
} ifelse
/setoverprint where {
pop
}{
/setoverprint {
pop
} bdef
} ifelse
/currentoverprint where {
pop
}{
/currentoverprint {
false
} bdef
} ifelse
/setcustomcolor where {
pop
}{
L1? {
/setcustomcolor {
exch
aload pop pop
4 { 4 index mul 4 1 roll } repeat
5 -1 roll pop
setcmykcolor
} bdef
}{
/setcustomcolor {
exch
[ exch /Separation exch dup 4 get exch /DeviceCMYK exch
0 4 getinterval
[ exch /dup load exch cvx {mul exch dup}
/forall load /pop load dup] cvx
] setcolorspace setcolor
} bdef
} ifelse
} ifelse
/ik 0 def
/iy 0 def
/im 0 def
/ic 0 def
/imagetint {
ic .3 mul
im .59 mul
iy .11 mul
ik add add add dup
1 gt {pop 1} if
} bdef
/setcmykcolor where {
pop
}{
/setcmykcolor {
/ik xdef /iy xdef /im xdef /ic xdef
imagetint
1 exch sub setgray
} bdef
} ifelse
/customcolorimage where {
pop
}{
L1? {
/customcolorimage{
gsave
colorexists {
aload pop pop
/ik xdef /iy xdef /im xdef /ic xdef
currentcolortransfer
{ik mul ik sub 1 add} addprocs
4 1 roll {iy mul iy sub 1 add} addprocs
4 1 roll {im mul im sub 1 add} addprocs
4 1 roll {ic mul ic sub 1 add} addprocs
4 1 roll setcolortransfer
/magentabuf 0 string def
/yellowbuf 0 string def
/blackbuf 0 string def
{
colorimagebuffer dup length magentabuf length ne
{
dup length dup dup
/magentabuf exch string def
/yellowbuf exch string def
/blackbuf exch string def
} if
dup magentabuf copy yellowbuf copy
blackbuf copy pop
} addprocs
{magentabuf}{yellowbuf}{blackbuf} true 4 colorimage
}{
aload pop pop /ik xdef /iy xdef /im xdef /ic xdef /tint
imagetint def
currenttransfer
{tint mul 1 tint sub add} addprocs settransfer image
} ifelse
grestore
} bdef
}{
/customcolorimage {
gsave
[ exch /Separation exch dup 4 get exch /DeviceCMYK exch
0 4 getinterval
[ exch /dup load exch cvx {mul exch dup}
/forall load /pop load dup] cvx
] setcolorspace
10 dict begin
/ImageType 1 def
/DataSource exch def
/ImageMatrix exch def
/BitsPerComponent exch def
/Height exch def
/Width exch def
/Decode [1 0] def
currentdict end
image
grestore
} bdef
} ifelse
} ifelse
/setseparationgray where {
pop
}{
L1? {
/setseparationgray { 1 exch sub dup dup dup setcmykcolor } bdef
}{
/setseparationgray {
[/Separation /All /DeviceCMYK {dup dup dup}] setcolorspace
1 exch sub setcolor
} bdef
} ifelse
} ifelse
/separationimage where { pop }
{
/separationimage {
gsave
1 1 1 1 (All)
findcmykcustomcolor customcolorimage
grestore
} bdef
} ifelse
currentdict readonly pop end
%%EndResource
%%BeginResource: procset pdflev15044 6.0 1
%%Copyright: Copyright 1987-2002 Adobe Systems Incorporated. All Rights Reserved.
%%Title: PDF operators, Level 1, with emulated separations (TN 5044)
/_ColorSep5044? true dd
/docinitialize {
PDF begin
/_defaulthalftone
/currenthalftone where
{ pop currenthalftone }
{ 4 dict dup begin
currentscreen
/SpotFunction exch def
/Angle exch def
/Frequency exch def
/HalftoneType 1 def
end }
ifelse
dd
/currentcolortransfer where
{ pop /_defaultcolortransfer [ currentcolortransfer ] dd }
{ /_defaultcolortransfer [currenttransfer dup dup dup] dd }
ifelse
end
} bd
/initialize {
/overprintstack null dd
sep_ops begin
50 dict begin
_defaulthalftone sethalftone
} bd
/terminate {
end end
} bd
/currentcolortransfer where
{ pop }
{
/setcolortransfer
{
settransfer pop pop pop
} bd
} ifelse
/pl {
transform
0.25 sub round 0.25 add exch
0.25 sub round 0.25 add exch
itransform
} bd
/m { _sa? { pl } if moveto } bd
/l { _sa? { pl } if lineto } bd
/c
{
_sa? {3 {pl 6 2 roll} repeat} if
curveto
} bd
/ri/pop ld
/setSA { /_sa? xdd } bd
/re
{
_sa?
{
8 dict begin
/:h exch def
/:w exch def
/:y exch def
/:x exch def
:x :y pl
/:ymin exch def /:xmin exch def
:x :w add :y :h add pl
/:ymax exch def /:xmax exch def
:xmin :ymin moveto
:xmax :ymin lineto
:xmax :ymax lineto
:xmin :ymax lineto
closepath
end
}
{
4 2 roll moveto
1 index 0 rlineto
0 exch rlineto
neg 0 rlineto
closepath
} ifelse
} bd
/q
{
gsave
[currentoverprint overprintstack] /overprintstack xdd
}
[/overprintstack] bld
/Q
{
overprintstack aload pop /overprintstack xdd setoverprint
grestore
}
[/overprintstack] bld
/AlmostFull?
{ dup maxlength exch length sub 2 le
} bd
/Expand
{ 1 index maxlength mul cvi dict
dup begin exch { def } forall end
} bd
/xput
{ 3 2 roll
dup 3 index known not
{ dup AlmostFull? { 1.5 Expand } if
} if
dup 4 2 roll put
} bd
/defineRes
{ _categories 1 index known not
{ /_categories _categories 2 index 10 dict xput store
} if
_categories exch 2 copy get 5 -1 roll 4 index xput put
} bd
/undefineRes {
null exch
defineRes
} bd
/findRes {
_categories exch get exch get
} bd
/L1setcolor {
aload length
dup 0 eq
{ pop .5 setgray }
{ dup 1 eq
{ pop setgray }
{ 3 eq
{ setrgbcolor }
{ setcmykcolor }
ifelse }
ifelse }
ifelse
} bind dd
/concattransferfuncs {
[ 3 1 roll /exec load exch /exec load ] cvx
} bd
/concatandsettransfer {
/_defaulttransfer load concattransferfuncs settransfer
} bd
/concatandsetcolortransfer {
colorplate 0 eq
{
_defaultcolortransfer aload pop
8 -1 roll 5 -1 roll concattransferfuncs 7 1 roll
6 -1 roll 4 -1 roll concattransferfuncs 5 1 roll
4 -1 roll 3 -1 roll concattransferfuncs 3 1 roll
concattransferfuncs
setcolortransfer
} if
colorplate 1 ge colorplate 4 le and
{
4 colorplate sub index 4 { exch pop } repeat
concatandsettransfer
} if
colorplate 5 ge
{
0 index 4 { exch pop } repeat
concatandsettransfer
} if
} bd
/tn5044sethalftone
{
begin
HalftoneType 5 eq
{ [/Default /Cyan /Magenta /Yellow /Black /Default /Default /Default]
colorplate get
here not {
/Default here not { currentdict } if
} if
}
{ currentdict }
ifelse
end
begin
/TransferFunction here
{
concatandsettransfer
currentdict dup length dict
begin
{
1 index /TransferFunction ne { def } { pop pop } ifelse
} forall
currentdict
end
}
{
currentdict
} ifelse
end
sethalftone
} bd
/paintimage
{
colorplate 0 eq
{
{ {currentfile cyanstr readstring pop}
{currentfile magentastr readstring pop}
{currentfile yellowstr readstring pop}
{currentfile blackstr readstring pop
currentfile graystr readstring pop pop}
}
{ {currentfile cyanstr readhexstring pop}
{currentfile magentastr readhexstring pop}
{currentfile yellowstr readhexstring pop}
{currentfile blackstr readhexstring pop
currentfile graystr readhexstring pop pop}
} ifelse
true 4 colorimage
}
{
3 dict begin
/binaryOK exch def
[
1 1 5 {
dup
/currentfile cvx
[ /cyanstr /magentastr /yellowstr /blackstr /graystr ]
3 -1 roll 1 sub get cvx
binaryOK { /readstring } { /readhexstring } ifelse cvx
/pop cvx
5 -1 roll
colorplate dup 5 gt { pop 5 } if
eq not { /pop cvx } if
} for
] cvx bind
end
[
colorplate 6 eq {
/pop cvx
negativecolorplate { 0 } { 1 } ifelse
} if
colorplate 4 le
{
1 /exch cvx /sub cvx
} if
colorplate 6 ne
{
systemdict /currenttransfer get exec
aload pop
} if
] cvx
gsave
systemdict /settransfer get exec
systemdict /image get exec
grestore
} ifelse
} bd
%%EndResource
%%BeginResource: procset pdftext 6.0 1
%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Text operators for PDF
PDF /PDFText 78 dict dup begin put
/docinitialize
{
/resourcestatus where {
pop
/CIDParams /ProcSet resourcestatus {
pop pop
false /CIDParams /ProcSet findresource /SetBuildCompatible get exec
} if
} if
PDF begin
PDFText /_pdfDefineIdentity-H known
{ PDFText /_pdfDefineIdentity-H get exec}
if
end
} bd
/initialize {
PDFText begin
} bd
/terminate { end } bd
Level2?
{
/_safeput
{
3 -1 roll load 3 1 roll put
}
bd
}
{
/_safeput
{
2 index load dup dup length exch maxlength ge
{ dup length 5 add dict copy
3 index xdd
}
{ pop }
ifelse
3 -1 roll load 3 1 roll put
}
bd
}
ifelse
/pdf_has_composefont? systemdict /composefont known def
/CopyFont {
{
1 index /FID ne 2 index /UniqueID ne and
{ def } { pop pop } ifelse
} forall
} bd
/Type0CopyFont
{
exch
dup length dict
begin
CopyFont
[
exch
FDepVector
{
dup /FontType get 0 eq
{
1 index Type0CopyFont
/_pdfType0 exch definefont
}
{
/_pdfBaseFont exch
2 index exec
}
ifelse
exch
}
forall
pop
]
/FDepVector exch def
currentdict
end
} bd
Level2? {currentglobal true setglobal} if
/cHexEncoding
[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
Level2? {setglobal} if
/modEnc {
/_enc xdd
/_icode 0 dd
counttomark 1 sub -1 0
{
index
dup type /nametype eq
{
_enc _icode 3 -1 roll put
_icode 1 add
}
if
/_icode xdd
} for
cleartomark
_enc
} bd
/trEnc {
/_enc xdd
255 -1 0 {
exch dup -1 eq
{ pop /.notdef }
{ Encoding exch get }
ifelse
_enc 3 1 roll put
} for
pop
_enc
} bd
/TE {
/_i xdd
StandardEncoding 256 array copy modEnc
_pdfEncodings exch _i exch put
} bd
/TZ
{
/_usePDFEncoding xdd
findfont
dup length 6 add dict
begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
/pdf_origFontName FontName def
/FontName exch def
currentdict /PaintType known
{ PaintType 2 eq {/PaintType 0 def} if }
if
_usePDFEncoding 0 ge
{
/Encoding _pdfEncodings _usePDFEncoding get def
pop
}
{
_usePDFEncoding -1 eq
{
counttomark 0 eq
{ pop }
{
Encoding 256 array copy
modEnc /Encoding exch def
}
ifelse
}
{
256 array
trEnc /Encoding exch def
}
ifelse
}
ifelse
pdf_EuroProcSet pdf_origFontName known
{
pdf_origFontName pdf_AddEuroGlyphProc
} if
Level2?
{
currentdict /pdf_origFontName undef
} if
FontName currentdict
end
definefont pop
}
bd
Level2?
{
/TZG
{
currentglobal true setglobal
2 index _pdfFontStatus
{
2 index findfont
false setglobal
3 index findfont
true setglobal
ne
{
2 index findfont dup rcheck
{
dup length dict begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
currentdict end
}
if
3 index exch definefont pop
}
if
} if
setglobal
TZ
} bd
}
{
/TZG {TZ} bd
} ifelse
Level2?
{
currentglobal false setglobal
userdict /pdftext_data 5 dict put
pdftext_data
begin
/saveStacks
{
pdftext_data
begin
/vmmode currentglobal def
false setglobal
count array astore /os exch def
end
countdictstack array dictstack pdftext_data exch /ds exch put
cleardictstack pdftext_data /dscount countdictstack put
pdftext_data /vmmode get setglobal
} bind def
/restoreStacks
{
pdftext_data /vmmode currentglobal put false setglobal
clear cleardictstack
pdftext_data /ds get dup
pdftext_data /dscount get 1 2 index length 1 sub
{ get begin dup } for
pop pop
pdftext_data /os get aload pop
pdftext_data /vmmode get setglobal
} bind def
/testForClonePrinterBug
{
currentglobal true setglobal
/undefinedCategory /Generic /Category findresource
dup length dict copy /Category defineresource pop
setglobal
pdftext_data /saveStacks get exec
pdftext_data /vmmode currentglobal put false setglobal
/undefined /undefinedCategory { resourcestatus } stopped
pdftext_data exch /bugFound exch put
pdftext_data /vmmode get setglobal
pdftext_data /restoreStacks get exec
pdftext_data /bugFound get
} bind def
end
setglobal
/pdf_resourcestatus
pdftext_data /testForClonePrinterBug get exec
{
{
pdftext_data /saveStacks get exec
pdftext_data /os get dup dup length 1 sub
dup 1 sub dup 0 lt { pop 0 } if
exch 1 exch { get exch dup } for
pop pop
{ resourcestatus }
stopped
{
clear cleardictstack pdftext_data /restoreStacks get exec
{ pop pop } stopped pop false
}
{
count array astore pdftext_data exch /results exch put
pdftext_data /restoreStacks get exec pop pop
pdftext_data /results get aload pop
}
ifelse
}
}
{ { resourcestatus } }
ifelse
bd
}
if
Level2?
{
/_pdfUndefineResource
{
currentglobal 3 1 roll
_pdf_FontDirectory 2 index 2 copy known
{undef}
{pop pop}
ifelse
1 index (pdf) exch _pdfConcatNames 1 index
1 index 1 _pdfConcatNames 1 index
5 index 1 _pdfConcatNames 1 index
4
{
2 copy pdf_resourcestatus
{
pop 2 lt
{2 copy findresource gcheck setglobal undefineresource}
{pop pop}
ifelse
}
{ pop pop}
ifelse
} repeat
setglobal
} bd
}
{
/_pdfUndefineResource { pop pop} bd
}
ifelse
Level2?
{
/_pdfFontStatus
{
currentglobal exch
/Font pdf_resourcestatus
{pop pop true}
{false}
ifelse
exch setglobal
} bd
}
{
/_pdfFontStatusString 50 string def
_pdfFontStatusString 0 (fonts/) putinterval
/_pdfFontStatus
{
FontDirectory 1 index known
{ pop true }
{
_pdfFontStatusString 6 42 getinterval
cvs length 6 add
_pdfFontStatusString exch 0 exch getinterval
{ status } stopped
{pop false}
{
{ pop pop pop pop true}
{ false }
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
Level2?
{
/_pdfCIDFontStatus
{
/CIDFont /Category pdf_resourcestatus
{
pop pop
/CIDFont pdf_resourcestatus
{pop pop true}
{false}
ifelse
}
{ pop false }
ifelse
} bd
}
if
/_pdfString100 100 string def
/_pdfComposeFontName
{
dup length 1 eq
{
0 get
1 index
type /nametype eq
{
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
2 index exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
exch pop
true
}
{
pop pop
false
}
ifelse
}
{
false
}
ifelse
dup {exch cvn exch} if
} bd
/_pdfConcatNames
{
exch
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
3 -1 roll exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
cvn
} bind def
/_pdfTextTempString 50 string def
/_pdfRegOrderingArray [(Adobe-Japan1) (Adobe-CNS1) (Adobe-Korea1) (Adobe-GB1)] def
/_pdf_CheckCIDSystemInfo
{
1 index _pdfTextTempString cvs
(Identity) anchorsearch
{
pop pop pop pop true
}
{
false
_pdfRegOrderingArray
{
2 index exch
anchorsearch
{ pop pop pop true exit}
{ pop }
ifelse
}
forall
exch pop
exch /CIDFont findresource
/CIDSystemInfo get
3 -1 roll /CMap findresource
/CIDSystemInfo get
exch
3 -1 roll
{
2 copy
/Supplement get
exch
dup type /dicttype eq
{/Supplement get}
{pop 0 }
ifelse
ge
}
{ true }
ifelse
{
dup /Registry get
2 index /Registry get eq
{
/Ordering get
exch /Ordering get
dup type /arraytype eq
{
1 index type /arraytype eq
{
true
1 index length 1 sub -1 0
{
dup 2 index exch get exch 3 index exch get ne
{ pop false exit}
if
} for
exch pop exch pop
}
{ pop pop false }
ifelse
}
{
eq
}
ifelse
}
{ pop pop false }
ifelse
}
{ pop pop false }
ifelse
}
ifelse
} bind def
pdf_has_composefont?
{
/_pdfComposeFont
{
2 copy _pdfComposeFontName not
{
2 index
}
if
(pdf) exch _pdfConcatNames
dup _pdfFontStatus
{ dup findfont 5 2 roll pop pop pop true}
{
4 1 roll
1 index /CMap pdf_resourcestatus
{
pop pop
true
}
{false}
ifelse
1 index true exch
{
_pdfCIDFontStatus not
{pop false exit}
if
}
forall
and
{
1 index 1 index 0 get _pdf_CheckCIDSystemInfo
{
3 -1 roll pop
2 index 3 1 roll
composefont true
}
{
pop pop exch pop false
}
ifelse
}
{
_pdfComposeFontName
{
dup _pdfFontStatus
{
exch pop
1 index exch
findfont definefont true
}
{
pop exch pop
false
}
ifelse
}
{
exch pop
false
}
ifelse
}
ifelse
{ true }
{
dup _pdfFontStatus
{ dup findfont true }
{ pop false }
ifelse
}
ifelse
}
ifelse
} bd
}
{
/_pdfComposeFont
{
_pdfComposeFontName not
{
dup
}
if
dup
_pdfFontStatus
{exch pop dup findfont true}
{
1 index
dup type /nametype eq
{pop}
{cvn}
ifelse
eq
{pop false}
{
dup _pdfFontStatus
{dup findfont true}
{pop false}
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
/_pdfStyleDicts 4 dict dup begin
/Adobe-Japan1 4 dict dup begin
Level2?
{
/Serif
/HeiseiMin-W3-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMin-W3}
{
/HeiseiMin-W3 _pdfCIDFontStatus
{/HeiseiMin-W3}
{/Ryumin-Light}
ifelse
}
ifelse
def
/SansSerif
/HeiseiKakuGo-W5-83pv-RKSJ-H _pdfFontStatus
{/HeiseiKakuGo-W5}
{
/HeiseiKakuGo-W5 _pdfCIDFontStatus
{/HeiseiKakuGo-W5}
{/GothicBBB-Medium}
ifelse
}
ifelse
def
/HeiseiMaruGo-W4-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMaruGo-W4}
{
/HeiseiMaruGo-W4 _pdfCIDFontStatus
{/HeiseiMaruGo-W4}
{
/Jun101-Light-RKSJ-H _pdfFontStatus
{ /Jun101-Light }
{ SansSerif }
ifelse
}
ifelse
}
ifelse
/RoundSansSerif exch def
/Default Serif def
}
{
/Serif /Ryumin-Light def
/SansSerif /GothicBBB-Medium def
{
(fonts/Jun101-Light-83pv-RKSJ-H) status
}stopped
{pop}{
{ pop pop pop pop /Jun101-Light }
{ SansSerif }
ifelse
/RoundSansSerif exch def
}ifelse
/Default Serif def
}
ifelse
end
def
/Adobe-Korea1 4 dict dup begin
/Serif /HYSMyeongJo-Medium def
/SansSerif /HYGoThic-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-GB1 4 dict dup begin
/Serif /STSong-Light def
/SansSerif /STHeiti-Regular def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-CNS1 4 dict dup begin
/Serif /MKai-Medium def
/SansSerif /MHei-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
end
def
/TZzero
{
/_wmode xdd
/_styleArr xdd
/_regOrdering xdd
3 copy
_pdfComposeFont
{
5 2 roll pop pop pop
}
{
[
0 1 _styleArr length 1 sub
{
_styleArr exch get
_pdfStyleDicts _regOrdering 2 copy known
{
get
exch 2 copy known not
{ pop /Default }
if
get
}
{
pop pop pop /Unknown
}
ifelse
}
for
]
exch pop
2 index 3 1 roll
_pdfComposeFont
{3 -1 roll pop}
{
findfont dup /FontName get exch
}
ifelse
}
ifelse
dup /WMode 2 copy known
{ get _wmode ne }
{ pop pop _wmode 1 eq}
ifelse
{
exch _wmode _pdfConcatNames
dup _pdfFontStatus
{ exch pop dup findfont false}
{ exch true }
ifelse
}
{
dup /FontType get 0 ne
}
ifelse
{
dup /FontType get 3 eq _wmode 1 eq and
{
_pdfVerticalRomanT3Font dup length 10 add dict copy
begin
/_basefont exch
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put dup 16#a5 /yen put dup 16#b4 /yen put}
if
def
FontName
currentdict
end
definefont
def
/Encoding _basefont /Encoding get def
/_fauxfont true def
}
{
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
FontType 0 ne
{
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put}
if
def
/_fauxfont true def
} if
} ifelse
/WMode _wmode def
dup dup /FontName exch def
currentdict
end
definefont pop
}
{
pop
}
ifelse
/_pdf_FontDirectory 3 1 roll _safeput
}
bd
Level2?
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
selectfont
} bd
}
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
exch findfont exch
dup type /arraytype eq
{makefont}
{scalefont}
ifelse
setfont
} bd
}
ifelse
/cshow where
{
pop /pdf_cshow /cshow load dd
/pdf_remove2 {pop pop} dd
}
{
/pdf_cshow {exch forall} dd
/pdf_remove2 {} dd
} ifelse
/pdf_xshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_yshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0 exch
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_xyshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
{_pdf_na _pdf_i 1 add get} stopped
{ pop pop pop}
{
_pdf_x _pdf_y moveto
rmoveto
}
ifelse
}
ifelse
_pdf_i 2 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdfl1xs {/_pdf_showproc /show load dd pdf_xshow} bd
/pdfl1ys {/_pdf_showproc /show load dd pdf_yshow} bd
/pdfl1xys {/_pdf_showproc /show load dd pdf_xyshow} bd
Level2? _ColorSep5044? not and
{
/pdfxs {{xshow} stopped {pdfl1xs} if} bd
/pdfys {{yshow} stopped {pdfl1ys} if} bd
/pdfxys {{xyshow} stopped {pdfl1xys} if} bd
}
{
/pdfxs /pdfl1xs load dd
/pdfys /pdfl1ys load dd
/pdfxys /pdfl1xys load dd
} ifelse
/pdf_charpath {false charpath} bd
/pdf_xcharpath {/_pdf_showproc /pdf_charpath load dd pdf_xshow} bd
/pdf_ycharpath {/_pdf_showproc /pdf_charpath load dd pdf_yshow} bd
/pdf_xycharpath {/_pdf_showproc /pdf_charpath load dd pdf_xyshow} bd
/pdf_strokepath
{
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 false charpath
currentpoint S moveto
} bind
exch pdf_cshow
} bd
/pdf_xstrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xshow} bd
/pdf_ystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_yshow} bd
/pdf_xystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xyshow} bd
Level2? {currentglobal true setglobal} if
/d0/setcharwidth ld
/nND {{/.notdef} repeat} bd
/T3Defs {
/BuildChar
{
1 index /Encoding get exch get
1 index /BuildGlyph get exec
}
def
/BuildGlyph {
exch begin
GlyphProcs exch get exec
end
} def
/_pdfT3Font true def
} bd
/_pdfBoldRomanWidthProc
{
stringwidth 1 index 0 ne { exch .03 add exch }if setcharwidth
0 0
} bd
/_pdfType0WidthProc
{
dup stringwidth 0 0 moveto
2 index true charpath pathbbox
0 -1
7 index 2 div .88
setcachedevice2
pop
0 0
} bd
/_pdfType0WMode1WidthProc
{
dup stringwidth
pop 2 div neg -0.88
2 copy
moveto
0 -1
5 -1 roll true charpath pathbbox
setcachedevice
} bd
/_pdfBoldBaseFont
11 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/Encoding cHexEncoding def
/_setwidthProc /_pdfBoldRomanWidthProc load def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
pdf_has_composefont?
{
/_pdfBoldBaseCIDFont
11 dict begin
/CIDFontType 1 def
/CIDFontName /_pdfBoldBaseCIDFont def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_setwidthProc /_pdfType0WidthProc load def
/_bcstr2 2 string def
/BuildGlyph
{
exch begin
_basefont setfont
_bcstr2 1 2 index 256 mod put
_bcstr2 0 3 -1 roll 256 idiv put
_bcstr2 dup _setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
/_pdfDefineIdentity-H
{
/Identity-H /CMap PDFText /pdf_resourcestatus get exec
{
pop pop
}
{
/CIDInit/ProcSet findresource begin 12 dict begin
begincmap
/CIDSystemInfo
3 dict begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
currentdict
end
def
/CMapName /Identity-H def
/CMapVersion 1 def
/CMapType 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
CMapName currentdict/CMap defineresource pop
end
end
} ifelse
} def
} if
/_pdfVerticalRomanT3Font
10 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_pdfType0WidthProc
moveto
show
end
}bd
currentdict
end
def
Level2? {setglobal} if
/MakeBoldFont
{
dup /ct_SyntheticBold known
{
dup length 3 add dict begin
CopyFont
/ct_StrokeWidth .03 0 FontMatrix idtransform pop def
/ct_SyntheticBold true def
currentdict
end
definefont
}
{
dup dup length 3 add dict
begin
CopyFont
/PaintType 2 def
/StrokeWidth .03 0 FontMatrix idtransform pop def
/dummybold currentdict
end
definefont
dup /FontType get dup 9 ge exch 11 le and
{
_pdfBoldBaseCIDFont
dup length 3 add dict copy begin
dup /CIDSystemInfo get /CIDSystemInfo exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefont exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefonto exch def
currentdict
end
/CIDFont defineresource
}
{
_pdfBoldBaseFont
dup length 3 add dict copy begin
/_basefont exch def
/_basefonto exch def
currentdict
end
definefont
}
ifelse
}
ifelse
} bd
/MakeBold {
1 index
_pdf_FontDirectory 2 index 2 copy known
{get}
{exch pop}
ifelse
findfont
dup
/FontType get 0 eq
{
dup /WMode known {dup /WMode get 1 eq }{false} ifelse
version length 4 ge
and
{version 0 4 getinterval cvi 2015 ge }
{true}
ifelse
{/_pdfType0WidthProc}
{/_pdfType0WMode1WidthProc}
ifelse
_pdfBoldBaseFont /_setwidthProc 3 -1 roll load put
{MakeBoldFont} Type0CopyFont definefont
}
{
dup /_fauxfont known not 1 index /SubstMaster known not and
{
_pdfBoldBaseFont /_setwidthProc /_pdfBoldRomanWidthProc load put
MakeBoldFont
}
{
2 index 2 index eq
{ exch pop }
{
dup length dict begin
CopyFont
currentdict
end
definefont
}
ifelse
}
ifelse
}
ifelse
pop pop
dup /dummybold ne
{/_pdf_FontDirectory exch dup _safeput }
{ pop }
ifelse
}bd
/MakeItalic {
_pdf_FontDirectory exch 2 copy known
{get}
{exch pop}
ifelse
dup findfont
dup /FontInfo 2 copy known
{
get
/ItalicAngle 2 copy known
{get 0 eq }
{ pop pop true}
ifelse
}
{ pop pop true}
ifelse
{
exch pop
dup /FontType get 0 eq Level2? not and
{ dup /FMapType get 6 eq }
{ false }
ifelse
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1Type0 }
{ _italMtxType0 }
ifelse
}
{ pop pop _italMtxType0 }
ifelse
}
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1 }
{ _italMtx }
ifelse
}
{ pop pop _italMtx }
ifelse
}
ifelse
makefont
dup /FontType get 42 eq Level2? not or
{
dup length dict begin
CopyFont
currentdict
end
}
if
1 index exch
definefont pop
/_pdf_FontDirectory exch dup _safeput
}
{
pop
2 copy ne
{
/_pdf_FontDirectory 3 1 roll _safeput
}
{ pop pop }
ifelse
}
ifelse
}bd
/MakeBoldItalic {
/dummybold exch
MakeBold
/dummybold
MakeItalic
}bd
Level2?
{
/pdf_CopyDict
{1 index length add dict copy}
def
}
{
/pdf_CopyDict
{
1 index length add dict
1 index wcheck
{ copy }
{ begin
{def} forall
currentdict
end
}
ifelse
}
def
}
ifelse
/pdf_AddEuroGlyphProc
{
currentdict /CharStrings known
{
CharStrings /Euro known not
{
dup
/CharStrings
CharStrings 1 pdf_CopyDict
begin
/Euro pdf_EuroProcSet 4 -1 roll get def
currentdict
end
def
/pdf_PSBuildGlyph /pdf_PSBuildGlyph load def
/pdf_PathOps /pdf_PathOps load def
/Symbol eq Encoding 160 get /.notdef eq and
{
/Encoding Encoding dup length array copy
dup 160 /Euro put def
}
if
}
{ pop
}
ifelse
}
{ pop
}
ifelse
}
def
Level2? {currentglobal true setglobal} if
/pdf_PathOps 4 dict dup begin
/m {moveto} def
/l {lineto} def
/c {curveto} def
/cp {closepath} def
end
def
/pdf_PSBuildGlyph
{
gsave
8 -1 roll pop
7 1 roll
currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
dup 9 1 roll
{
currentdict /StrokeWidth 2 copy known
{
get 2 div
5 1 roll
4 -1 roll 4 index sub
4 1 roll
3 -1 roll 4 index sub
3 1 roll
exch 4 index add exch
4 index add
5 -1 roll pop
}
{
pop pop
}
ifelse
}
if
setcachedevice
pdf_PathOps begin
exec
end
{
currentdict /StrokeWidth 2 copy known
{ get }
{ pop pop 0 }
ifelse
setlinewidth stroke
}
{
fill
}
ifelse
grestore
} def
/pdf_EuroProcSet 13 dict def
pdf_EuroProcSet
begin
/Courier-Bold
{
600 0 6 -12 585 612
{
385 274 m
180 274 l
179 283 179 293 179 303 c
179 310 179 316 180 323 c
398 323 l
423 404 l
197 404 l
219 477 273 520 357 520 c
409 520 466 490 487 454 c
487 389 l
579 389 l
579 612 l
487 612 l
487 560 l
449 595 394 612 349 612 c
222 612 130 529 98 404 c
31 404 l
6 323 l
86 323 l
86 304 l
86 294 86 284 87 274 c
31 274 l
6 193 l
99 193 l
129 77 211 -12 359 -12 c
398 -12 509 8 585 77 c
529 145 l
497 123 436 80 356 80 c
285 80 227 122 198 193 c
360 193 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-BoldOblique /Courier-Bold load def
/Courier
{
600 0 17 -12 578 584
{
17 204 m
97 204 l
126 81 214 -12 361 -12 c
440 -12 517 17 578 62 c
554 109 l
501 70 434 43 366 43 c
266 43 184 101 154 204 c
380 204 l
400 259 l
144 259 l
144 270 143 281 143 292 c
143 299 143 307 144 314 c
418 314 l
438 369 l
153 369 l
177 464 249 529 345 529 c
415 529 484 503 522 463 c
522 391 l
576 391 l
576 584 l
522 584 l
522 531 l
473 566 420 584 348 584 c
216 584 122 490 95 369 c
37 369 l
17 314 l
87 314 l
87 297 l
87 284 88 272 89 259 c
37 259 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-Oblique /Courier load def
/Helvetica
{
556 0 24 -19 541 703
{
541 628 m
510 669 442 703 354 703 c
201 703 117 607 101 444 c
50 444 l
25 372 l
97 372 l
97 301 l
49 301 l
24 229 l
103 229 l
124 67 209 -19 350 -19 c
435 -19 501 25 509 32 c
509 131 l
492 105 417 60 343 60 c
267 60 204 127 197 229 c
406 229 l
430 301 l
191 301 l
191 372 l
455 372 l
479 444 l
194 444 l
201 531 245 624 348 624 c
433 624 484 583 509 534 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-Oblique /Helvetica load def
/Helvetica-Bold
{
556 0 12 -19 563 710
{
563 621 m
537 659 463 710 363 710 c
216 710 125 620 101 462 c
51 462 l
12 367 l
92 367 l
92 346 l
92 337 93 328 93 319 c
52 319 l
12 224 l
102 224 l
131 58 228 -19 363 -19 c
417 -19 471 -12 517 18 c
517 146 l
481 115 426 93 363 93 c
283 93 254 166 246 224 c
398 224 l
438 319 l
236 319 l
236 367 l
457 367 l
497 462 l
244 462 l
259 552 298 598 363 598 c
425 598 464 570 486 547 c
507 526 513 517 517 509 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-BoldOblique /Helvetica-Bold load def
/Symbol
{
750 0 20 -12 714 685
{
714 581 m
650 645 560 685 465 685 c
304 685 165 580 128 432 c
50 432 l
20 369 l
116 369 l
115 356 115 347 115 337 c
115 328 115 319 116 306 c
50 306 l
20 243 l
128 243 l
165 97 300 -12 465 -12 c
560 -12 635 25 685 65 c
685 155 l
633 91 551 51 465 51 c
340 51 238 131 199 243 c
555 243 l
585 306 l
184 306 l
183 317 182 326 182 336 c
182 346 183 356 184 369 c
614 369 l 644 432 l
199 432 l
233 540 340 622 465 622 c
555 622 636 580 685 520 c
cp
750 0 m
}
pdf_PSBuildGlyph
} def
/Times-Bold
{
500 0 16 -14 478 700
{
367 308 m
224 308 l
224 368 l
375 368 l
380 414 l
225 414 l
230 589 257 653 315 653 c
402 653 431 521 444 457 c
473 457 l
473 698 l
444 697 l
441 679 437 662 418 662 c
393 662 365 700 310 700 c
211 700 97 597 73 414 c
21 414 l
16 368 l
69 368 l
69 359 68 350 68 341 c
68 330 68 319 69 308 c
21 308 l
16 262 l
73 262 l
91 119 161 -14 301 -14 c
380 -14 443 50 478 116 c
448 136 l
415 84 382 40 323 40 c
262 40 231 77 225 262 c
362 262 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-BoldItalic
{
500 0 9 -20 542 686
{
542 686 m
518 686 l
513 673 507 660 495 660 c
475 660 457 683 384 683 c
285 683 170 584 122 430 c
58 430 l
34 369 l
105 369 l
101 354 92 328 90 312 c
34 312 l
9 251 l
86 251 l
85 238 84 223 84 207 c
84 112 117 -14 272 -14 c
326 -14 349 9 381 9 c
393 9 393 -10 394 -20 c
420 -20 l
461 148 l
429 148 l
416 109 362 15 292 15 c
227 15 197 55 197 128 c
197 162 204 203 216 251 c
378 251 l
402 312 l
227 312 l
229 325 236 356 241 369 c
425 369 l
450 430 l
255 430 l
257 435 264 458 274 488 c
298 561 337 654 394 654 c
437 654 484 621 484 530 c
484 516 l
516 516 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Italic
{
500 0 23 -10 595 692
{
399 317 m
196 317 l
199 340 203 363 209 386 c
429 386 l
444 424 l
219 424 l
246 514 307 648 418 648 c
448 648 471 638 492 616 c
529 576 524 529 527 479 c
549 475 l
595 687 l
570 687 l
562 674 558 664 542 664 c
518 664 474 692 423 692 c
275 692 162 551 116 424 c
67 424 l
53 386 l
104 386 l
98 363 93 340 90 317 c
37 317 l
23 279 l
86 279 l
85 266 85 253 85 240 c
85 118 137 -10 277 -10 c
370 -10 436 58 488 128 c
466 149 l
424 101 375 48 307 48 c
212 48 190 160 190 234 c
190 249 191 264 192 279 c
384 279 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Roman
{
500 0 10 -12 484 692
{
347 298 m
171 298 l
170 310 170 322 170 335 c
170 362 l
362 362 l
374 403 l
172 403 l
184 580 244 642 308 642 c
380 642 434 574 457 457 c
481 462 l
474 691 l
449 691 l
433 670 429 657 410 657 c
394 657 360 692 299 692 c
204 692 94 604 73 403 c
22 403 l
10 362 l
70 362 l
69 352 69 341 69 330 c
69 319 69 308 70 298 c
22 298 l
10 257 l
73 257 l
97 57 216 -12 295 -12 c
364 -12 427 25 484 123 c
458 142 l
425 101 384 37 316 37 c
256 37 189 84 173 257 c
335 257 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
end
Level2? {setglobal} if
currentdict readonly pop end
%%EndResource
PDFText begin
[39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
/guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
/hungarumlaut/ogonek/caron
0 TE
[1/dotlessi/caron 39/quotesingle 96/grave
127/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft
/quotedblright/bullet/endash/emdash/tilde/trademark/scaron
/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus
/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla
/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters
/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute
/ucircumflex/udieresis/yacute/thorn/ydieresis
1 TE
end
%%BeginResource: procset pdfasc.prc 6.0 1
%%Copyright: Copyright 1992-2003 Adobe Systems Incorporated. All Rights Reserved.
/ASR {
13 dict begin
/mirV? exch def
/mirH? exch def
/center? exch def
/autorotate? exch def
/angle exch def
/shrink exch def
/Pury exch def
/Purx exch def
/Plly exch def
/Pllx exch def
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury 0 eq Durx 0 eq and Dlly 0 eq Dllx 0 eq and and
{ shrink 0 gt { GClipBBox } { GPageBBox } ifelse }
{ ITransDBBox }
ifelse
/PHt Pury Plly sub def
/PW Purx Pllx sub def
/DHt Dury Dlly sub def
/DW Durx Dllx sub def
angle 90 eq angle 270 eq or
{
PHt /PHt PW def /PW exch def
} if
autorotate? PHt PW ne and DHt DW ne and
{
DHt DW ge
PHt PW ge
ne
{ /angle angle 90 add def
PHt /PHt PW def /PW exch def
}
if
} if
angle 0 ne
{
/angle angle 360 mod def
angle rotate
angle 90 eq
{ 0 DW neg translate }
if
angle 180 eq
{ DW neg DHt neg translate }
if
angle 270 eq
{ DHt neg 0 translate }
if
} if
center?
{
ITransBBox
Durx Dllx add 2 div Dury Dlly add 2 div
Purx Pllx add -2 div Pury Plly add -2 div
3 -1 roll add exch
3 -1 roll add exch
translate
}
{
ITransBBox
angle 0 eq
{Dllx Pllx sub Dury Pury sub}
if
angle 90 eq
{Durx Purx sub Dury Pury sub}
if
angle 180 eq
{Durx Purx sub Dlly Plly sub}
if
angle 270 eq
{Dllx Pllx sub Dlly Plly sub}
if
translate
}
ifelse
mirH? mirV? or
{
ITransBBox
mirH?
{
-1 1 scale
Durx Dllx add neg 0 translate
} if
mirV?
{
1 -1 scale
0 Dury Dlly add neg translate
} if
} if
shrink 0 ne
{
ITransBBox
Dury Dlly sub Pury Plly sub div
Durx Dllx sub Purx Pllx sub div
2 copy gt { exch } if pop
shrink 1 eq
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{
shrink 2 eq 1 index 1.0 lt and
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{ pop }
ifelse
}
ifelse
} if
end
} [/autorotate? /shrink? /mirH? /mirV? /angle /Pury /Purx /Plly /Pllx /Durx /Dury /Dllx /Dlly /PW /PHt /DW /DHt
/Devurx /Devury /Devllx /Devlly /pdfHt /pdfW]
bld
/GClipBBox
{
gsave newpath clippath pathbbox newpath grestore
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
ITransDBBox
} [/Durx /Dury /Dllx /Dlly]
bld
/GPageBBox
{
{
currentpagedevice /PageSize get aload pop
/Devury exch def /Devurx exch def
/Devllx 0 def /Devlly 0 def
ITransBBox
}
stopped
{ GClipBBox }
if
} [/Devurx /Devury /Devllx /Devlly ]
bld
/ITransDBBox
{
Durx Dury transform matrix defaultmatrix itransform
/Devury exch def
/Devurx exch def
Dllx Dlly transform matrix defaultmatrix itransform
/Devlly exch def
/Devllx exch def
Devury Devlly lt {/Devlly Devury /Devury Devlly def def} if
Devurx Devllx lt {/Devllx Devurx /Devurx Devllx def def} if
} [/Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
/ITransBBox
{
/um matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix def
Devllx Devlly um itransform
Devurx Devury um itransform
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury Dlly lt {/Dlly Dury /Dury Dlly def def} if
Durx Dllx lt {/Dllx Durx /Durx Dllx def def} if
} [ /um /Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
%%EndResource
currentdict readonly pop
end end
/currentpacking where {pop setpacking}if
PDFVars/DocInitAll{[PDF PDFText]{/docinitialize get exec}forall }put
PDFVars/InitAll{[PDF PDFText]{/initialize get exec}forall initgs}put
PDFVars/TermAll{[PDFText PDF]{/terminate get exec}forall}put
PDFVars begin PDF begin
PDFVars/DocInitAll get exec PDFVars/InitAll get exec
%%IncludeResource Arial-BoldMT
[/N18/Arial-BoldMT 1 TZ
[/NamespacePush PDFMark5
[/_objdef {Metadata_In_EPS} /type /stream /OBJ PDFMark5
[{Metadata_In_EPS} 1242 (% &end XMP packet& %) ReadByPDFMark5
<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
<?adobe-xap-filters esc="CRLF"?>
<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
<rdf:Description rdf:about='uuid:60c69c35-3b17-48ba-853e-a073b8487e22' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='Acrobat Distiller 6.0 (Windows)'></rdf:Description>
<rdf:Description rdf:about='uuid:60c69c35-3b17-48ba-853e-a073b8487e22' xmlns:xap='http://ns.adobe.com/xap/1.0/' xap:ModifyDate='2006-12-26T13:36:47-05:00' xap:CreateDate='2006-12-26T13:36:29-05:00' xap:CreatorTool='Acrobat PDFMaker 6.0 for PowerPoint' xap:MetadataDate='2006-12-26T13:36:47-05:00'></rdf:Description>
<rdf:Description rdf:about='uuid:60c69c35-3b17-48ba-853e-a073b8487e22' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:3a3885cc-5e4a-4b22-a0b7-7e464cd3abb2'/>
<rdf:Description rdf:about='uuid:60c69c35-3b17-48ba-853e-a073b8487e22' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Slide 1</rdf:li></rdf:Alt></dc:title><dc:creator><rdf:Seq><rdf:li>Wen Yu</rdf:li></rdf:Seq></dc:creator></rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end='w'?>
% &end XMP packet& %
[{Metadata_In_EPS} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT PDFMark5
[/Document 1 dict begin /Metadata {Metadata_In_EPS} def currentdict end /BDC PDFMark5
[/NamespacePop PDFMark5
PDFVars/TermAll get exec end end
%%EndSetup
PDFVars begin PDF begin PDFVars/InitAll get exec
29 62 718 537 rectclip
[ 0 -1 1 0 -33 628 ] concat
/N19 [/DeviceRGB] /ColorSpace defineRes pop
29.0 62.0 537.0 718.0 re
W
n
q
n
567.47998 61.011002 -540.0 719.999985 re
eoclip
n
q
0.0 10.08 -10.02 0.0 37.5 61.01054 cm
1.0 sg
q
n
0.0 0.0 1.0 1.0 re
10 dict dup begin
/ImageType 1 def
/Width 42 def
/Height 42 def
/ImageMatrix [42.0 0.0 0.0 -41.999996 0.0 41.999996] def
/BitsPerComponent 1 def
/Decode [0.0 1.0 ] def
/DataSource {currentfile userdict /CIstring get readhexstring pop} bind def
end
42 42 false 4 -1 roll dup /ImageMatrix get exch /DataSource get
userdict /CIstring 6 string put
imagemask
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
Q
Q
Q
n
183.479996 136.011002 m
183.479996 111.171005 191.87999 91.011002 202.199997 91.011002 c
212.580002 91.011002 220.979996 111.171005 220.979996 136.011002 c
220.979996 160.851013 212.580002 181.011002 202.199997 181.011002 c
191.87999 181.011002 183.479996 160.851013 183.479996 136.011002 c
1.0 sg
eofill
1.5 w
1 j
1 J
n
183.479996 136.011002 m
183.479996 111.171005 191.87999 91.011002 202.199997 91.011002 c
212.580002 91.011002 220.979996 111.171005 220.979996 136.011002 c
220.979996 160.851013 212.580002 181.011002 202.199997 181.011002 c
191.87999 181.011002 183.479996 160.851013 183.479996 136.011002 c
h
0.0 sg
S
0.0 sg
206.819992 114.770508 m
/N18 [0.0 12.0 -12.0 0.0 0.0 0.0] Tf
(Service)
[7.978769 6.646677 4.642771 6.646677 3.310678 6.646677 6.646677 ] pdfys
n
183.479996 262.011017 m
183.479996 237.171005 191.87999 217.011017 202.199997 217.011017 c
212.580002 217.011017 220.979996 237.171005 220.979996 262.011017 c
220.979996 286.851013 212.580002 307.011017 202.199997 307.011017 c
191.87999 307.011017 183.479996 286.851013 183.479996 262.011017 c
1.0 sg
eofill
n
183.479996 262.011017 m
183.479996 237.171005 191.87999 217.011017 202.199997 217.011017 c
212.580002 217.011017 220.979996 237.171005 220.979996 262.011017 c
220.979996 286.851013 212.580002 307.011017 202.199997 307.011017 c
191.87999 307.011017 183.479996 286.851013 183.479996 262.011017 c
h
0.0 sg
S
0.0 sg
206.819992 238.010498 m
(Refinin)
[8.668801 6.676797 4.00071 3.340799 7.336709 3.340799 7.336709 ] pdfys
206.819992 278.757416 m
(g) show
n
381.47998 262.011017 m
381.47998 237.171005 389.880005 217.011017 400.200012 217.011017 c
410.579987 217.011017 418.97998 237.171005 418.97998 262.011017 c
418.97998 286.851013 410.579987 307.011017 400.200012 307.011017 c
389.880005 307.011017 381.47998 286.851013 381.47998 262.011017 c
1.0 sg
eofill
n
381.47998 262.011017 m
381.47998 237.171005 389.880005 217.011017 400.200012 217.011017 c
410.579987 217.011017 418.97998 237.171005 418.97998 262.011017 c
418.97998 286.851013 410.579987 307.011017 400.200012 307.011017 c
389.880005 307.011017 381.47998 286.851013 381.47998 262.011017 c
h
0.0 sg
S
0.0 sg
404.819977 251.030487 m
(Cell)
[8.668801 6.676797 3.340799 3.340799 ] pdfys
n
291.47998 268.011017 m
291.47998 243.171005 299.880005 223.011017 310.200012 223.011017 c
320.579987 223.011017 328.97998 243.171005 328.97998 268.011017 c
328.97998 292.851013 320.579987 313.011017 310.200012 313.011017 c
299.880005 313.011017 291.47998 292.851013 291.47998 268.011017 c
1.0 sg
eofill
n
291.47998 268.011017 m
291.47998 243.171005 299.880005 223.011017 310.200012 223.011017 c
320.579987 223.011017 328.97998 243.171005 328.97998 268.011017 c
328.97998 292.851013 320.579987 313.011017 310.200012 313.011017 c
299.880005 313.011017 291.47998 292.851013 291.47998 268.011017 c
h
0.0 sg
S
0.0 sg
314.820007 252.770477 m
(Mesh)
[9.991111 6.667197 6.667197 7.327109 ] pdfys
n
465.47998 298.011017 m
465.47998 273.171021 473.879944 253.011017 484.200012 253.011017 c
494.579987 253.011017 502.97998 273.171021 502.97998 298.011017 c
502.97998 322.851013 494.579987 343.011017 484.200012 343.011017 c
473.879944 343.011017 465.47998 322.851013 465.47998 298.011017 c
1.0 sg
eofill
n
465.47998 298.011017 m
465.47998 273.171021 473.879944 253.011017 484.200012 253.011017 c
494.579987 253.011017 502.97998 273.171021 502.97998 298.011017 c
502.97998 322.851013 494.579987 343.011017 484.200012 343.011017 c
473.879944 343.011017 465.47998 322.851013 465.47998 298.011017 c
h
0.0 sg
S
0.0 sg
488.819977 279.770508 m
(Vertex)
[7.96797 6.635878 4.631971 3.959791 6.635878 6.635878 ] pdfys
n
435.47998 166.011002 m
435.47998 141.171005 443.880005 121.011017 454.200012 121.011017 c
464.579987 121.011017 472.97998 141.171005 472.97998 166.011002 c
472.97998 190.850998 464.579987 211.011017 454.200012 211.011017 c
443.880005 211.011017 435.47998 190.850998 435.47998 166.011002 c
1.0 sg
eofill
n
435.47998 166.011002 m
435.47998 141.171005 443.880005 121.011017 454.200012 121.011017 c
464.579987 121.011017 472.97998 141.171005 472.97998 166.011002 c
472.97998 190.850998 464.579987 211.011017 454.200012 211.011017 c
443.880005 211.011017 435.47998 190.850998 435.47998 166.011002 c
h
0.0 sg
S
0.0 sg
458.819977 151.370499 m
(Ed)
[7.987289 7.315109 ] pdfys
458.819977 166.740005 m
(ge)
[7.315109 6.655197 ] pdfys
n
183.479996 382.011017 m
183.479996 357.171021 191.87999 337.011017 202.199997 337.011017 c
212.580002 337.011017 220.979996 357.171021 220.979996 382.011017 c
220.979996 406.851013 212.580002 427.011017 202.199997 427.011017 c
191.87999 427.011017 183.479996 406.851013 183.479996 382.011017 c
1.0 sg
eofill
n
183.479996 382.011017 m
183.479996 357.171021 191.87999 337.011017 202.199997 337.011017 c
212.580002 337.011017 220.979996 357.171021 220.979996 382.011017 c
220.979996 406.851013 212.580002 427.011017 202.199997 427.011017 c
191.87999 427.011017 183.479996 406.851013 183.479996 382.011017 c
h
0.0 sg
S
0.0 sg
206.819992 349.130493 m
(Coarsenin)
[8.649482 7.317389 6.657477 4.653571 6.657477 6.657477 7.317389 3.321478 7.317389 ] pdfys
206.819992 407.745087 m
(g) show
n
183.479996 508.009979 m
183.479996 483.171021 191.87999 463.011017 202.199997 463.011017 c
212.580002 463.011017 220.979996 483.171021 220.979996 508.009979 c
220.979996 532.851013 212.580002 553.01001 202.199997 553.01001 c
191.87999 553.01001 183.479996 532.851013 183.479996 508.009979 c
1.0 sg
eofill
n
183.479996 508.009979 m
183.479996 483.171021 191.87999 463.011017 202.199997 463.011017 c
212.580002 463.011017 220.979996 483.171021 220.979996 508.009979 c
220.979996 532.851013 212.580002 553.01001 202.199997 553.01001 c
191.87999 553.01001 183.479996 532.851013 183.479996 508.009979 c
h
0.0 sg
S
0.0 sg
206.819992 493.250488 m
(Input)
[3.365999 7.361909 7.361909 7.361909 4.02591 ] pdfys
n
183.479996 664.01001 m
183.479996 639.171021 191.87999 619.01001 202.199997 619.01001 c
212.580002 619.01001 220.979996 639.171021 220.979996 664.01001 c
220.979996 688.849976 212.580002 709.01001 202.199997 709.01001 c
191.87999 709.01001 183.479996 688.849976 183.479996 664.01001 c
1.0 sg
eofill
n
183.479996 664.01001 m
183.479996 639.171021 191.87999 619.01001 202.199997 619.01001 c
212.580002 619.01001 220.979996 639.171021 220.979996 664.01001 c
220.979996 688.849976 212.580002 709.01001 202.199997 709.01001 c
191.87999 709.01001 183.479996 688.849976 183.479996 664.01001 c
h
0.0 sg
S
0.0 sg
206.819992 644.270508 m
(Output)
[9.357598 7.353509 4.01751 7.353509 7.353509 4.01751 ] pdfys
n
375.47998 661.01001 m
375.47998 757.01001 l
405.47998 757.01001 l
405.47998 661.01001 l
1.0 sg
f
8.0 M
0 j
n
375.47998 661.01001 30.0 96.0 re
0.0 sg
S
0.0 sg
394.97998 664.010498 m
(Virtual Me)
[8.013569 3.345479 4.677571 4.005391 7.341389 6.681477 3.345479 3.362278 10.00539 6.681477 ] pdfys
394.97998 721.386536 m
(mory)
[10.67757 7.341389 4.677571 6.681477 ] pdfys
n
218.940002 157.55101 m
293.399994 232.011017 l
294.47998 230.931015 l
220.019989 156.471008 l
h
291.119995 232.911011 m
297.47998 235.011017 l
295.380005 228.651016 l
0.0 sg
f
n
219.059998 145.611008 m
376.919983 250.850998 l
377.759979 249.591019 l
219.900009 144.411011 l
h
374.819977 252.171005 m
381.47998 253.011017 l
378.119995 247.19101 l
f
n
220.080002 385.43103 m
289.200012 287.511017 l
288.0 286.671021 l
218.87999 384.591003 l
h
290.459991 289.611023 m
291.47998 283.011017 l
285.540009 286.19101 l
f
n
220.199997 493.309998 m
296.339996 299.931 l
294.959991 299.391022 l
218.759979 492.711029 l
h
298.079987 301.671021 m
297.47998 295.011017 l
292.5 299.511017 l
f
n
220.199997 649.190002 m
308.880005 318.051025 l
307.440002 317.631012 l
218.759979 648.831055 l
h
310.800018 319.611023 m
309.47998 313.011017 l
305.039978 318.051025 l
f
n
219.479996 259.731018 67.020004 -1.5 re
285.47998 262.011017 m
291.47998 259.009979 l
285.47998 256.009979 l
f
n
219.360001 115.731003 m
430.440002 150.951004 l
430.679993 149.451004 l
219.600006 114.291016 l
h
429.059998 152.991013 m
435.47998 151.011002 l
430.079987 147.05101 l
f
n
219.119995 121.671005 m
478.679993 251.451019 l
479.339996 250.130997 l
219.839996 120.351006 l
h
476.759979 253.011017 m
483.47998 253.011017 l
479.459991 247.671005 l
f
n
219.900009 511.610992 m
371.819977 406.491028 l
370.919983 405.231018 l
219.059998 510.410004 l
h
372.23999 408.891022 m
375.47998 403.011017 l
368.819977 403.971008 l
f
n
219.659988 523.72998 m
370.800018 488.871033 l
370.440002 487.43103 l
219.300003 522.291016 l
h
370.319977 491.271027 m
375.47998 487.011017 l
368.940002 485.451019 l
f
n
375.47998 559.01001 m
375.47998 655.01001 l
405.47998 655.01001 l
405.47998 559.01001 l
1.0 sg
f
n
375.47998 559.01001 30.0 96.0 re
0.0 sg
S
0.0 sg
394.97998 565.610474 m
(Scr)
[8.012489 6.680397 4.676491 ] pdfys
394.97998 584.920898 m
(e) show
394.97998 591.579773 m
(en Output)
[6.680397 7.340309 3.362399 9.344398 7.340309 4.004311 7.340309 7.340309 4.004311 ] pdfys
n
375.47998 457.011017 m
375.47998 553.01001 l
405.47998 553.01001 l
405.47998 457.011017 l
1.0 sg
f
n
375.47998 457.011017 30.0 95.999969 re
0.0 sg
S
0.0 sg
394.97998 461.630493 m
(File Read/Write)
[7.344029 3.348119 3.348119 6.684117 3.362638 8.676122 6.684117 6.684117 7.344029 3.348119 11.340123
4.680211 3.348119 4.008031 6.684117 ] pdfys
n
375.47998 355.011017 m
375.47998 451.011017 l
405.47998 451.011017 l
405.47998 355.011017 l
1.0 sg
f
n
375.47998 355.011017 30.0 96.0 re
0.0 sg
S
0.0 sg
394.97998 359.030487 m
(Key)
[8.667722 6.675717 6.675717 ] pdfys
394.97998 380.971466 m
(board Input)
[7.335629 7.335629 6.675717 4.671811 7.335629 3.422519 3.339719 7.335629 7.335629 7.335629 3.999631
] pdfys
n
219.959991 661.551025 m
372.23999 526.911011 l
371.220001 525.770996 l
219.0 660.471008 l
h
372.959991 529.25 m
375.47998 523.01001 l
369.0 524.75 l
0.0 sg
f
n
219.779999 673.671021 m
371.160004 609.651001 l
370.559998 608.271057 l
219.179977 672.291016 l
h
371.100006 612.109985 m
375.47998 607.01001 l
368.759979 606.591003 l
f
n
219.360001 685.72998 m
370.440002 709.01001 l
370.679993 707.51001 l
219.600006 684.291016 l
h
369.119995 711.051025 m
375.47998 709.01001 l
370.019989 705.109985 l
f
n
418.200012 241.251007 m
434.759979 185.991013 l
433.319977 185.570999 l
416.759979 240.771011 l
h
436.619995 187.611008 m
435.47998 181.011002 l
430.859985 185.871002 l
f
n
417.059998 283.671021 m
460.859985 310.971008 l
461.639954 309.711029 l
417.899994 282.351013 l
h
458.819977 312.351013 m
465.47998 313.011017 l
462.0 307.311005 l
f
0.75 w
10.0 M
1 j
n
75.479996 436.011017 m
114.479996 313.011017 l
153.479996 436.011017 l
114.479996 559.01001 l
h
S
0.0 sg
108.600006 390.290497 m
/N18 [0.0 18.0 -18.0 0.0 0.0 0.0] Tf
(Embedded)
[12.004154 16.000156 10.995884 10.006016 10.995884 10.995884 10.006016 10.995884 ] pdfys
130.199951 387.289856 m
(Application)
[12.996002 10.997864 10.997864 5.003998 5.003998 10.007996 10.007996 5.993866 5.003998 10.997864 10.997864
] pdfys
n
136.139999 379.311005 m
182.220001 269.931 l
180.839996 269.331024 l
134.759979 378.711029 l
h
183.900009 271.731018 m
183.479996 265.011017 l
178.37999 269.391022 l
0.0 sg
f
n
141.779999 397.671021 m
179.159988 381.651031 l
178.559998 380.271027 l
141.179993 396.291016 l
h
179.159988 384.111023 m
183.479996 379.011017 l
176.759979 378.591003 l
f
n
135.23999 487.731018 m
178.559998 503.93103 l
179.039978 502.551025 l
135.720001 486.291016 l
h
176.819992 505.72998 m
183.479996 505.009979 l
178.919998 500.091003 l
f
n
128.759979 517.25 m
181.139999 668.51001 l
182.580002 668.031006 l
130.199997 516.770996 l
h
178.679993 668.331055 m
183.479996 673.01001 l
184.37999 666.351013 l
f
n
124.200005 337.251007 m
182.759979 143.991013 l
181.319992 143.570999 l
122.759987 336.771027 l
h
184.619995 145.611008 m
183.479996 139.011002 l
178.860001 143.871002 l
f
n
327.47998 265.731018 49.019989 -1.5 re
375.47998 268.011017 m
381.47998 265.011017 l
375.47998 262.011017 l
f
n
321.839996 235.671005 m
431.519989 172.19101 l
430.800018 170.871002 l
321.119995 234.350998 l
h
431.759979 174.591003 m
435.47998 169.011002 l
428.759979 169.431015 l
f
n
327.300018 295.731018 m
466.440002 330.531006 l
466.800018 329.091003 l
327.660004 294.291016 l
h
464.940002 332.451019 m
471.47998 331.011017 l
466.379944 326.631012 l
f
n
[/EMC PDFMark5
PDFVars/TermAll get exec end end
%%PageTrailer
%%Trailer
%%DocumentNeededResources:
%%+ font Arial-BoldMT
%%EOF
/*****************************************************************************/
/* PMGT */
/* */
/* January, 2007 */
/* */
/* Copyright 2007 */
/* Wen Yu */
/* Department of Computing and Software */
/* McMaster University */
/* yuw4@mcmaster.ca */
/* */
/* This program may be freely redistributed under the condition that the */
/* copyright notices are not removed. You may distribute modified versions*/
/* of this code UNDER THE CONDITION THAT THIS CODE AND ANY MODIFICATIONS */
/* MADE TO IT IN THE SAME FILE REMAIN UNDER COPYRIGHT OF THE ORIGINAL */
/* AUTHOR, BOTH SOURCE AND OBJECT CODE ARE MADE FREELY AVAILABLE WITHOUT */
/* CHARGE, AND CLEAR NOTICE IS GIVEN OF THE MODIFICATIONS. */
/* */
/* This is the serial version of PMGT */
/* This file includes classes for the cell module. */
/*****************************************************************************/
#ifndef CELL
#define CELL
#endif
#ifndef VERTEX
#include "Vertex.h"
#endif
#ifndef EDGE
#include "Edge.h"
#endif
namespace PMGT{
//namespace Cell{
//using namespace Vertex;
//using namespace Edge;
class Cell{
public:
Cell(int cId=-1, int LhId = -1, MFLAG mFlag=UNCHANGE, bool del=false){
cId_ = cId;
LhId_ = LhId;
mFlag_ = mFlag;
del_ = del;
}
inline int cId(){ return cId_;}
inline MFLAG mFlag(){ return mFlag_; }
inline int LhId(){ return LhId_; }
inline bool del(){ return del_; }
inline void setCId(int cId){ cId_ = cId; }
inline void setMflag(MFLAG flag){ mFlag_ = flag; }
inline void setLhId(int LhId){ LhId_ = LhId; }
inline void setDel(bool del) { del_ = del; }
inline void ccopy(Cell& other){
cId_ = other.cId_;
LhId_ = other.LhId_;
mFlag_ = other.mFlag_;
del_ = other.del_;
}
private:
int cId_; //id
int LhId_; //longest halfedge
MFLAG mFlag_; //flag for modification
bool del_; // a flag to indicate if the cell
// is marked to be deleted
}; // end of class Cell
//} // end of namespace Cell
} // end of namespace PMGT
/*****************************************************************************/
/* PMGT */
/* */
/* January, 2007 */
/* */
/* Copyright 2007 */
/* Wen Yu */
/* Department of Computing and Software */
/* McMaster University */
/* yuw4@mcmaster.ca */
/* */
/* This program may be freely redistributed under the condition that the */
/* copyright notices are not removed. You may distribute modified versions*/
/* of this code UNDER THE CONDITION THAT THIS CODE AND ANY MODIFICATIONS */
/* MADE TO IT IN THE SAME FILE REMAIN UNDER COPYRIGHT OF THE ORIGINAL */
/* AUTHOR, BOTH SOURCE AND OBJECT CODE ARE MADE FREELY AVAILABLE WITHOUT */
/* CHARGE, AND CLEAR NOTICE IS GIVEN OF THE MODIFICATIONS. */
/* */
/* This is the serial version of PMGT */
/*****************************************************************************/
#ifndef COARSENING
#include "Coarsening.h"
#endif
namespace PMGT{
// coarsen the mesh by edge collapse
void Coarsening::edge_collapse(Mesh& mesh){
int i, j, k,
cId, // temp cell Id
eId, // temp edge Id
hId, // temp halfedge Id
vId, // temp vertex Id
acId, // adjacent cell
first_acId, // the first adjacent cell
rvId, // the vertex to be remained
dvId; // the vertex to be deleted
vector<int> del_cells, // cells to be deleted
mutual_halfedges, // halfedges of the mutual edge
del_halfedges, // halfedges to be deleted/merged
remain_halfedges, // halfedges to be remained
update_halfedges, // halfedges whose target vertices
// to be updated
update_cells; // cells whose edge length are changed
//int nc = mesh.n_of_c();
for (i=0; i<mesh.n_of_c(); i++){
bool legal = false;
if (mesh.cell(i).mFlag() == COARSEN && !mesh.cell(i).del()){
// check if it is legal to delete i
// check if one of the adjacent cells is to be coarsened
acId = mesh.cc_first(i);
for (int k=0; k<3; k++){ // try 3 neighbour of cell i
//cout << "coarsen i=" << i << " acId=" << acId << " k=" << k <<endl;
if (acId == -1){
break;
}
// check if the i-th neighbour is to be coarsened
if (mesh.cell(acId).mFlag() != COARSEN){
acId = mesh.cc_next(i, acId);
continue;
}
/* check if the mutual edge is legal to be removed */
// find one halfedge of the mutual edge
hId = mesh.ch_first(i);
if (mesh.IcId_from_hId(mesh.ops_hId(hId)) != acId){
if (mesh.IcId_from_hId(mesh.ops_hId
(mesh.prev_hId(hId))) == acId){
hId = mesh.prev_hId(hId);
}
else if(mesh.IcId_from_hId(mesh.ops_hId
(mesh.next_hId(hId))) == acId){
hId = mesh.next_hId(hId);
}
else assert(false);
}
// find the vertex to be delated
int illegal_vId = -1; // the vertex that can not be deleted
bool both_illegal = false; // both vertices are illegal to be deleted
dvId = mesh.tvId_from_hId(hId);
rvId = mesh.svId_from_hId(hId);
int old_hId = hId;
for (int x=0; x<2; x++){ // try two vertices of hId
if (mesh.is_b_v(dvId)){
if (illegal_vId == -1){
illegal_vId = dvId;
dvId = mesh.svId_from_hId(old_hId);
rvId = mesh.tvId_from_hId(old_hId);
hId = mesh.ops_hId(old_hId);
continue;
}
else{
both_illegal = true;
break;
}
}
//cout << "mutual_h:"<<hId<<",";
// reserve the entities that will be modified
del_cells.clear();
mutual_halfedges.clear();
del_halfedges.clear();
remain_halfedges.clear();
update_halfedges.clear();
update_cells.clear();
// set variables
mutual_halfedges.push_back(hId);
del_halfedges.push_back(mesh.next_hId(hId));
remain_halfedges.push_back(mesh.prev_hId(hId));
del_cells.push_back(mesh.IcId_from_hId(hId));
hId = mesh.ops_hId(hId);
//cout << hId<< endl;
mutual_halfedges.push_back(hId);
del_halfedges.push_back(mesh.prev_hId(hId));
remain_halfedges.push_back(mesh.next_hId(hId));
del_cells.push_back(mesh.IcId_from_hId(hId));
//cout << "del_cells "<< del_cells[0]<<","<<del_cells[1]<<endl;
assert(del_cells[0]==i || del_cells[0]==acId);
assert(del_cells[1]==i || del_cells[1]==acId);
assert(del_cells[0] != del_cells[1]);
assert(!mesh.is_b_v(dvId));
// find the halfedges whose target vertices are dvId
hId = mesh.vih_first(dvId);
do{
if (hId == -1){
break;
}
if (hId != mutual_halfedges[0] && hId != del_halfedges[1]
&& hId != mesh.ops_hId(del_halfedges[0])){
update_halfedges.push_back(hId);
//update_cells.push_back(mesh.IcId_from_hId(hId));
}
//cout << "dvId="<<dvId<<"vih id=" << hId << endl;
hId = mesh.vih_next(dvId, hId);
}while (hId != mesh.vih_first(dvId));
// find the cells whose whose one vertices are dvId
cId = mesh.vc_first(dvId);
do{
if (cId ==-1){
break;
}
if (cId != del_cells[0] && cId != del_cells[1]){
update_cells.push_back(cId);
//update_cells.push_back(mesh.IcId_from_hId(hId));
}
cId = mesh.vc_next(dvId, cId);
}while (cId != mesh.vc_first(dvId));
for (j=0; j<update_cells.size(); j++){
vector<int> vIds;
vIds.clear();
vIds = mesh.vIds_from_cId(update_cells[j]);
for (int jj=0; jj<3; jj++){
if (vIds[jj] == dvId){
vIds[jj] = rvId;
}
}
if ( !mesh.is_ccw(vIds)){
break;// for j
}
}
if (j==update_cells.size()){
break; // from (for x)
}
// dvId is not legal to be deleted
if (illegal_vId == -1){
illegal_vId = dvId;
dvId = mesh.svId_from_hId(old_hId);
rvId = mesh.tvId_from_hId(old_hId);
hId = mesh.ops_hId(old_hId);
continue;
}
else {// both vertices are illegal to be deleted
both_illegal = true;
break; // from (for x)
}
}// for x
if (both_illegal){
acId = mesh.cc_next(i, acId);
if (acId == -1){
break;
}
continue;
}
else {
legal = true;
break; // from (for k) since dvId is found
}
} // for k
if (legal){
//cout << "legal coarsen i=" << i << " acId=" << acId << endl;
// reset Mflag
for (j=0; j<update_halfedges.size(); j++){
mesh.halfedge(update_halfedges[j]).setTvId(rvId);
}
for (j=0; j<2; j++){
hId = mesh.ops_hId(del_halfedges[j]);
cId = mesh.IcId_from_hId(hId);
if (mesh.LhId_from_cId(cId) == hId){
int LhId = remain_halfedges[j];
int next_hId = mesh.next_hId(hId);
int prev_hId = mesh.prev_hId(hId);
if (mesh.dist(LhId) < mesh.dist(next_hId)){
LhId = next_hId;
}
if (mesh.dist(LhId) < mesh.dist(prev_hId)){
LhId = prev_hId;
}
mesh.cell(cId).setLhId(LhId);
//cout << " ____cId = " << cId << " LhId = " << LhId <<endl;
}
}
for (j=0; j<update_cells.size(); j++){
mesh.cell(update_cells[j]).setMflag(UNCHANGE);
}
//cout << "---update_cells:";
//for (int ii=0; ii<update_cells.size(); ii++){
// cout <<" " << update_cells[ii]<< "("<<mesh.cell(update_cells[ii]).mFlag()<<")";
//}
//cout << endl;
// reset OhId
int svId = mesh.svId_from_hId(del_halfedges[1]);
if (mesh.OhId_from_vId(svId) == del_halfedges[1]){
//mesh.vertex(svId).setOhId(mesh.ccw_hId(del_halfedges[1]));
//assert(mesh.svId_from_hId(del_halfedges[1])==
//mesh.svId_from_hId(remain_halfedges[1]));
mesh.vertex(svId).setOhId(mesh.ops_hId(remain_halfedges[1]));
//cout << "reset OhId of vertex " << svId << " to " << mesh.vertex(svId).OhId() << endl;
}
svId = mesh.svId_from_hId(mesh.ops_hId(del_halfedges[0]));
if (mesh.OhId_from_vId(svId) == mesh.ops_hId(del_halfedges[0])){
//mesh.vertex(svId).setOhId(mesh.ccw_hId(mutual_halfedges[0]));
//assert(mesh.svId_from_hId(del_halfedges[0])==
//mesh.svId_from_hId(remain_halfedges[0]));
mesh.vertex(svId).setOhId(remain_halfedges[0]);
//cout << "reset OhId of vertex " << svId << " to " << mesh.vertex(svId).OhId() << endl;
}
svId = mesh.svId_from_hId(mutual_halfedges[0]);
if (mesh.OhId_from_vId(svId) == mutual_halfedges[0]){
//mesh.vertex(svId).setOhId(mesh.ccw_hId(mutual_halfedges[0]));
//assert(mesh.svId_from_hId(mutual_halfedges[0])==
//mesh.svId_from_hId(remain_halfedges[0]));
mesh.vertex(svId).setOhId(remain_halfedges[1]);
//cout << "reset OhId of vertex " << svId << " to " << mesh.vertex(svId).OhId() << endl;
}
for (j=0; j<2; j++){
hId = mesh.ops_hId(del_halfedges[j]);
int phId = mesh.prev_hId(hId);
int nhId = mesh.next_hId(hId);
cId = mesh.IcId_from_hId(hId);
mesh.halfedge(remain_halfedges[j]).setIcId(cId);
mesh.halfedge(remain_halfedges[j]).setPhId(phId);
mesh.halfedge(remain_halfedges[j]).setNhId(nhId);
mesh.halfedge(nhId).setPhId(remain_halfedges[j]);
mesh.halfedge(phId).setNhId(remain_halfedges[j]);
mesh.halfedge(del_halfedges[j]).setIcId(-1);
}
// mark edges to be deleted
mesh.edge(mesh.eId_from_hId(mutual_halfedges[0])).setDel(true);
mesh.edge(mesh.eId_from_hId(del_halfedges[0])).setDel(true);
mesh.edge(mesh.eId_from_hId(del_halfedges[1])).setDel(true);
//cout << "deleted edges:"<< mesh.eId_from_hId(mutual_halfedges[0])
//<< " "<< mesh.eId_from_hId(del_halfedges[0])
//<< " "<< mesh.eId_from_hId(del_halfedges[1])<< endl;
// mark cells to be deleted
mesh.cell(del_cells[0]).setDel(true);
mesh.cell(del_cells[1]).setDel(true);
// delete dvId
mesh.vertex(dvId).set_isolated_v();
mesh.vertex(dvId).setDel(true);
}// if (legal)
}// if COARSEN
} // for i
// delete entities
mesh.delete_cells();
mesh.delete_edges();//mesh.display_info();
mesh.delete_vertices();
// reset mFlags
}// edge_collapse
}
/*****************************************************************************/
/* PMGT */
/* */
/* January, 2007 */
/* */
/* Copyright 2007 */
/* Wen Yu */
/* Department of Computing and Software */
/* McMaster University */
/* yuw4@mcmaster.ca */
/* */
/* This program may be freely redistributed under the condition that the */
/* copyright notices are not removed. You may distribute modified versions*/
/* of this code UNDER THE CONDITION THAT THIS CODE AND ANY MODIFICATIONS */
/* MADE TO IT IN THE SAME FILE REMAIN UNDER COPYRIGHT OF THE ORIGINAL */
/* AUTHOR, BOTH SOURCE AND OBJECT CODE ARE MADE FREELY AVAILABLE WITHOUT */
/* CHARGE, AND CLEAR NOTICE IS GIVEN OF THE MODIFICATIONS. */
/* */
/* This is the serial version of PMGT */
/* This file contains the class for corsening module. */
/*****************************************************************************/
#ifndef COARSENING
#define COARSENING
#endif
#ifndef MESH
#include "Mesh.h"
#endif
namespace PMGT{
class Coarsening{
public:
// coarsen the mesh by edge collapse
void edge_collapse(Mesh& mesh);
};
}
/*****************************************************************************/
/* PMGT */
/* */
/* January, 2007 */
/* */
/* Copyright 2007 */
/* Wen Yu */
/* Department of Computing and Software */
/* McMaster University */
/* yuw4@mcmaster.ca */
/* */
/* This program may be freely redistributed under the condition that the */
/* copyright notices are not removed. You may distribute modified versions*/
/* of this code UNDER THE CONDITION THAT THIS CODE AND ANY MODIFICATIONS */
/* MADE TO IT IN THE SAME FILE REMAIN UNDER COPYRIGHT OF THE ORIGINAL */
/* AUTHOR, BOTH SOURCE AND OBJECT CODE ARE MADE FREELY AVAILABLE WITHOUT */
/* CHARGE, AND CLEAR NOTICE IS GIVEN OF THE MODIFICATIONS. */
/* */
/* This is the serial version of PMGT */
/* This file includes classes for the edge module. */
/*****************************************************************************/
#ifndef EDGE
#define EDGE
#endif
#ifndef VERTEX
#include "Vertex.h"
#endif
namespace PMGT{
//namespace Edge{
//using namespace Vertex;
class Halfedge{
public:
Halfedge(int hId=-1, int TvId=-1, int IcId=-1, int PhId=-1, int NhId=-1){
hId_ = hId;
TvId_ = TvId;
IcId_ = IcId;
PhId_ = PhId;
NhId_ = NhId;
}
inline int hId(){ return hId_; }
inline int IcId(){ return IcId_; }
inline int TvId(){ return TvId_; }
inline int NhId(){ return NhId_; }
inline int PhId(){ return PhId_; }
inline void setHId(int hId){ hId_ = hId; }
inline void setTvId(int TvId){ TvId_ = TvId; }
inline void setIcId(int IcId){ IcId_ = IcId; }
inline void setNhId(int NhId){ NhId_ = NhId; }
inline void setPhId(int PhId){ PhId_ = PhId; }
inline bool is_boundary(){ return IcId_ == -1; }
//opposite halfedge
inline int ops_hId(){ return ((hId_ & 1) ? hId_-1: hId_+1); }
inline void hcopy(Halfedge& other){
hId_ = other.hId_;
TvId_ = other.TvId_;
IcId_ = other.IcId_;
PhId_ = other.PhId_;
NhId_ = other.NhId_;
}
private:
int hId_; //id
int TvId_; //target vertex
int IcId_; //its cel
int PhId_; //previous halfedge
int NhId_; //next halfedge
}; // end of class Halfedge
class Edge{
public:
Edge(int svId=-2, int tvId=-1, int eId=-1, bool del=false){
assert(svId != tvId);
eId_ = eId;
pair_[0].setHId(eId << 1);
pair_[0].setTvId(tvId);
pair_[1].setHId((eId << 1)+1);
pair_[1].setTvId(svId);
del_ = del;
}
inline int eId(){ return eId_;}
inline Halfedge* pair(){ return pair_; }
inline bool del(){ return del_; }
inline void setEId(int eId){ eId_ = eId; }
inline void setPair(Halfedge& h1, Halfedge& h2){
pair_[0].hcopy(h1);
pair_[1].hcopy(h2);
}
inline void setDel(bool del) { del_ = del; }
inline bool is_isolated_e(){
return pair_[0].IcId() == -1
&& pair_[1].IcId() == -1;
}
inline void set_isolated_e(){
pair_[0].setIcId(-1);
pair_[1].setIcId(-1);
}
inline bool same (int svId, int tvId){
int v1Id = pair_[0].TvId();
int v2Id = pair_[1].TvId();
return ((v1Id==svId && v2Id==tvId) || (v1Id==tvId && v2Id==svId));
}
inline void ecopy(Edge& other){
eId_ = other.eId_;
pair_[0].hcopy(other.pair_[0]);
pair_[1].hcopy(other.pair_[1]);
del_ = other.del_;
}
private:
int eId_; // id
Halfedge pair_[2]; //a pair of halfedges
bool del_; // a flag to indicate if the edge
// is marked to be deleted
}; // end of class Edge
//} // end of namespace Edge
} // end of namespace PMGT
/*****************************************************************************/
/* PMGT */
/* */
/* January, 2007 */
/* */
/* Copyright 2007 */
/* Wen Yu */
/* Department of Computing and Software */
/* McMaster University */
/* yuw4@mcmaster.ca */
/* */
/* This program may be freely redistributed under the condition that the */
/* copyright notices are not removed. You may distribute modified versions*/
/* of this code UNDER THE CONDITION THAT THIS CODE AND ANY MODIFICATIONS */
/* MADE TO IT IN THE SAME FILE REMAIN UNDER COPYRIGHT OF THE ORIGINAL */
/* AUTHOR, BOTH SOURCE AND OBJECT CODE ARE MADE FREELY AVAILABLE WITHOUT */
/* CHARGE, AND CLEAR NOTICE IS GIVEN OF THE MODIFICATIONS. */
/* */
/* This is the serial version of PMGT */
/*****************************************************************************/
#include "Input.h"
namespace PMGT{
// Read the mesh from two files
// One is the coordinates of points
// The other is the vertex list of cells
void Input::read_file(Mesh& mesh, char* vertexFile, char* cellFile){
/**/
FILE *v;
FILE *c;
Point p;
Ids ids;
vector<Point> points;
vector<Ids> cells;
char *s, *t;
char line[100];
bool error = false;
// Open the file. If NULL is returned there was an error
if((v = fopen(vertexFile, "r")) == NULL) {
cout << "Error opening file " << vertexFile << "." << endl;
exit(1);
}
if((c = fopen(cellFile, "r")) == NULL) {
cout << "Error opening file " << cellFile << "." << endl;
exit(1);
}
//assert(vertices_.size() == 0);
//assert(edges_.size() == 0);
//assert(cells_.size() == 0);
// get vertices
points.clear();
int count = 0;
while( fgets(line, sizeof(line), v) != NULL ) {
// Get each line from the infile
s = line;
p.clear();
p.push_back(strtod(s, &t));
while ( *s != ' ' && *s !='\n'){
s++;
}
if (*s == '\n'){
error = true;
break;
}
p.push_back(strtod(s, &t));
points.push_back(p);
count++;
}
fclose(v); // Close the file
if (error){ // error message for input file
cout <<"Something wrong in your input file " << vertexFile <<
" line " << count+1 << endl;
exit(1);
}
// get cells
int n=points.size();
count = 0;
cells.clear();
while( fgets(line, sizeof(line), c) != NULL ) {
// Get each line from the infile
s = line;
ids.clear();
ids.push_back(strtol(s, &t, 10));
if (ids[ids.size()-1] <0 || ids[ids.size()-1]>=n){
error = true;
break;
}
while ( *s != ' ' && *s !='\n'){
s++;
}
while(*s == ' ') s++;
if (*s == '\n'){
error = true;
break;
}
ids.push_back(strtol(s, &t, 10));
while(*s == ' ') s++;
if (ids[ids.size()-1] <0 || ids[ids.size()-1]>=n){
error = true;
break;
}
while ( *s != ' ' && *s !='\n'){
s++;
}
while(*s == ' ') s++;
if (*s == '\n'){
error = true;
break;
}
ids.push_back(strtol(s, &t, 10));
if (ids[ids.size()-1] <0 || ids[ids.size()-1]>=n){
error = true;
break;
}
cells.push_back(ids);
count++;
}
fclose(c);
if (error){ // error message for input file
cout <<"Something wrong in your input file " << cellFile <<
" line " << count+1 <<endl;
exit(1);
}
mesh.create(points, cells);
}
}
/*****************************************************************************/
/* PMGT */
/* */
/* January, 2007 */
/* */
/* Copyright 2007 */
/* Wen Yu */
/* Department of Computing and Software */
/* McMaster University */
/* yuw4@mcmaster.ca */
/* */
/* This program may be freely redistributed under the condition that the */
/* copyright notices are not removed. You may distribute modified versions*/
/* of this code UNDER THE CONDITION THAT THIS CODE AND ANY MODIFICATIONS */
/* MADE TO IT IN THE SAME FILE REMAIN UNDER COPYRIGHT OF THE ORIGINAL */
/* AUTHOR, BOTH SOURCE AND OBJECT CODE ARE MADE FREELY AVAILABLE WITHOUT */
/* CHARGE, AND CLEAR NOTICE IS GIVEN OF THE MODIFICATIONS. */
/* */
/* This is the serial version of PMGT */
/* This file includes classes for the input module. */
/*****************************************************************************/
#ifndef INPUT
#define INPUT
#endif
#ifndef MESH
#include "Mesh.h"
#endif
namespace PMGT{
class Input{
public:
// Read the mesh from two files
// One is the coordinates of points
// The other is the vertex list of cells
void read_file(Mesh& mesh, char* vertexFile, char* cellFile);
};
}
/*****************************************************************************/
/* PMGT */
/* */
/* January, 2007 */
/* */
/* Copyright 2007 */
/* Wen Yu */
/* Department of Computing and Software */
/* McMaster University */
/* yuw4@mcmaster.ca */
/* */
/* This program may be freely redistributed under the condition that the */
/* copyright notices are not removed. You may distribute modified versions*/
/* of this code UNDER THE CONDITION THAT THIS CODE AND ANY MODIFICATIONS */
/* MADE TO IT IN THE SAME FILE REMAIN UNDER COPYRIGHT OF THE ORIGINAL */
/* AUTHOR, BOTH SOURCE AND OBJECT CODE ARE MADE FREELY AVAILABLE WITHOUT */
/* CHARGE, AND CLEAR NOTICE IS GIVEN OF THE MODIFICATIONS. */
/* */
/* This is the serial version of PMGT */
/*****************************************************************************/
#include "Mesh.h"
namespace PMGT{
//namespace Mesh{
// Returns the id of the vertex that has given coordinate.
// Returns -1 if the vertex does not exist.
int Mesh::find_vertex(Point point){
for (int i=0; i<vertices_.size(); i++){
if (vertices_[i].point() == point)
return i;
}
return -1;
}
// Returns the id of the edge that has given points.
// Returns -1 if the edge does not exist.
int Mesh::find_edge(int svId, int tvId){
assert(is_valid_vId(svId));
assert(is_valid_vId(tvId));
for (int i=0; i<edges_.size(); i++){
if (edges_[i].pair()[0].TvId() == tvId){
if (edges_[i].pair()[1].TvId() == svId)
return i;
}
if (edges_[i].pair()[0].TvId() == svId){
if (edges_[i].pair()[1].TvId() == tvId)
return i;
}
}
return -1;
}
// Returns the id of the halfedge that has given start and targate points.
// Returns -1 if the halfedge does not exist.
int Mesh::find_halfedge(int svId, int tvId){
assert(is_valid_vId(svId));
assert(is_valid_vId(tvId));
for (int i=0; i<edges_.size(); i++){
if (edges_[i].pair()[0].TvId() == tvId){
if (edges_[i].pair()[1].TvId() == svId)
return (i<<1);
}
if (edges_[i].pair()[0].TvId() == svId){
if (edges_[i].pair()[1].TvId() == tvId)
return (i<<1)+1;
}
}
return -1;
}
// Returns the id of the cell that has given vertices.
// Returns -1 if the cell does not exist.
// Make sure that vIds and corresponding halfedges exist.
int Mesh::find_cell(vector<int> vIds){
assert(vIds.size() == 3);
for (int i=0; i<3; i++){
assert(is_valid_vId(vIds[i]));
}
vector<int> hId(3);
for (int i=0; i<3; i++){
hId[i] = find_halfedge(vIds[i], vIds[(i+1)%3]);
if(hId[i] == -1) return -1;
}
for (int i=0; i<cells_.size(); i++){
for (int j=0; j<3; j++){
if (cells_[i].LhId()==hId[j]){
int k;
for (k=0; k<3; k++){
if (vIds[k]=tvId_from_hId(hId[j])){
break;
}
}
if (k<3 && vIds[(k+1)%3]==tvId_from_hId(hId[(j+1)%3])
&& vIds[(k+2)%3]==tvId_from_hId(hId[(j+2)%3])){
// three vertices is target vertices of three halfedges
return i;
}
}
}
}
return -1;
}
// Create a vertex and add it to the end of the vertex list.
// Returns false if the vertex already exists.
bool Mesh::add_vertex(Point point){
int vId = find_vertex(point);
if (vId != -1) return false;
Vertex v(point, vertices_.size());
vertices_.push_back(v);
return true;
}
// Create an edge and add it to the end of the edge list.
// Returns false if the edge already exists.
bool Mesh::add_edge(int svId, int tvId){
assert(is_valid_vId(svId));
assert(is_valid_vId(tvId));
int eId = find_edge(svId, tvId);
if (eId != -1){
cout << "add edge " << svId << " " << tvId << " failed" << endl;
return false;
}
Edge e(svId, tvId, edges_.size());
e.pair()[0].setIcId(-1);
e.pair()[1].setIcId(-1);
edges_.push_back(e);
edge(edges_.size()-1).pair()[0].setIcId(-1);
edge(edges_.size()-1).pair()[1].setIcId(-1);
return true;
}
// Create a cell and add it to the end of the vertex list.
// Returns false if the cell already exists.
bool Mesh::add_cell(vector<int> vIds){
assert(vIds.size() == 3);
for (int i=0; i<3; i++){
assert(is_valid_vId(vIds[i]));
}
int cId = find_cell(vIds);
if (cId != -1) return false;
assert(cId == -1);
vector<int> hId(3);
for (int i=0; i<3; i++){
hId[i] = find_halfedge(vIds[i], vIds[(i+1)%3]);
assert(hId[i] != -1);
}
int LhId = hId[0];
if (dist(hId[1]) > dist(LhId)) LhId = hId[1];
if (dist(hId[2]) > dist(LhId)) LhId = hId[2];
//Cell c(cells_.size(), LhId);
Cell c;
cells_.push_back(c);
cId = cells_.size()-1;
cell(cId).setCId(cId);
cell(cId).setLhId(LhId);
// resolve connectivity of edges and vertices
for (int i=0; i<3; i++){
halfedge(hId[i]).setIcId(cId);
halfedge(hId[i]).setNhId(hId[(i+1)%3]);
halfedge(hId[i]).setPhId(hId[(i+2)%3]);
}
for (int i=0; i<3; i++){
int OhId = vertex(vIds[i]).OhId();
if (OhId ==-1 || (!is_b_h(ops_hId(OhId)))){
vertex(vIds[i]).setOhId(hId[i]);
}
else if(svId_from_hId(OhId) != vIds[i]){
vertex(vIds[i]).setOhId(hId[i]);
}
}
return true;
}
// update the cell using given vertex.
// Returns false if the cell does not exist
// or the new cell is already exists.
bool Mesh::update_cell(vector<int> vIds, int cId){
if (!is_valid_cId(cId)) {
cout << "update cell " << cId << " failed. " <<
cId << " is not valid." << endl;
return false;
}
int newId = find_cell(vIds);
if (newId != -1){
cout << "update cell " << cId << " failed. The cell (" <<
vIds[0]<<","<<vIds[1]<<","<<vIds[2]<<") exists."<<endl;
return false;
}
vector<int> hId(3);
for (int i=0; i<3; i++){
hId[i] = find_halfedge(vIds[i], vIds[(i+1)%3]);
assert(hId[i] != -1);
}
int LhId = hId[0];
if (dist(hId[1]) > dist(LhId)) LhId = hId[1];
if (dist(hId[2]) > dist(LhId)) LhId = hId[2];
Cell& c = cell(cId);
c.setLhId(LhId);
c.setMflag(UNCHANGE);
// resolve connectivity of edges and vertices
for (int i=0; i<3; i++){
halfedge(hId[i]).setIcId(c.cId());
halfedge(hId[i]).setNhId(hId[(i+1)%3]);
halfedge(hId[i]).setPhId(hId[(i+5)%3]);
int OhId = vertex(vIds[i]).OhId();
if (OhId ==-1 || (!is_b_h(ops_hId(OhId)))){
vertex(vIds[i]).setOhId(hId[i]);
}
else if(svId_from_hId(OhId) != vIds[i]){
vertex(vIds[i]).setOhId(hId[i]);
}
}
return true;
}
// refine two cells whose longest edges are oppsite to each other
bool Mesh::longest_ref2(int hId, int o_hId, int n_hId){
assert(o_hId == ops_hId(hId));
int cId = IcId_from_hId(hId);
int ops_cId = IcId_from_hId(o_hId);
vector<int> vIds;
// reserve vertices
if (cId != -1){
//vIds = vIds_from_cId(cId);
vIds.push_back(tvId_from_hId(hId));
vIds.push_back(tvId_from_hId(next_hId(hId)));
vIds.push_back(svId_from_hId(hId));
}
vector<int> ops_vIds;// = vIds_from_cId(ops_cId);
ops_vIds.push_back(tvId_from_hId(o_hId));
ops_vIds.push_back(tvId_from_hId(next_hId(o_hId)));
ops_vIds.push_back(svId_from_hId(o_hId));
if (cId !=-1){
assert(ops_vIds[0] == vIds[2]);
assert(ops_vIds[2] == vIds[0]);
}
// reset mFlag
cell(ops_cId).setMflag(UNCHANGE);
if (cId != -1){
cell(cId).setMflag(UNCHANGE);
}
// add new vertex
Point p = mid_point(hId);
assert(add_vertex(p));
int new_vId = n_of_v()-1;
// add/update edges
assert(add_edge(ops_vIds[1], new_vId));
if (cId != -1){
assert(add_edge(vIds[1], new_vId));
}
halfedge(hId).setTvId(new_vId);
assert(add_edge(ops_vIds[2], new_vId));
// add/update cells
int next_svId=0;
if (n_hId != -1){
for(int k=0; k<2; k++){
if(ops_vIds[k]==svId_from_hId(n_hId)){
next_svId = k;
break;
}
}
}
vector<int> temp_vIds;
temp_vIds.clear();
temp_vIds.push_back(new_vId);
temp_vIds.push_back(ops_vIds[next_svId]);
temp_vIds.push_back(ops_vIds[next_svId+1]);
assert(update_cell(temp_vIds, ops_cId));
if (next_svId == 0){
temp_vIds[1] = ops_vIds[1];
temp_vIds[2] = ops_vIds[2];
}
else {
temp_vIds[1] = ops_vIds[0];
temp_vIds[2] = ops_vIds[1];
}
assert(add_cell(temp_vIds));
if (cId != -1){
temp_vIds.clear();
temp_vIds.push_back(new_vId);
temp_vIds.push_back(vIds[0]);
temp_vIds.push_back(vIds[1]);
assert(update_cell(temp_vIds, cId));
temp_vIds[1] = vIds[1];
temp_vIds[2] = vIds[2];
assert(add_cell(temp_vIds));
}
}
// ****** delete an entity *****
// Delete vertices that marked to be deleted.
bool Mesh::delete_vertices(){
for (int i=vertices_.size()-1; i>=0; i--){
if (vertices_[i].del() == true){
// the vertex to be deleted is not the last one
if (vertices_.size()-1 != i){
int vnId = vertices_.size()-1;
int hId = vih_first(vnId);
do{
int old_hId = hId;
hId = vih_next(vnId, hId);
halfedge(old_hId).setTvId(i);
if (hId == -1){
break;
}
}while (hId != vih_first(vnId));
vertices_[i].vcopy(vertices_[vnId]);
vertices_[i].setVId(i);
}
vertices_.pop_back();
}
}
return true;
}
// Delete edges that marked to be deleted from the list.
bool Mesh::delete_edges(){
vector<int> vIds(2);
int j;
for (int i=edges_.size()-1; i>=0; i--){
if (edges_[i].del() == true){
//assert(IcId_from_hId(hId_from_eId(i,0)) == -1);
//assert(IcId_from_hId(hId_from_eId(i,1)) == -1);
if (i!=edges_.size()-1){
int enId = edges_.size()-1;
// relink last edge in the edge list
// this edge will be moved to to position i
vIds = vIds_from_eId(enId);
for (j=0; j<2; j++){
int hnj = hId_from_eId(enId,j);
int hij = hId_from_eId(i,j);
// resolve OhIds of endpoints
if (OhId_from_vId(vIds[j]) == hnj){
vertex(vIds[j]).setOhId(hij);
}
// resolve PhIds and NhIds
if (!is_b_h(hnj)){
halfedge(prev_hId(hnj)).setNhId(hij);
halfedge(next_hId(hnj)).setPhId(hij);
}
// resolve LhId of the incident cell
if (IcId_from_hId(hnj) != -1 &&
LhId_from_cId(IcId_from_hId(hnj))==hnj){
cell(IcId_from_hId(hnj)).setLhId(hij);
}
}// for j
// copy last edge
edges_[i].ecopy(edges_[enId]);
edges_[i].setEId(i);
edges_[i].pair()[0].setHId(i<<1);
edges_[i].pair()[1].setHId((i<<1)+1);
}// if i
// delete last edge
edges_.pop_back();
}
} // for i
return true;
}
// Delete cells that marked to be deleted from the list.
bool Mesh::delete_cells(){
//vector<int> hIds(3);
for (int i=cells_.size()-1; i>=0; i--){
if (cells_[i].del() == true){
// the cell to be deleted is not the last one
if (i!=cells_.size()-1){
int cnId = cells_.size()-1;
// relink last cell in the cell list
// this cell will be moved to cId
vector<int> hIds;
hIds.push_back(LhId_from_cId(cnId));
hIds.push_back(next_hId(LhId_from_cId(cnId)));
hIds.push_back(prev_hId(LhId_from_cId(cnId)));
for(int j=0; j<3; j++){
halfedge(hIds[j]).setIcId(i);
}
// copy last cell
cells_[i].ccopy(cells_[cnId]);
cells_[i].setCId(i);
}
// delete last cell
cells_.pop_back();
}
}
return true;
}
// create a mesh using two input variables.
// One is the coordinates of points
// The other is the vertex list of cells
bool Mesh::create(vector<Point> points, vector<Ids> cells){
int i,j;
int nv = points.size();
int nc = cells.size();
int eId[3];
vector<int> vIds;
for (i=0; i<nv; i++){
// point duplication check
if (!add_vertex(points[i])){
cout << "Duplicate point is detected " <<
"during mesh creatation."<< endl;
return false;
}
}
for (i=0; i<nc; i++){
vIds.clear();
for (j=0; j<3; j++){
// validation check
if (!is_valid_vId(cells[i][j])){
cout << "Invalid id is detected " <<
"during mesh creatation."<< endl;
return false;
}
// find vertices
vIds.push_back(cells[i][j]);
// boundary check
if (!is_b_v(vIds[j])){
cout << "Complex vertex is detected " <<
"during mesh creatation."<< endl;
return false;
}
}
// cell duplication check
if (find_cell(vIds) != -1){
cout << "Duplicate cell is detected " <<
"during mesh creatation."<< endl;
return false;
}
// add edges if necessary
for (j=0; j<3; j++){
eId[j] = find_edge(vIds[j], vIds[(j+1)%3]);
if (eId[j] == -1){
add_edge(vIds[j], vIds[(j+1)%3]);
}
}
// add the cell
add_cell(vIds);
}
}
// display the internal information of a mesh on the screen
void Mesh::display_info(){
vector<int> ids;
cout << endl <<"vertices:" << endl;
for (int i=0; i< vertices_.size(); i++){
cout << "id=" << vertex(i).vId() << " x=" << vertex(i).x() << " y=" << vertex(i).y() <<
" OhId=" << vertex(i).OhId() << endl;
}
cout <<endl << "edges:" << endl;
for (int i=0; i<edges_.size(); i++){
cout << "id=" << edge(i).eId() << " svId=" << vIds_from_eId(i)[0] <<
" tvId=" << vIds_from_eId(i)[1] << endl;
cout << "hid=" << edge(i).pair()[0].hId() << " prev=" << edge(i).pair()[0].PhId() <<
" next=" << edge(i).pair()[0].NhId() << " IcId=" << edge(i).pair()[0].IcId() << endl;
cout << "hid=" << edge(i).pair()[1].hId() << " prev=" << edge(i).pair()[1].PhId() <<
" next=" << edge(i).pair()[1].NhId() << " IcId=" << edge(i).pair()[1].IcId() << endl;
}
cout <<endl << "cells:" << endl;
for (int i=0; i< cells_.size(); i++){
cout << "id=" << cell(i).cId() << " LhId=" << cell(i).LhId() <<
" vIds=" << vIds_from_cId(i)[0] << ","
<< vIds_from_cId(i)[1] << ","
<< vIds_from_cId(i)[2] <<
" mFlag=" << cell(i).mFlag() << endl;
}
}
//}
}