BODY %%%%%%%%%Definizione dei caratteri % Definisco i caratteri BIG in ROMAN \font\biga=CMR10 scaled \magstep1 \font\bigb=CMR10 scaled \magstep2 \font\bigc=CMR10 scaled \magstep3 \font\bigd=CMR10 scaled \magstep4 \font\bige=CMR10 scaled \magstep5 % Definisco i caratteri BIG in GRASSETTO \font\bigbfa=CMBX10 scaled\magstep1 \font\bigbfb=CMBX10 scaled\magstep2 \font\bigbfc=CMBX10 scaled\magstep3 \font\bigbfd=CMBX10 scaled\magstep4 \font\bigbfe=CMBX10 scaled\magstep5 % Definisco i caratteri SMALL in ROMAN \font\sma=CMR9 \font\smb=CMR8 \font\smc=CMR7 \font\smd=CMR6 \font\sme=CMR5 % Definisco i caratteri SMALL in GRASSETTO \font\smbfa=CMBX9 \font\smbfb=CMBX8 \font\smbfc=CMBX7 \font\smbfd=CMBX6 \font\smbfe=CMBX5 %%%%%%%%%%%%%%%%%%Alcune Macro \def\menouno{-{\underline 1}} \def\piuuno{+{\underline 1}} \def\piumeno{\pm{\underline 1}} \def\zero{{\underline 0}} \def\grle{{\scriptscriptstyle {>\atop <}}} \def\volret{|\Lambda |} %%%%%%%%%%%%%%%%%%%%%%%%%%%%% Rettangoli %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %rect 'rettangolo' \def\rect#1#2{{\vcenter{\vbox{\hrule height.3pt \hbox{\vrule width.3pt height#2truecm \kern#1truecm \vrule width.3pt} \hrule height.3pt}}}} \def\square{\rect{0.25}{0.25}} %%%%%%%%%%%%%%%%%%%%% %FONTS \font\twelverm=cmr12 \font\twelvei=cmmi12 \font\twelvesy=cmsy10 \font\twelvebf=cmbx12 \font\twelvett=cmtt12 \font\twelveit=cmti12 \font\twelvesl=cmsl12 \font\ninerm=cmr9 \font\ninei=cmmi9 \font\ninesy=cmsy9 \font\ninebf=cmbx9 \font\ninett=cmtt9 \font\nineit=cmti9 \font\ninesl=cmsl9 \font\eightrm=cmr8 \font\eighti=cmmi8 \font\eightsy=cmsy8 \font\eightbf=cmbx8 \font\eighttt=cmtt8 \font\eightit=cmti8 \font\eightsl=cmsl8 \font\sixrm=cmr6 \font\sixi=cmmi6 \font\sixsy=cmsy6 \font\sixbf=cmbx6 \catcode`@=11 % we will access private macros of plain TeX (carefully) \newskip\ttglue %MACRO TWELVEPOINT % Macro Emilio \def\pa{pathwise approach} \def\ret{\Lambda_{N}} \def\volret{\vert\ret\vert} \def\eps{\varepsilon} \def\menouno{-{\underline 1}} \def\piuuno{+{\underline 1}} \def\zero{{\underline 0}} \def\aaa{{\cal A}} \def\faaa{\partial{\cal A}} \def\prot{{\cal P}} \def\bc{Blume--Capel} \def\grle{{\scriptscriptstyle {>\atop <}}} \def\fb{\partial B} \def\fd{\partial {\cal D}} \def\twelvepoint{\def\rm{\fam0\twelverm}% switch to 12-point type \textfont0=\twelverm \scriptfont0=\ninerm \scriptscriptfont0=\sevenrm \textfont1=\twelvei \scriptfont1=\ninei \scriptscriptfont1=\seveni \textfont2=\twelvesy \scriptfont2=\ninesy \scriptscriptfont2=\sevensy \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex \textfont\itfam=\twelveit \def\it{\fam\itfam\twelveit}% \textfont\slfam=\twelvesl \def\sl{\fam\slfam\twelvesl}% \textfont\ttfam=\twelvett \def\tt{\fam\ttfam\twelvett}% \textfont\bffam=\twelvebf \scriptfont\bffam=\ninebf \scriptscriptfont\bffam=\sevenbf \def\bf{\fam\bffam\twelvebf}% \tt \ttglue=.5em plus.25em minus.15em \normalbaselineskip=15pt \setbox\strutbox=\hbox{\vrule height10pt depth5pt width0pt}% \let\sc=\tenrm \let\big=\twelvebig \normalbaselines\rm} %MACRO TENPOINT \def\tenpoint{\def\rm{\fam0\tenrm}% switch to 10-point type \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm \textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei \textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex \textfont\itfam=\tenit \def\it{\fam\itfam\tenit}% \textfont\slfam=\tensl \def\sl{\fam\slfam\tensl}% \textfont\ttfam=\tentt \def\tt{\fam\ttfam\tentt}% \textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf \scriptscriptfont\bffam=\fivebf \def\bf{\fam\bffam\tenbf}% \tt \ttglue=.5em plus.25em minus.15em \normalbaselineskip=12pt \setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width0pt}% \let\sc=\eightrm \let\big=\tenbig \normalbaselines\rm} %MACRO NINEPOINT \def\ninepoint{\def\rm{\fam0\ninerm}% switch to 9-point type \textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm \textfont1=\ninei \scriptfont1=\sixi \scriptscriptfont1=\fivei \textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex \textfont\itfam=\nineit \def\it{\fam\itfam\nineit}% \textfont\slfam=\ninesl \def\sl{\fam\slfam\ninesl}% \textfont\ttfam=\ninett \def\tt{\fam\ttfam\ninett}% \textfont\bffam=\ninebf \scriptfont\bffam=\sixbf \scriptscriptfont\bffam=\fivebf \def\bf{\fam\bffam\ninebf}% \tt \ttglue=.5em plus.25em minus.15em \normalbaselineskip=11pt \setbox\strutbox=\hbox{\vrule height8pt depth3pt width0pt}% \let\sc=\sevenrm \let\big=\ninebig \normalbaselines\rm} %MACRO EIGHTPOINT \def\eightpoint{\def\rm{\fam0\eightrm}% switch to 8-point type \textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex \textfont\itfam=\eightit \def\it{\fam\itfam\eightit}% \textfont\slfam=\eightsl \def\sl{\fam\slfam\eightsl}% \textfont\ttfam=\eighttt \def\tt{\fam\ttfam\eighttt}% \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf \scriptscriptfont\bffam=\fivebf \def\bf{\fam\bffam\eightbf}% \tt \ttglue=.5em plus.25em minus.15em \normalbaselineskip=9pt \setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}% \let\sc=\sixrm \let\big=\eightbig \normalbaselines\rm} %MACRO BIG \def\twelvebig#1{{\hbox{$\textfont0=\twelverm\textfont2=\twelvesy \left#1\vbox to10pt{}\right.\n@space$}}} \def\tenbig#1{{\hbox{$\left#1\vbox to8.5pt{}\right.\n@space$}}} \def\ninebig#1{{\hbox{$\textfont0=\tenrm\textfont2=\tensy \left#1\vbox to7.25pt{}\right.\n@space$}}} \def\eightbig#1{{\hbox{$\textfont0=\ninerm\textfont2=\ninesy \left#1\vbox to6.5pt{}\right.\n@space$}}} \def\tenmath{\tenpoint\fam-1 } %for 10-point math in 9-point territory %%%%%%%%%%%%%%% FORMATO \magnification=\magstep1\hoffset=0.cm \voffset=1truecm\hsize=16.5truecm \vsize=21.truecm \baselineskip=14pt plus0.1pt minus0.1pt \parindent=12pt \lineskip=4pt\lineskiplimit=0.1pt \parskip=0.1pt plus1pt \def\ds{\displaystyle}\def\st{\scriptstyle}\def\sst{\scriptscriptstyle} \font\seven=cmr7 %%%%%%%%%%%%%%%% GRECO \let\a=\alpha \let\b=\beta \let\c=\chi \let\d=\delta \let\e=\varepsilon \let\f=\varphi \let\g=\gamma \let\h=\eta \let\k=\kappa \let\l=\lambda \let\m=\mu \let\n=\nu \let\o=\omega \let\p=\pi \let\ph=\varphi \let\r=\rho \let\s=\sigma \let\t=\tau \let\th=\vartheta \let\y=\upsilon \let\x=\xi \let\z=\zeta \let\D=\Delta \let\F=\Phi \let\G=\Gamma \let\L=\Lambda \let\Th=\Theta \let\O=\Omega \let\P=\Pi \let\Ps=\Psi \let\Si=\Sigma \let\X=\Xi \let\Y=\Upsilon %%%%%%%%%%%%%%% DEFINIZIONI LOCALI \let\ciao=\bye \def\fiat{{}} \def\pagina{{\vfill\eject}} \def\\{\noindent} \def\bra#1{{\langle#1|}} \def\ket#1{{|#1\rangle}} \def\media#1{{\langle#1\rangle}} \def\ie{\hbox{\it i.e.\ }} \let\ig=\int \let\io=\infty \let\i=\infty \let\dpr=\partial \def\V#1{\vec#1} \def\Dp{\V\dpr} \def\tende#1{\vtop{\ialign{##\crcr\rightarrowfill\crcr \noalign{\kern-1pt\nointerlineskip} \hskip3.pt${\scriptstyle #1}$\hskip3.pt\crcr}}} \def\otto{{\kern-1.truept\leftarrow\kern-5.truept\to\kern-1.truept}} \def\Z{{\bf Z^d}} \def\supnorm#1{\vert#1\vert_\infty} \def\grad#1#2{(\nabla_{\L_{#1}}#2)^2} %%%%%%%%%%%%%%%%%%%%% Numerazione pagine \def\data{\number\day/\ifcase\month\or gennaio \or febbraio \or marzo \or aprile \or maggio \or giugno \or luglio \or agosto \or settembre \or ottobre \or novembre \or dicembre \fi/\number\year} %%\newcount\tempo %%\tempo=\number\time\divide\tempo by 60} \setbox200\hbox{$\scriptscriptstyle \data $} \newcount\pgn \pgn=1 \def\foglio{\number\numsec:\number\pgn \global\advance\pgn by 1} \def\foglioa{A\number\numsec:\number\pgn \global\advance\pgn by 1} %\footline={\rlap{\hbox{\copy200}\ $\st[\number\pageno]$}\hss\tenrm %\foglio\hss} %\footline={\rlap{\hbox{\copy200}\ $\st[\number\pageno]$}\hss\tenrm %\foglioa\hss} % %%%%%%%%%%%%%%%%% EQUAZIONI CON NOMI SIMBOLICI %%% %%% per assegnare un nome simbolico ad una equazione basta %%% scrivere \Eq(...) o, in \eqalignno, \eq(...) o, %%% nelle appendici, \Eqa(...) o \eqa(...): %%% dentro le parentesi e al posto dei ... %%% si puo' scrivere qualsiasi commento; %%% per assegnare un nome simbolico ad una figura, basta scrivere %%% \geq(...); per avere i nomi %%% simbolici segnati a sinistra delle formule e delle figure si deve %%% dichiarare il documento come bozza, iniziando il testo con %%% \BOZZA. Sinonimi \Eq,\EQ,\EQS; \eq,\eqs; \Eqa,\Eqas;\eqa,\eqas. %%% All' inizio di ogni paragrafo si devono definire il %%% numero del paragrafo e della prima formula dichiarando %%% \numsec=... \numfor=... (brevetto Eckmannn); all'inizio del lavoro %%% bisogna porre \numfig=1 (il numero delle figure non contiene la sezione. %%% Si possono citare formule o figure seguenti; le corrispondenze fra nomi %%% simbolici e numeri effettivi sono memorizzate nel file \jobname.aux, che %%% viene letto all'inizio, se gia' presente. E' possibile citare anche %%% formule o figure che appaiono in altri file, purche' sia presente il %%% corrispondente file .aux; basta includere all'inizio l'istruzione %%% \include{nomefile} %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \global\newcount\numsec\global\newcount\numfor \global\newcount\numfig \gdef\profonditastruttura{\dp\strutbox} \def\senondefinito#1{\expandafter\ifx\csname#1\endcsname\relax} \def\SIA #1,#2,#3 {\senondefinito{#1#2} \expandafter\xdef\csname #1#2\endcsname{#3} \else \write16{???? ma #1,#2 e' gia' stato definito !!!!} \fi} \def\etichetta(#1){(\veroparagrafo.\veraformula) \SIA e,#1,(\veroparagrafo.\veraformula) \global\advance\numfor by 1 \write15{\string\FU (#1){\equ(#1)}} \write16{ EQ \equ(#1) == #1 }} \def \FU(#1)#2{\SIA fu,#1,#2 } \def\etichettaa(#1){(A\veroparagrafo.\veraformula) \SIA e,#1,(A\veroparagrafo.\veraformula) \global\advance\numfor by 1 \write15{\string\FU (#1){\equ(#1)}} \write16{ EQ \equ(#1) == #1 }} \def\getichetta(#1){Fig. \verafigura \SIA e,#1,{\verafigura} \global\advance\numfig by 1 \write15{\string\FU (#1){\equ(#1)}} \write16{ Fig. \equ(#1) ha simbolo #1 }} \newdimen\gwidth \def\BOZZA{ \def\alato(##1){ {\vtop to \profonditastruttura{\baselineskip \profonditastruttura\vss \rlap{\kern-\hsize\kern-1.2truecm{$\scriptstyle##1$}}}}} \def\galato(##1){ \gwidth=\hsize \divide\gwidth by 2 {\vtop to \profonditastruttura{\baselineskip \profonditastruttura\vss \rlap{\kern-\gwidth\kern-1.2truecm{$\scriptstyle##1$}}}}} } \def\alato(#1){} \def\galato(#1){} \def\veroparagrafo{\number\numsec}\def\veraformula{\number\numfor} \def\verafigura{\number\numfig} %\def\geq(#1){\getichetta(#1)\galato(#1)} \def\Eq(#1){\eqno{\etichetta(#1)\alato(#1)}} \def\eq(#1){\etichetta(#1)\alato(#1)} \def\Eqa(#1){\eqno{\etichettaa(#1)\alato(#1)}} \def\eqa(#1){\etichettaa(#1)\alato(#1)} \def\eqv(#1){\senondefinito{fu#1}$\clubsuit$#1\else\csname fu#1\endcsname\fi} \def\equ(#1){\senondefinito{e#1}\eqv(#1)\else\csname e#1\endcsname\fi} \let\EQS=\Eq\let\EQ=\Eq \let\eqs=\eq \let\Eqas=\Eqa \let\eqas=\eqa %%%%%%%%%%%%%%%%%% Numerazione verso il futuro ed eventuali paragrafi %%%%%%% precedenti non inseriti nel file da compilare \def\eop{\hfill\bbox$\,$} \def\bbox{\vrule height 1.5ex width 0.6em depth 0ex } \def\include#1{ \openin13=#1.aux \ifeof13 \relax \else \input #1.aux \closein13 \fi} \openin14=\jobname.aux \ifeof14 \relax \else \input \jobname.aux \closein14 \fi \openout15=\jobname.aux %%%%%%%%%%%%%%%%%%%%%%%%%%%% %\BOZZA \footline={\rlap{\hbox{\copy200}\ $\st[\number\pageno]$}\hss\tenrm \foglio\hss} \def\refj#1#2#3#4#5#6#7{\parindent 2.2em \item{[{\bf #1}]}{\rm #2,} {\it #3\/} {\rm #4} {\bf #5} {\rm #6} {(\rm #7)}} \numsec=0\numfor=1 \tolerance=10000 \font\ttlfnt=cmcsc10 scaled 1200 %small caps \font\bit=cmbxti10 %bold italic text mode % Author. Initials then last name in upper and lower case % Point after initials % \def\author#1 {\vskip 18pt\tolerance=10000 \noindent\centerline{\ttlfnt#1}\vskip 1cm} % % Address % \def\address#1 {\vskip 4pt\tolerance=10000 \noindent #1\vskip 0.5cm} % % Abstract % % This is PiCTeX, Version 1.1 9/21/87 % CAVEAT: The PiCTeX manual often has a more lucid explanation % of any given topic than you will find in the internal documentation % of the macros. % PiCTeX's commands can be classified into two groups: (1) public (or % external), and (2) private (or internal). The public macros are % discussed at length in the manual. The only discussion of the private % macros is the internal documentation. The private macros all have % names beginning with an exclamation point (!) of category code 11. % Since in normal usage "!" has category code 12, these macros can't % be accessed or modified by the general user. % The macros are organized into thematically related groups. For example, % the macros dealing with dots & dashes are all in the DASHPATTERN group. % The table below shows which macros are in which groups. The table % covers all public macros, and many (but not all) of PiCTeX's upper level % private macros. Following the table, the various groups are listed % in the order in which they appear in the table. % *********************** TABLE OF GROUPS OF MACROS ********************** % HACKS: Utility macros % \PiC % \PiCTeX % \placevalueinpts % \!!loop % \!cfor % \!copylist % \!ecfor % \!etfor % \!getnext % \!getnextvalueof % \!ifempty % \!ifnextchar % \!leftappend % \!listaddon % \!loop % \!lop % \!mlap % \!not % \!removept % \!rightappend % \!tfor % \!vmlap % \!wlet % ALLOCATION: Allocates registers % AREAS: Deals with plot areas % \axis % \grid % \invisibleaxes % \normalgraphs % \plotheading % \setplotarea % \visibleaxes % ARROWS: Draws arrows % \arrow % \betweenarrows % BARS: Draws bars % \putbar % \setbars % BOXES: Draws rectangles % \frame % \putrectangle % \rectangle % \shaderectangleson % \shaderectanglesoff % CURVES: Upper level plot commands % \hshade % \plot % \sethistograms % \setlinear % \setquadratic % \vshade % DASHPATTERNS: Sets up dash patterns % \findlength % \setdashes % \setdashesnear % \setdashpattern % \setdots % \setdotsnear % \setsolid % \!dashingoff % \!dashingon % DIVISION: Does long division of dimension registers % \Divide % \!divide % ELLIPSES: Draws ellipses and circles % \circulararc % \ellipticalarc % RULES: Draws rules, i.e., horizontal & vertical lines % \putrule % \!putdashedhline % \!putdashedvline % \!puthline % \!putsolidhline % \!putsolidvline % \!putvline % LINEAR ARC: Draws straight lines -- solid and dashed % \inboundscheckoff % \inboundscheckon % \!advancedashing % \!drawlinearsegment % \!initinboundscheck % \!linearsolid % \!lineardashed % \!ljoin % \!plotifinbounds % \!start % LOGTEN: Log_10 function % \!logten % PICTURES: Basic setups for PiCtures; \put commands % \accountingoff % \accountingon % \beginpicture % \endpicture % \endpicturesave % \lines % \multiput % \put % \setcoordinatemode % \setcoordinatesystem % \setdimensionmode % \stack % \Lines % \Xdistance % \Ydistance % \!dimenput % \!ifcoordmode % \!ifdimenmode % \!setcoordmode % \!setdimenmode % \!setputobject % PLOTTING: Things to do with plotting % \dontsavelinesandcurves % \replot % \savelinesandcurves % \setplotsymbol % \writesavefile % \!plot % PYTHAGORAS: Euclidean distance function % \placehypotenuse % \!Pythag % QUADRATIC ARC: Draws a quadratic arc % \!qjoin % ROTATIONS: Handles rotations % \startrotation % \stoprotation % \!rotateaboutpivot % \!rotateonly % SHADING: Handles shading % \setshadegrid % \setshadesymbol % \!lshade % \!qshade % \!starthshade % \!startvshade % TICKS: Draws ticks on graphs % \gridlines % \loggedticks % \nogridlines % \ticksin % \ticksout % \unloggesticks % ***************** END OF TABLE OF GROUPS OF MACROS ******************** \catcode`!=11 % ***** THIS MUST NEVER BE OMITTED % ******************************* % *** HACKS (Utility macros) *** % ******************************* % ** User commands % ** \PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC} % ** \PiCTeX{\PiC\kern-.11em\TeX} % ** \placevalueinpts of in {CONTROL SEQUENCE} % ** Internal commands % ** \!ifnextchar{CHARACTER}{TRUE ACTION}{FALSE ACTION} % ** \!tfor NAME := LIST \do {BODY} % ** \!etfor NAME:= LIST \do {BODY} % ** \!cfor NAME := LIST \do {BODY} % ** \!ecfor NAME:= LIST \do {BODY} % ** \!ifempty{MACRO}{TRUE ACTION}{FALSE ACTION} % ** \!getnext\\ITEMfrom\LIST % ** \!getnextvalueof\DIMEN\from\LIST % ** \!copylist\LISTMACRO_A\to\LISTMACRO_B % ** \!wlet\CONTROL_SEQUENCE_A=\CONTROL_SEQUENCE_B % ** \!listaddon ITEM LIST % ** \!rightappendITEM\withCS\to\LISTMACRO % ** \!leftappendITEM\withCS\to\LISTMACRO % ** \!lop\LISTMACRO\to\ITEM % ** \!loop ... repeat % ** \!!loop ... repeat % ** \!removept{DIMENSION REGISTER}{CONTROL SEQUENCE} % ** \!mlap{...} % ** \!vmlap{...} % ** \!not{TEK if-CONDITION} % ** First, here are the the PiCTeX logo, and the syllable PiC: \def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC} \def\PiCTeX{\PiC\kern-.11em\TeX} % ** The following macro expands to parameter #2 or parameter #3 according to % ** whether the next non-blank character following the macro is or is not #1. % ** Blanks following the macro are gobbled. \def\!ifnextchar#1#2#3{% \let\!testchar=#1% \def\!first{#2}% \def\!second{#3}% \futurelet\!nextchar\!testnext} \def\!testnext{% \ifx \!nextchar \!spacetoken \let\!next=\!skipspacetestagain \else \ifx \!nextchar \!testchar \let\!next=\!first \else \let\!next=\!second \fi \fi \!next} \def\\{\!skipspacetestagain} \expandafter\def\\ {\futurelet\!nextchar\!testnext} \def\\{\let\!spacetoken= } \\ % ** set \spacetoken to a space token % ** Borrow the "tfor" macro from Latex: % ** \!tfor NAME := LIST \do {BODY} % ** if, before expansion, LIST = T1 ... Tn, where each Ti is a token % ** or {...}, then executes BODY n times, with NAME = Ti on the % ** i-th iteration. Works for n=0. \def\!tfor#1:=#2\do#3{% \edef\!fortemp{#2}% \ifx\!fortemp\!empty \else \!tforloop#2\!nil\!nil\!!#1{#3}% \fi} \def\!tforloop#1#2\!!#3#4{% \def#3{#1}% \ifx #3\!nnil \let\!nextwhile=\!fornoop \else #4\relax \let\!nextwhile=\!tforloop \fi \!nextwhile#2\!!#3{#4}} % ** \!etfor NAME:= LIST\do {BODY} % ** This is like \!cfor, but LIST is any balanced token list whose complete % ** expansion has the form T1 ... Tn \def\!etfor#1:=#2\do#3{% \def\!!tfor{\!tfor#1:=}% \edef\!!!tfor{#2}% \expandafter\!!tfor\!!!tfor\do{#3}} % ** modify the Latex \tfor (token-for) loop to a \cfor (comma-for) loop. % ** \!cfor NAME := LIST \do {BODY} % ** if, before expansion, LIST = a1,a2,...an, then executes BODY n times, % ** with NAME = ai on the i-th iteration. Works for n=0. \def\!cfor#1:=#2\do#3{% \edef\!fortemp{#2}% \ifx\!fortemp\!empty \else \!cforloop#2,\!nil,\!nil\!!#1{#3}% \fi} \def\!cforloop#1,#2\!!#3#4{% \def#3{#1}% \ifx #3\!nnil \let\!nextwhile=\!fornoop \else #4\relax \let\!nextwhile=\!cforloop \fi \!nextwhile#2\!!#3{#4}} % ** \!ecfor NAME:= LIST\do {BODY} % ** This is like \!cfor, but LIST is any balanced token list whose complete % ** expansion has the form a1,a2,...,an. \def\!ecfor#1:=#2\do#3{% \def\!!cfor{\!cfor#1:=}% \edef\!!!cfor{#2}% \expandafter\!!cfor\!!!cfor\do{#3}} \def\!empty{} \def\!nnil{\!nil} \def\!fornoop#1\!!#2#3{} % ** \!ifempty{ARG}{TRUE ACTION}{FALSE ACTION} \def\!ifempty#1#2#3{% \edef\!emptyarg{#1}% \ifx\!emptyarg\!empty #2% \else #3% \fi} % ** \!getnext\\ITEMfrom\LIST % ** \LIST has the form \\{item1}\\{item2}\\{item3}...\\{itemk} % ** This routine sets \ITEM to item1, and cycles \LIST to % ** \\{item2}\\{item3}...\\{itemk}\\{item1} \def\!getnext#1\from#2{% \expandafter\!gnext#2\!#1#2}% \def\!gnext\\#1#2\!#3#4{% \def#3{#1}% \def#4{#2\\{#1}}% \ignorespaces} % ** \!getnextvalueof\DIMEN\from\LIST % ** Similar to !getnext. % ** \LIST has the form \\{dimen1}\\{dimen2}\\{dimen3} ... % ** \DIMEN is a dimension register % ** Works also for counts % \def\!getnextvalueof#1\from#2{% \expandafter\!gnextv#2\!#1#2}% \def\!gnextv\\#1#2\!#3#4{% #3=#1% \def#4{#2\\{#1}}% \ignorespaces} % ** \!copylist\LISTMACROA\to\LISTMACROB % ** makes the replacement text of LISTMACRO B identical to that of % ** list macro A. \def\!copylist#1\to#2{% \expandafter\!!copylist#1\!#2} \def\!!copylist#1\!#2{% \def#2{#1}\ignorespaces} % ** \!wlet\CSA=\CSB % ** lets control sequence \CSB = control sequence \CSA, and writes a % ** message to that effect in the log file using plain TEK's \wlog \def\!wlet#1=#2{% \let#1=#2 \wlog{\string#1=\string#2}} % ** \!listaddon ITEM LIST % ** LIST <-- LIST \\ ITEM \def\!listaddon#1#2{% \expandafter\!!listaddon#2\!{#1}#2} \def\!!listaddon#1\!#2#3{% \def#3{#1\\#2}} % ** \!rightappendITEM\to\LISTMACRO % ** \LISTMACRO --> \LISTMACRO\\{ITEM} %\def\!rightappend#1\to#2{\expandafter\!!rightappend#2\!{#1}#2} %\def\!!rightappend#1\!#2#3{\def#3{#1\\{#2}}} % ** \!rightappendITEM\withCS\to\LISTMACRO % ** \LISTMACRO --> \LISTMACRO||CS||{ITEM} \def\!rightappend#1\withCS#2\to#3{\expandafter\!!rightappend#3\!#2{#1}#3} \def\!!rightappend#1\!#2#3#4{\def#4{#1#2{#3}}} % ** \!leftappendITEM\withCS\to\LISTMACRO % ** \LISTMACRO --> CS||{ITEM}||\LISTMACRO \def\!leftappend#1\withCS#2\to#3{\expandafter\!!leftappend#3\!#2{#1}#3} \def\!!leftappend#1\!#2#3#4{\def#4{#2{#3}#1}} % ** \!lop\LISTMACRO\to\ITEM % ** \\{item1}\\{item2}\\{item3} ... --> \\{item2}\\{item3} ... % ** item1 --> \ITEM \def\!lop#1\to#2{\expandafter\!!lop#1\!#1#2} \def\!!lop\\#1#2\!#3#4{\def#4{#1}\def#3{#2}} % ** \!placeNUMBER\of\LISTMACRO\in\ITEM % ** the NUMBERth item of \LISTMACRO --> replacement text of \ITEM %\def\!place#1\of#2\in#3{\def#3{\outofrange}% %{\count0=#1\def\\##1{\advance\count0-1 \ifnum\count0=0 \gdef#3{##1}\fi}#2}} % ** Following code converts a commalist to a list macro, with all items % ** fully expanded. %\!ecfor\item:=\commalist\do{\expandafter\!rightappend\item\to\list} % ** \!loop ... repeat % ** This is exactly like TEX's \loop ... repeat. It can be used in nesting % ** two loops, without puting the inner one inside a group. \def\!loop#1\repeat{\def\!body{#1}\!iterate} \def\!iterate{\!body\let\!next=\!iterate\else\let\!next=\relax\fi\!next} % ** \!!loop ... repeat % ** This is exactly like TEX's \loop ... repeat. It can be used in nesting % ** two loops, without puting the inner one inside a group. \def\!!loop#1\repeat{\def\!!body{#1}\!!iterate} \def\!!iterate{\!!body\let\!!next=\!!iterate\else\let\!!next=\relax\fi\!!next} % (\multiput uses \!!loop) % ** \!removept{DIMENREG}{\CS} % ** Defines the control sequence CS to be the value (in points) in the % ** dimension register DIMENREG (but without the "pt" TEK usually adds) % ** E.g., after \dimen0=12.3pt \!removept\dimen0\A, \A expands to 12.3 \def\!removept#1#2{\edef#2{\expandafter\!!removePT\the#1}} {\catcode`p=12 \catcode`t=12 \gdef\!!removePT#1pt{#1}} % ** \pladevalueinpts of in {CONTROL SEQUENCE} \def\placevalueinpts of <#1> in #2 {% \!removept{#1}{#2}} % ** \!mlap{...} \!vmlap{...} % ** Center ... in a box of width 0. \def\!mlap#1{\hbox to 0pt{\hss#1\hss}} \def\!vmlap#1{\vbox to 0pt{\vss#1\vss}} % ** \!not{TEK if-CONDITION} % ** By a TEK if-CONDITION is meant something like % ** \ifnum\N<0, or \ifdim\A>\B % ** \!not produces an if-condition which is false if the original condition % ** is true, and true if the original condition is false. \def\!not#1{% #1\relax \!switchfalse \else \!switchtrue \fi \if!switch \ignorespaces} % ******************* % *** ALLOCATIONS *** % ******************* % This section allocates all the registers PiCTeX uses. Following % each allocation is a string of the form ....N.D...L......... ; % the various letters show which sections of PiCTeX make explicit % reference to that register, according to the following code: % H Hacks % A Areas % W arroWs % B Bars % X boXes % C Curves % D Dashpattterns % V diVision % E Ellipses % U rUles % L Linear arc % G loGten % P Pictures % O plOtting % Y pYthagoras % Q Quadratic arc % R Rotations % S Shading % T Ticks % Turn off messages from TeX's allocation macros \let\!!!wlog=\wlog % "\wlog" is defined in plain TeX \def\wlog#1{} \newdimen\headingtoplotskip %.A................. \newdimen\linethickness %.A..X....U........T \newdimen\longticklength %.A................T \newdimen\plotsymbolspacing %......D...L....Q... \newdimen\shortticklength %.A................T \newdimen\stackleading %.A..........P...... \newdimen\tickstovaluesleading %.A................T \newdimen\totalarclength %......D...L....Q... \newdimen\valuestolabelleading %.A................. \newbox\!boxA %.AW...............T \newbox\!boxB %..W................ \newbox\!picbox %............P...... \newbox\!plotsymbol %..........L..O..... \newbox\!putobject %............PO...S. \newbox\!shadesymbol %.................S. \newcount\!countA %.A....D..UL....Q.ST \newcount\!countB %......D..U.....Q.ST \newcount\!countC %...............Q..T \newcount\!countD %................... \newcount\!countE %.............O....T \newcount\!countF %.............O....T \newcount\!countG %..................T \newcount\!fiftypt %.........U......... \newcount\!intervalno %..........L....Q... \newcount\!npoints %..........L........ \newcount\!nsegments %.........U......... \newcount\!ntemp %............P...... \newcount\!parity %.................S. \newcount\!scalefactor %..................T \newcount\!tfs %.......V........... \newcount\!tickcase %..................T \newdimen\!Xleft %............P...... \newdimen\!Xright %............P...... \newdimen\!Xsave %.A................T \newdimen\!Ybot %............P...... \newdimen\!Ysave %.A................T \newdimen\!Ytop %............P...... \newdimen\!angle %........E.......... \newdimen\!arclength %..W......UL....Q... \newdimen\!areabloc %.A........L........ \newdimen\!arealloc %.A........L........ \newdimen\!arearloc %.A........L........ \newdimen\!areatloc %.A........L........ \newdimen\!bshrinkage %.................S. \newdimen\!checkbot %..........L........ \newdimen\!checkleft %..........L........ \newdimen\!checkright %..........L........ \newdimen\!checktop %..........L........ \newdimen\!dimenA %.AW.X.DVEUL..OYQRST \newdimen\!dimenB %....X.DVEU...O.QRS. \newdimen\!dimenC %..W.X.DVEU......RS. \newdimen\!dimenD %..W.X.DVEU....Y.RS. \newdimen\!dimenE %..W........G..YQ.S. \newdimen\!dimenF %...........G..YQ.S. \newdimen\!dimenG %...........G..YQ.S. \newdimen\!dimenH %...........G..Y..S. \newdimen\!dimenI %...BX.........Y.... \newdimen\!distacross %..........L....Q... \newdimen\!downlength %..........L........ \newdimen\!dp %.A..X.......P....S. \newdimen\!dshade %.................S. \newdimen\!dxpos %..W......U..P....S. \newdimen\!dxprime %...............Q... \newdimen\!dypos %..WB.....U..P...... \newdimen\!dyprime %...............Q... \newdimen\!ht %.A..X.......P....S. \newdimen\!leaderlength %......D..U......... \newdimen\!lshrinkage %.................S. \newdimen\!midarclength %...............Q... \newdimen\!offset %.A................T \newdimen\!plotheadingoffset %.A................. \newdimen\!plotsymbolxshift %..........L..O..... \newdimen\!plotsymbolyshift %..........L..O..... \newdimen\!plotxorigin %..........L..O..... \newdimen\!plotyorigin %..........L..O..... \newdimen\!rootten %...........G....... \newdimen\!rshrinkage %.................S. \newdimen\!shadesymbolxshift %.................S. \newdimen\!shadesymbolyshift %.................S. \newdimen\!tenAa %...........G....... \newdimen\!tenAc %...........G....... \newdimen\!tenAe %...........G....... \newdimen\!tshrinkage %.................S. \newdimen\!uplength %..........L........ \newdimen\!wd %....X.......P....S. \newdimen\!wmax %...............Q... \newdimen\!wmin %...............Q... \newdimen\!xB %...............Q... \newdimen\!xC %...............Q... \newdimen\!xE %..W.....E.L....Q.S. \newdimen\!xM %..W.....E......Q.S. \newdimen\!xS %..W.....E.L....Q.S. \newdimen\!xaxislength %.A................T \newdimen\!xdiff %..........L........ \newdimen\!xleft %............P...... \newdimen\!xloc %..WB.....U.......S. \newdimen\!xorigin %.A........L.P....S. \newdimen\!xpivot %................R.. \newdimen\!xpos %..........L.P..Q.ST \newdimen\!xprime %...............Q... \newdimen\!xright %............P...... \newdimen\!xshade %.................S. \newdimen\!xshift %..W.........PO...S. \newdimen\!xtemp %............P...... \newdimen\!xunit %.AWBX...EUL.P..QRS. \newdimen\!xxE %........E.......... \newdimen\!xxM %........E.......... \newdimen\!xxS %........E.......... \newdimen\!xxloc %..WB....EU......... \newdimen\!yB %...............Q... \newdimen\!yC %...............Q... \newdimen\!yE %..W.....E.L....Q... \newdimen\!yM %..W.....E......Q... \newdimen\!yS %..W.....E.L....Q... \newdimen\!yaxislength %.A................T \newdimen\!ybot %............P...... \newdimen\!ydiff %..........L........ \newdimen\!yloc %..WB.....U.......S. \newdimen\!yorigin %.A........L.P....S. \newdimen\!ypivot %................R.. \newdimen\!ypos %..........L.P..Q.ST \newdimen\!yprime %...............Q... \newdimen\!yshade %.................S. \newdimen\!yshift %..W.........PO...S. \newdimen\!ytemp %............P...... \newdimen\!ytop %............P...... \newdimen\!yunit %.AWBX...EUL.P..QRS. \newdimen\!yyE %........E.......... \newdimen\!yyM %........E.......... \newdimen\!yyS %........E.......... \newdimen\!yyloc %..WB....EU......... \newdimen\!zpt %.AWBX.DVEULGP.YQ.ST \newif\if!axisvisible %.A................. \newif\if!gridlinestoo %..................T \newif\if!keepPO %................... \newif\if!placeaxislabel %.A................. \newif\if!switch %H.................. \newif\if!xswitch %.A................T \newtoks\!axisLaBeL %.A................. \newtoks\!keywordtoks %.A................. \newwrite\!replotfile %.............O..... \newhelp\!keywordhelp{The keyword mentioned in the error message in unknown. Replace NEW KEYWORD in the indicated response by the keyword that should have been specified.} %.A................. % The following commands assign alternate names to some of the % above registers. "\!wlet" is defined in Hacks. \!wlet\!!origin=\!xM %.A................T \!wlet\!!unit=\!uplength %.A................T \!wlet\!Lresiduallength=\!dimenG %.........U......... \!wlet\!Rresiduallength=\!dimenF %.........U......... \!wlet\!axisLength=\!distacross %.A................T \!wlet\!axisend=\!ydiff %.A................T \!wlet\!axisstart=\!xdiff %.A................T \!wlet\!axisxlevel=\!arclength %.A................T \!wlet\!axisylevel=\!downlength %.A................T \!wlet\!beta=\!dimenE %...............Q... \!wlet\!gamma=\!dimenF %...............Q... \!wlet\!shadexorigin=\!plotxorigin %.................S. \!wlet\!shadeyorigin=\!plotyorigin %.................S. \!wlet\!ticklength=\!xS %..................T \!wlet\!ticklocation=\!xE %..................T \!wlet\!ticklocationincr=\!yE %..................T \!wlet\!tickwidth=\!yS %..................T \!wlet\!totalleaderlength=\!dimenE %.........U......... \!wlet\!xone=\!xprime %....X.............. \!wlet\!xtwo=\!dxprime %....X.............. \!wlet\!ySsave=\!yM %................... \!wlet\!ybB=\!yB %.................S. \!wlet\!ybC=\!yC %.................S. \!wlet\!ybE=\!yE %.................S. \!wlet\!ybM=\!yM %.................S. \!wlet\!ybS=\!yS %.................S. \!wlet\!ybpos=\!yyloc %.................S. \!wlet\!yone=\!yprime %....X.............. \!wlet\!ytB=\!xB %.................S. \!wlet\!ytC=\!xC %.................S. \!wlet\!ytE=\!downlength %.................S. \!wlet\!ytM=\!arclength %.................S. \!wlet\!ytS=\!distacross %.................S. \!wlet\!ytpos=\!xxloc %.................S. \!wlet\!ytwo=\!dyprime %....X.............. % Initial values for registers \!zpt=0pt % static \!xunit=1pt \!yunit=1pt \!arearloc=\!xunit \!areatloc=\!yunit \!dshade=5pt \!leaderlength=24in \!tfs=256 % static \!wmax=5.3pt % static \!wmin=2.7pt % static \!xaxislength=\!xunit \!xpivot=\!zpt \!yaxislength=\!yunit \!ypivot=\!zpt \plotsymbolspacing=.4pt \!dimenA=50pt \!fiftypt=\!dimenA % static \!rootten=3.162278pt % static \!tenAa=8.690286pt % static (A5) \!tenAc=2.773839pt % static (A3) \!tenAe=2.543275pt % static (A1) % Initial values for control sequences \def\!cosrotationangle{1} %................R.. \def\!sinrotationangle{0} %................R.. \def\!xpivotcoord{0} %................R.. \def\!xref{0} %............P...... \def\!xshadesave{0} %.................S. \def\!ypivotcoord{0} %................R.. \def\!yref{0} %............P...... \def\!yshadesave{0} %.................S. \def\!zero{0} %..................T % Reset TeX to report allocations \let\wlog=\!!!wlog % ************************************* % *** AREAS: Deals with plot areas *** % ************************************* % % ** User commands % ** \setplotarea x from LEFT XCOORD to RIGTH XCOORD, y from BOTTOM YCOORD % ** to TOP YCOORD % ** \axis BOTTOM-LEFT-TOP-RIGHT [SHIFTEDTO xy=COORD] [VISIBLE-INVISIBLE] % ** [LABEL {label}] [TICKS] / % ** \visibleaxes % ** \invisibleaxes % ** \plotheading {HEADING} % ** \grid {# of columns} {# of rows} % ** \normalgraphs % ** \normalgraphs % ** Sets defaults for graph setup. See Subsection 3.4 of manual. \def\normalgraphs{% \longticklength=.4\baselineskip \shortticklength=.25\baselineskip \tickstovaluesleading=.25\baselineskip \valuestolabelleading=.8\baselineskip \linethickness=.4pt \stackleading=.17\baselineskip \headingtoplotskip=1.5\baselineskip \visibleaxes \ticksout \nogridlines \unloggedticks} % % ** \setplotarea x from LEFT XCOORD to RIGTH XCOORD, y from BOTTOM YCOORD % ** to TOP YCOORD % ** Reserves space in PICBOX for a rectangular box with the indicated % ** coordinates. Must be specified before calls to \axis, % ** \grid, \plotheading. % ** See Subsection 3.1 of the manual. \def\setplotarea x from #1 to #2, y from #3 to #4 {% \!arealloc=\!M{#1}\!xunit \advance \!arealloc -\!xorigin \!areabloc=\!M{#3}\!yunit \advance \!areabloc -\!yorigin \!arearloc=\!M{#2}\!xunit \advance \!arearloc -\!xorigin \!areatloc=\!M{#4}\!yunit \advance \!areatloc -\!yorigin \!initinboundscheck \!xaxislength=\!arearloc \advance\!xaxislength -\!arealloc \!yaxislength=\!areatloc \advance\!yaxislength -\!areabloc \!plotheadingoffset=\!zpt \!dimenput {{\setbox0=\hbox{}\wd0=\!xaxislength\ht0=\!yaxislength\box0}} [bl] (\!arealloc,\!areabloc)} % % ** \visibleaxes, \invisibleaxes % ** Switches for setting visibility of subsequent axes. % ** See Subsection 3.2 of the manual. \def\visibleaxes{% \def\!axisvisibility{\!axisvisibletrue}} \def\invisibleaxes{% \def\!axisvisibility{\!axisvisiblefalse}} % % ** The next few macros enable the user to fix up an erroneous keyword % ** in the \axis command. % \newhelp is in ALLOCATIONS % \newhelp\!keywordhelp{The keyword mentioned in the error message in unknown. % Replace NEW KEYWORD in the indicated response by the keyword that % should have been specified.} \def\!fixkeyword#1{% \errhelp=\!keywordhelp \errmessage{Unrecognized keyword `#1': \the\!keywordtoks{NEW KEYWORD}'}} % \newtoks\!keywordtoks In ALLOCATIONS. \!keywordtoks={enter `i\fixkeyword} \def\fixkeyword#1{% \!nextkeyword#1 } % ** \axis BOTTOM-LEFT-TOP-RIGHT [SHIFTEDTO xy=COORD] [VISIBLE-INVISIBLE] % ** [LABEL {label}] [TICKS] / % ** Exactly one of the keywords BOTTOM, LEFT, TOP, RIGHT must be % ** specified. Axis is drawn along the indicated edge of the current % ** plot area, shifted if the SHIFTEDTO option is used, visible or % ** invisible according the selected option, with an optional LABEL, % ** and optional TICKS (see ticks.tex for the options avialabel with % ** TICKS). The TICKS option must be the last one specified. The \axis % ** MUST be terminated with a / followed by a space. % ** See Subsection 3.2 of the manual for more information. % ** The various options of the \axis command are processed by the % ** \!nextkeyword macro defined below. For example, % ** `\!nextkeyword shiftedto ' expands to `\!axisshiftedto'. \def\axis {% \def\!nextkeyword##1 {% \expandafter\ifx\csname !axis##1\endcsname \relax \def\!next{\!fixkeyword{##1}}% \else \def\!next{\csname !axis##1\endcsname}% \fi \!next}% \!offset=\!zpt \!axisvisibility \!placeaxislabelfalse \!nextkeyword} % ** This and the various macros that follow handle the keyword % ** specifications on the \axis command % ** See Subsection 3.2 of the manual. \def\!axisbottom{% \!axisylevel=\!areabloc \def\!tickxsign{0}% \def\!tickysign{-}% \def\!axissetup{\!axisxsetup}% \def\!axislabeltbrl{t}% \!nextkeyword} \def\!axistop{% \!axisylevel=\!areatloc \def\!tickxsign{0}% \def\!tickysign{+}% \def\!axissetup{\!axisxsetup}% \def\!axislabeltbrl{b}% \!nextkeyword} \def\!axisleft{% \!axisxlevel=\!arealloc \def\!tickxsign{-}% \def\!tickysign{0}% \def\!axissetup{\!axisysetup}% \def\!axislabeltbrl{r}% \!nextkeyword} \def\!axisright{% \!axisxlevel=\!arearloc \def\!tickxsign{+}% \def\!tickysign{0}% \def\!axissetup{\!axisysetup}% \def\!axislabeltbrl{l}% \!nextkeyword} \def\!axisshiftedto#1=#2 {% \if 0\!tickxsign \!axisylevel=\!M{#2}\!yunit \advance\!axisylevel -\!yorigin \else \!axisxlevel=\!M{#2}\!xunit \advance\!axisxlevel -\!xorigin \fi \!nextkeyword} \def\!axisvisible{% \!axisvisibletrue \!nextkeyword} \def\!axisinvisible{% \!axisvisiblefalse \!nextkeyword} \def\!axislabel#1 {% \!axisLaBeL={#1}% \!placeaxislabeltrue \!nextkeyword} \expandafter\def\csname !axis/\endcsname{% \!axissetup % This could done already by "ticks"; if so, now \relax \if!placeaxislabel \!placeaxislabel \fi \if +\!tickysign % ** (A "top" axis) \!dimenA=\!axisylevel \advance\!dimenA \!offset % ** dimA = top of the axis structure \advance\!dimenA -\!areatloc % ** dimA = excess over the plot area \ifdim \!dimenA>\!plotheadingoffset \!plotheadingoffset=\!dimenA % ** Greatest excess over the plot area \fi \fi} % ** \grid {c} {r} % ** Partitions the plot area into c columns and r rows; see Subsection 3.3 % ** of the manual. % ** (Other grid patterns can be drawn with the TICKS option of the \axis % ** command. \def\grid #1 #2 {% \!countA=#1\advance\!countA 1 \axis bottom invisible ticks length <\!zpt> andacross quantity {\!countA} / \!countA=#2\advance\!countA 1 \axis left invisible ticks length <\!zpt> andacross quantity {\!countA} / } % ** \plotheading{HEADING} % ** Places HEADING centered above the top of the plotarea (and above % ** any top axis ticks marks, tick labels, and axis label); see % ** Subsection 3.3 of the manual. \def\plotheading#1 {% \advance\!plotheadingoffset \headingtoplotskip \!dimenput {#1} [B] <.5\!xaxislength,\!plotheadingoffset> (\!arealloc,\!areatloc)} % ** From here on, the routines are internal. \def\!axisxsetup{% \!axisxlevel=\!arealloc \!axisstart=\!arealloc \!axisend=\!arearloc \!axisLength=\!xaxislength \!!origin=\!xorigin \!!unit=\!xunit \!xswitchtrue \if!axisvisible \!makeaxis \fi} \def\!axisysetup{% \!axisylevel=\!areabloc \!axisstart=\!areabloc \!axisend=\!areatloc \!axisLength=\!yaxislength \!!origin=\!yorigin \!!unit=\!yunit \!xswitchfalse \if!axisvisible \!makeaxis \fi} \def\!makeaxis{% \setbox\!boxA=\hbox{% (Make a pseudo-y[x] tick for an x[y]-axis) \beginpicture \!setdimenmode \setcoordinatesystem point at {\!zpt} {\!zpt} \putrule from {\!zpt} {\!zpt} to {\!tickysign\!tickysign\!axisLength} {\!tickxsign\!tickxsign\!axisLength} \endpicturesave <\!Xsave,\!Ysave>}% \wd\!boxA=\!zpt \!placetick\!axisstart} \def\!placeaxislabel{% \advance\!offset \valuestolabelleading \if!xswitch \!dimenput {\the\!axisLaBeL} [\!axislabeltbrl] <.5\!axisLength,\!tickysign\!offset> (\!axisxlevel,\!axisylevel) \advance\!offset \!dp % ** advance offset by the "tallness" \advance\!offset \!ht % ** of the label \else \!dimenput {\the\!axisLaBeL} [\!axislabeltbrl] <\!tickxsign\!offset,.5\!axisLength> (\!axisxlevel,\!axisylevel) \fi \!axisLaBeL={}} % ******************************* % *** ARROWS (Draws arrows) *** % ******************************* % % ** User commands % ** \arrow [MID FRACTION, BASE FRACTION] % ** [] from XFROM YFROM to XTO YTO % ** \betweenarrows {TEXT} [orientation & shift] from XFROM YFROM to XTO YTO % ** \arrow [MID FRACTION, BASE FRACTION] % ** [] from XFROM YFROM to XTO YTO % ** Draws an arrow from (XFROM,YFROM) to (XTO,YTO). The arrow head % ** is constructed two quadratic arcs, which extend back a distance % ** ARROW HEAD LENGTH (a dimension) on both sides of the arrow shaft. % ** All the way back the arcs are a distance BASE FRACTION*ARROW HEAD % ** LENGTH apart, while half-way back they are a distance MID FRACTION* % ** ARROW HEAD LENGTH apart. is optional, and has % ** its usual interpreation. See Subsection 5.4 of the manual. \def\arrow <#1> [#2,#3]{% \!ifnextchar<{\!arrow{#1}{#2}{#3}}{\!arrow{#1}{#2}{#3}<\!zpt,\!zpt> }} \def\!arrow#1#2#3<#4,#5> from #6 #7 to #8 #9 {% % % ** convert to dimensions \!xloc=\!M{#8}\!xunit \!yloc=\!M{#9}\!yunit \!dxpos=\!xloc \!dimenA=\!M{#6}\!xunit \advance \!dxpos -\!dimenA \!dypos=\!yloc \!dimenA=\!M{#7}\!yunit \advance \!dypos -\!dimenA \let\!MAH=\!M% ** save current c/d mode \!setdimenmode% ** go into dimension mode % \!xshift=#4\relax \!yshift=#5\relax% ** pick up shift \!reverserotateonly\!xshift\!yshift% ** back rotate shift \advance\!xshift\!xloc \advance\!yshift\!yloc % % ** draw shaft of arrow \!xS=-\!dxpos \advance\!xS\!xshift \!yS=-\!dypos \advance\!yS\!yshift \!start (\!xS,\!yS) \!ljoin (\!xshift,\!yshift) % % ** find 32*cosine and 32*sine of angle of rotation \!Pythag\!dxpos\!dypos\!arclength \!divide\!dxpos\!arclength\!dxpos \!dxpos=32\!dxpos \!removept\!dxpos\!!cos \!divide\!dypos\!arclength\!dypos \!dypos=32\!dypos \!removept\!dypos\!!sin % % ** construct arrowhead \!halfhead{#1}{#2}{#3}% ** draw half of arrow head \!halfhead{#1}{-#2}{-#3}% ** draw other half % \let\!M=\!MAH% ** restore old c/d mode \ignorespaces} % % ** draw half of arrow head \def\!halfhead#1#2#3{% \!dimenC=-#1% \divide \!dimenC 2 % ** half way back \!dimenD=#2\!dimenC% ** half the mid width \!rotate(\!dimenC,\!dimenD)by(\!!cos,\!!sin)to(\!xM,\!yM) \!dimenC=-#1% ** all the way back \!dimenD=#3\!dimenC \!dimenD=.5\!dimenD% ** half the full width \!rotate(\!dimenC,\!dimenD)by(\!!cos,\!!sin)to(\!xE,\!yE) \!start (\!xshift,\!yshift) \advance\!xM\!xshift \advance\!yM\!yshift \advance\!xE\!xshift \advance\!yE\!yshift \!qjoin (\!xM,\!yM) (\!xE,\!yE) \ignorespaces} % ** \betweenarrows {TEXT} [orientation & shift] from XFROM YFROM to XTO YTO % ** Makes things like <--- text --->, using arrow heads from TeX's fonts. % ** See Subsection 5.4 of the manual. \def\betweenarrows #1#2 from #3 #4 to #5 #6 {% \!xloc=\!M{#3}\!xunit \!xxloc=\!M{#5}\!xunit% \!yloc=\!M{#4}\!yunit \!yyloc=\!M{#6}\!yunit% \!dxpos=\!xxloc \advance\!dxpos by -\!xloc \!dypos=\!yyloc \advance\!dypos by -\!yloc \advance\!xloc .5\!dxpos \advance\!yloc .5\!dypos % \let\!MBA=\!M% ** save current coord\dimen mode \!setdimenmode% ** express locations in dimens \ifdim\!dypos=\!zpt \ifdim\!dxpos<\!zpt \!dxpos=-\!dxpos \fi \put {\!lrarrows{\!dxpos}{#1}}#2{} at {\!xloc} {\!yloc} \else \ifdim\!dxpos=\!zpt \ifdim\!dypos<\!zpt \!dypos=-\!zpt \fi \put {\!udarrows{\!dypos}{#1}}#2{} at {\!xloc} {\!yloc} \fi \fi \let\!M=\!MBA% ** restore previous c/d mode \ignorespaces} % ** Subroutine for left-right between arrows \def\!lrarrows#1#2{% #1=width, #2=text {\setbox\!boxA=\hbox{$\mkern-2mu\mathord-\mkern-2mu$}% \setbox\!boxB=\hbox{$\leftarrow$}\!dimenE=\ht\!boxB \setbox\!boxB=\hbox{}\ht\!boxB=2\!dimenE \hbox to #1{$\mathord\leftarrow\mkern-6mu \cleaders\copy\!boxA\hfil \mkern-6mu\mathord-$% \kern.4em $\vcenter{\box\!boxB}$$\vcenter{\hbox{#2}}$\kern.4em $\mathord-\mkern-6mu \cleaders\copy\!boxA\hfil \mkern-6mu\mathord\rightarrow$}}} % ** Subroutine for up-down between arrows \def\!udarrows#1#2{% #1=width, #2=text {\setbox\!boxB=\hbox{#2}% \setbox\!boxA=\hbox to \wd\!boxB{\hss$\vert$\hss}% \!dimenE=\ht\!boxA \advance\!dimenE \dp\!boxA \divide\!dimenE 2 \vbox to #1{\offinterlineskip \vskip .05556\!dimenE \hbox to \wd\!boxB{\hss$\mkern.4mu\uparrow$\hss}\vskip-\!dimenE \cleaders\copy\!boxA\vfil \vskip-\!dimenE\copy\!boxA \vskip\!dimenE\copy\!boxB\vskip.4em \copy\!boxA\vskip-\!dimenE \cleaders\copy\!boxA\vfil \vskip-\!dimenE \hbox to \wd\!boxB{\hss$\mkern.4mu\downarrow$\hss} \vskip .05556\!dimenE}}} % *************************** % *** BARS (Draws bars) *** % *************************** % % ** User commands: % ** \putbar [] breadth from XSTART YSTART % ** to XEND YEND % ** \setbars [] breadth baseline at XY = COORD % ** [baselabels ([B_ORIENTATION_x,B_ORIENTATION_y] )] % ** [endlabels ([E_ORIENTATION_x,E_ORIENTATION_y] )] % ** \putbar [] breadth from XSTART YSTART % ** to XEND YEND % ** Either XSTART=XEND or YSTART=YEND. Draws a rectangle between % ** (XSTART,YSTART) & (XEND,YEND). The "depth" of the rectangle % ** is determined by those two plot positions; its other % ** dimension "breadth" is specified by the dimension BREADTH. % ** See Subsection 4.2 of the manual. \def\putbar#1breadth <#2> from #3 #4 to #5 #6 {% \!xloc=\!M{#3}\!xunit \!xxloc=\!M{#5}\!xunit% \!yloc=\!M{#4}\!yunit \!yyloc=\!M{#6}\!yunit% \!dypos=\!yyloc \advance\!dypos by -\!yloc \!dimenI=#2 % \ifdim \!dimenI=\!zpt % ** If 0 breadth \putrule#1from {#3} {#4} to {#5} {#6} % ** Then draw line \else % ** Else, put in a rectangle \let\!MBar=\!M% ** save current c/d mode \!setdimenmode % ** go into dimension mode \divide\!dimenI 2 \ifdim \!dypos=\!zpt \advance \!yloc -\!dimenI % ** Equal y coordinates \advance \!yyloc \!dimenI \else \advance \!xloc -\!dimenI % ** Equal x coordinates \advance \!xxloc \!dimenI \fi \putrectangle#1corners at {\!xloc} {\!yloc} and {\!xxloc} {\!yyloc} \let\!M=\!MBar % ** restore c/d mode \fi \ignorespaces} % ** \setbars [] breadth baseline at XY = COORD % ** [baselabels ([B_ORIENTATION_x,B_ORIENTATION_y] )] % ** [endlabels ([E_ORIENTATION_x,E_ORIENTATION_y] )] % ** This command puts PiCTeX into the bar graph drawing mode described % ** in Subsection 4.4 of the manual. \def\setbars#1breadth <#2> baseline at #3 = #4 {% \edef\!barshift{#1}% \edef\!barbreadth{#2}% \edef\!barorientation{#3}% \edef\!barbaseline{#4}% \def\!bardobaselabel{\!bardoendlabel}% \def\!bardoendlabel{\!barfinish}% \let\!drawcurve=\!barcurve \!setbars} \def\!setbars{% \futurelet\!nextchar\!!setbars} \def\!!setbars{% \if b\!nextchar \def\!!!setbars{\!setbarsbget}% \else \if e\!nextchar \def\!!!setbars{\!setbarseget}% \else \def\!!!setbars{\relax}% \fi \fi \!!!setbars} \def\!setbarsbget baselabels (#1) {% \def\!barbaselabelorientation{#1}% \def\!bardobaselabel{\!!bardobaselabel}% \!setbars} \def\!setbarseget endlabels (#1) {% \edef\!barendlabelorientation{#1}% \def\!bardoendlabel{\!!bardoendlabel}% \!setbars} % ** \!barcurve % ** Draws a bargraph with preset values of barshift, barbreadth, % ** barorientation (x or y) and barbaseline (coordinate) \def\!barcurve #1 #2 {% \if y\!barorientation \def\!basexarg{#1}% \def\!baseyarg{\!barbaseline}% \else \def\!basexarg{\!barbaseline}% \def\!baseyarg{#2}% \fi \expandafter\putbar\!barshift breadth <\!barbreadth> from {\!basexarg} {\!baseyarg} to {#1} {#2} \def\!endxarg{#1}% \def\!endyarg{#2}% \!bardobaselabel} \def\!!bardobaselabel "#1" {% \put {#1}\!barbaselabelorientation{} at {\!basexarg} {\!baseyarg} \!bardoendlabel} \def\!!bardoendlabel "#1" {% \put {#1}\!barendlabelorientation{} at {\!endxarg} {\!endyarg} \!barfinish} \def\!barfinish{% \!ifnextchar/{\!finish}{\!barcurve}} % ******************************** % *** BOXES (Draws rectangles) *** % ******************************** % % ** User commands: % ** \putrectangle [] corners at XCOORD1 YCOORD1 % ** and XCOORD2 YCOORD2 % ** \shaderectangleson % ** \shaderectanglesoff % ** \frame [] {TEXT} % ** \rectangle % % % ** \putrectangle [] corners at XCOORD1 YCOORD1 % ** and XCOORD2 YCOORD2 % ** Draws a rectangle with corners at (X1,Y1), (X2,Y1), (X1,Y2), (X2,Y2) % ** Lines have thickness \linethickness, and overlap at the corners. % ** The optional field functions as with a \put command. % ** See Subsection 4.2 of the manual. \def\putrectangle{% \!ifnextchar<{\!putrectangle}{\!putrectangle<\!zpt,\!zpt> }} \def\!putrectangle<#1,#2> corners at #3 #4 and #5 #6 {% % % ** get locations \!xone=\!M{#3}\!xunit \!xtwo=\!M{#5}\!xunit% \!yone=\!M{#4}\!yunit \!ytwo=\!M{#6}\!yunit% \ifdim \!xtwo<\!xone \!dimenI=\!xone \!xone=\!xtwo \!xtwo=\!dimenI \fi \ifdim \!ytwo<\!yone \!dimenI=\!yone \!yone=\!ytwo \!ytwo=\!dimenI \fi \!dimenI=#1\relax \advance\!xone\!dimenI \advance\!xtwo\!dimenI \!dimenI=#2\relax \advance\!yone\!dimenI \advance\!ytwo\!dimenI \let\!MRect=\!M% ** save current coord/dimen mode \!setdimenmode % % ** shade rectangle if appropriate \!shaderectangle % % ** draw horizontal edges \!dimenI=.5\linethickness \advance \!xone -\!dimenI% ** adjust x-location to overlap corners \advance \!xtwo \!dimenI% ** ditto \putrule from {\!xone} {\!yone} to {\!xtwo} {\!yone} \putrule from {\!xone} {\!ytwo} to {\!xtwo} {\!ytwo} % % ** draw vertical edges \advance \!xone \!dimenI% ** restore original x-values \advance \!xtwo -\!dimenI% \advance \!yone -\!dimenI% ** adjust y-location to overlap corners \advance \!ytwo \!dimenI% ** ditto \putrule from {\!xone} {\!yone} to {\!xone} {\!ytwo} \putrule from {\!xtwo} {\!yone} to {\!xtwo} {\!ytwo} % \let\!M=\!MRect% ** restore coord/dimen mode \ignorespaces} % ** \shaderectangleson % ** Subsequent rectangles will be shaded according to % ** the current shading pattern. Affects \putrectangle, \putbar, % ** \frame, \sethistograms, and \setbars. See Subsection 7.5 of the manual. \def\shaderectangleson{% \def\!shaderectangle{\!!shaderectangle}% \ignorespaces} % ** \shaderectanglesoff % ** Suppresses \shaderectangleson. The default. \def\shaderectanglesoff{% \def\!shaderectangle{}% \ignorespaces} \shaderectanglesoff % ** The following internal routine shades the current rectangle, when % ** \!shaderectangle = \!!shaderectangle . \def\!!shaderectangle{% \!dimenA=\!xtwo \advance \!dimenA -\!xone \!dimenB=\!ytwo \advance \!dimenB -\!yone \ifdim \!dimenA<\!dimenB \!startvshade (\!xone,\!yone,\!ytwo) \!lshade (\!xtwo,\!yone,\!ytwo) \else \!starthshade (\!yone,\!xone,\!xtwo) \!lshade (\!ytwo,\!xone,\!xtwo) \fi \ignorespaces} % ** \frame [] {TEXT} % ** Draws a frame of thickness linethickness about the box enclosing % ** TEXT; the frame is separated from the box by a distance of % ** SEPARATION. The result is an hbox with the same baseline as TEXT. % ** If is omitted, you get the effect of <0pt>. % ** See Subsection 4.2 of the manual. \def\frame{% \!ifnextchar<{\!frame}{\!frame<\!zpt> }} \long\def\!frame<#1> #2{% \beginpicture \setcoordinatesystem units <1pt,1pt> point at 0 0 \put {#2} [Bl] at 0 0 \!dimenA=#1\relax \!dimenB=\!wd \advance \!dimenB \!dimenA \!dimenC=\!ht \advance \!dimenC \!dimenA \!dimenD=\!dp \advance \!dimenD \!dimenA \let\!MFr=\!M \!setdimenmode \putrectangle corners at {-\!dimenA} {-\!dimenD} and {\!dimenB} {\!dimenC} \!setcoordmode \let\!M=\!MFr \endpicture \ignorespaces} % ** \rectangle % ** Constructs a rectangle of width WIDTH and heigth HEIGHT. % ** See Subsection 4.2 of the manual. \def\rectangle <#1> <#2> {% \setbox0=\hbox{}\wd0=#1\ht0=#2\frame {\box0}} % ********************************************* % *** CURVES (Upper level \plot commands) *** % ********************************************* % % ** User commands % ** \plot DATA / % ** \plot "FILE NAME" % ** \setquadratic % ** \setlinear % ** \sethistograms % ** \vshade ... % ** \hshade ... % \plot: multi-purpose command. Draws histograms, bar graphs, piecewise-linear % or piecewise quadratic curves, depending on the setting of \!drawcurve. % See Subsections 4.3-4.5, 5.1, 5.2 of the manual. \def\plot{% \!ifnextchar"{\!plotfromfile}{\!drawcurve}} \def\!plotfromfile"#1"{% \expandafter\!drawcurve \input #1 /} % Command to set piecewise quadratic mode % See Subsections 5.1, 7.3, and 7.4 of the manual. \def\setquadratic{% \let\!drawcurve=\!qcurve \let\!!Shade=\!!qShade \let\!!!Shade=\!!!qShade} % Command to set piecewise linear mode % See Subsections 5.1, 7.3, and 7.4 of the manual. \def\setlinear{% \let\!drawcurve=\!lcurve \let\!!Shade=\!!lShade \let\!!!Shade=\!!!lShade} % Command to set histogram mode % See Subsection 4.3 of the manual. \def\sethistograms{% \let\!drawcurve=\!hcurve} % Commands to cycle through list of coordinates in piecewise quadratic % interpolation mode \def\!qcurve #1 #2 {% \!start (#1,#2) \!Qjoin} \def\!Qjoin#1 #2 #3 #4 {% \!qjoin (#1,#2) (#3,#4) % \!qjoin is defined in QUADRATIC \!ifnextchar/{\!finish}{\!Qjoin}} % Commands to cycle through list of coordinates in piecewise linear % interpolation mode \def\!lcurve #1 #2 {% \!start (#1,#2) \!Ljoin} \def\!Ljoin#1 #2 {% \!ljoin (#1,#2) % \!ljoin is defined in LINEAR \!ifnextchar/{\!finish}{\!Ljoin}} \def\!finish/{\ignorespaces} % Command to cycle through list of coordinates in histogram mode \def\!hcurve #1 #2 {% \edef\!hxS{#1}% \edef\!hyS{#2}% \!hjoin} \def\!hjoin#1 #2 {% \putrectangle corners at {\!hxS} {\!hyS} and {#1} {#2} \edef\!hxS{#1}% \!ifnextchar/{\!finish}{\!hjoin}} % \vshade: See Subsection 7.3 of the manual. \def\vshade #1 #2 #3 {% \!startvshade (#1,#2,#3) \!Shadewhat} % \hshade: See Subsection 7.4 of the manual. \def\hshade #1 #2 #3 {% \!starthshade (#1,#2,#3) \!Shadewhat} % Commands to cycle through coordinates and optional "edge effect" % fields while shading. \def\!Shadewhat{% \futurelet\!nextchar\!Shade} \def\!Shade{% \if <\!nextchar \def\!nextShade{\!!Shade}% \else \if /\!nextchar \def\!nextShade{\!finish}% \else \def\!nextShade{\!!!Shade}% \fi \fi \!nextShade} \def\!!lShade<#1> #2 #3 #4 {% \!lshade <#1> (#2,#3,#4) % \!lshade is defined in SHADING \!Shadewhat} \def\!!!lShade#1 #2 #3 {% \!lshade (#1,#2,#3) \!Shadewhat} \def\!!qShade<#1> #2 #3 #4 #5 #6 #7 {% \!qshade <#1> (#2,#3,#4) (#5,#6,#7) % \!qshade is defined in SHADING \!Shadewhat} \def\!!!qShade#1 #2 #3 #4 #5 #6 {% \!qshade (#1,#2,#3) (#4,#5,#6) \!Shadewhat} % ** Set default interpolation mode \setlinear % ******************************************** % *** DASHPATTERNS (Sets up dash patterns) *** % ******************************************** % ** User commands: % ** \setdashpattern % ** \setdots % ** \setdotsnear for % ** \setdashes % ** \setdashesnear for % ** \setsolid % ** \findlength {CURVE CMDS} % ** Internal commands: % ** \!dashingon % ** \!dashingoff % ** Dash patterns are specified by a balanced token list whose complete % ** expansion has the form: DIMEN1,DIMEN2,DIMEN3,DIMEN4,... ; this produces % ** an arc of length DIMEN1, a skip of length DIMEN2, an arc of length % ** DIMEN3, a skip of length DIMEN4, ... . Any number of DIMEN values may % ** be given. The pattern is repeated as many times (perhaps fractional) % ** as necessary to draw the curve. % ** A dash pattern remains in effect until it is overridden by a call to % ** \setdashpattern, or to \setdots, \setdotsnear ... , \setdashes, % ** \setdashesnear ... , or \setsolid. % ** Solid lines are the default. % ** \def\setdashpattern % ** The following routine converts a balanced list of tokens whose % ** complete expansion has the form DIMEN1,DIMEN2, ... , DIMENk into % ** three list macros that are used in drawing dashed rules and curves: % ** !Flist: \!Rule{DIMEN1}\!Skip{DIMEN2}\!Rule{DIMEN3}\!Skip{DIMEN4} ... % ** !Blist: ...\!Skip{DIMEN4}\!Rule{DIMEN3}\!Skip{DIMEN2}\!Rule{DIMEN1} % ** !UDlist: \\{DIMEN1}\\{DIMEN2}\\{DIMEN3}\\{DIMEN4} ...; % ** calculates \!leaderlength := DIMEN1 + ... + DIMENk; and % ** sets the curve drawing routines to dash mode. % ** Those lists are used by the curve drawing routines. % ** Dimenj ... may be given as an explicit dimension (e.g., 5pt), or % ** as an expression involving a dimension register (e.g., -2.5\dimen0). % ** See Subsection 6.2 of the manual \def\setdashpattern <#1>{% \def\!Flist{}\def\!Blist{}\def\!UDlist{}% \!countA=0 \!ecfor\!item:=#1\do{% \!dimenA=\!item\relax \expandafter\!rightappend\the\!dimenA\withCS{\\}\to\!UDlist% \advance\!countA 1 \ifodd\!countA \expandafter\!rightappend\the\!dimenA\withCS{\!Rule}\to\!Flist% \expandafter\!leftappend\the\!dimenA\withCS{\!Rule}\to\!Blist% \else \expandafter\!rightappend\the\!dimenA\withCS{\!Skip}\to\!Flist% \expandafter\!leftappend\the\!dimenA\withCS{\!Skip}\to\!Blist% \fi}% \!leaderlength=\!zpt \def\!Rule##1{\advance\!leaderlength ##1}% \def\!Skip##1{\advance\!leaderlength ##1}% \!Flist% \ifdim\!leaderlength>\!zpt \else \def\!Flist{\!Skip{24in}}\def\!Blist{\!Skip{24in}}\ignorespaces \def\!UDlist{\\{\!zpt}\\{24in}}\ignorespaces \!leaderlength=24in \fi \!dashingon} % ** \!dashingon -- puts the curve drawing routines into dash mode % ** \!dashingoff -- puts the curve drawing routines into solid mode % ** These are internal commands, invoked by \setdashpattern and \setsolid \def\!dashingon{% \def\!advancedashing{\!!advancedashing}% \def\!drawlinearsegment{\!lineardashed}% \def\!puthline{\!putdashedhline}% \def\!putvline{\!putdashedvline}% % \def\!putsline{\!putdashedsline}% \ignorespaces}% \def\!dashingoff{% \def\!advancedashing{\relax}% \def\!drawlinearsegment{\!linearsolid}% \def\!puthline{\!putsolidhline}% \def\!putvline{\!putsolidvline}% % \def\!putsline{\!putsolidsline}% \ignorespaces} % ** \setdots -- sets up a dot/skip pattern where dot (actually % ** the current plotsymbol) is plunked down once for every LENGTH % ** traveled along the curve. LENGTH defaults to 5pt. % ** See Subsection 6.1 of the manual. \def\setdots{% \!ifnextchar<{\!setdots}{\!setdots<5pt>}} \def\!setdots<#1>{% \!dimenB=#1\advance\!dimenB -\plotsymbolspacing \ifdim\!dimenB<\!zpt \!dimenB=\!zpt \fi \setdashpattern <\plotsymbolspacing,\!dimenB>} % ** \setdotsnear for % ** sets up a dot pattern where the dots are approximately LENGTH apart, % ** the total length of the pattern is ARC LENGTH, and the pattern % ** begins and ends with a dot. See Subsection 6.3 of the manual. \def\setdotsnear <#1> for <#2>{% \!dimenB=#2\relax \advance\!dimenB -.05pt \!dimenC=#1\relax \!countA=\!dimenC \!dimenD=\!dimenB \advance\!dimenD .5\!dimenC \!countB=\!dimenD \divide \!countB \!countA \ifnum 1>\!countB \!countB=1 \fi \divide\!dimenB \!countB \setdots <\!dimenB>} % ** \setdashes -- sets up a dash/skip pattern where the dash % ** and the skip are each of length LENGTH (the dash is formed by % ** plunking down the current plotsymbol over an arc of length LENGTH % ** and so may actually be longer than LENGTH. LENGTH defaults to 5pt. % ** See Subsection 6.1 of the manual. \def\setdashes{% \!ifnextchar<{\!setdashes}{\!setdashes<5pt>}} \def\!setdashes<#1>{\setdashpattern <#1,#1>} % ** \setdashesnear ... % ** Like \setdotsnear; the pattern begins and ends with a dash. % ** See Subsection 6.3 of the manual. \def\setdashesnear <#1> for <#2>{% \!dimenB=#2\relax \!dimenC=#1\relax \!countA=\!dimenC \!dimenD=\!dimenB \advance\!dimenD .5\!dimenC \!countB=\!dimenD \divide \!countB \!countA \ifodd \!countB \else \advance \!countB 1 \fi \divide\!dimenB \!countB \setdashes <\!dimenB>} % ** \setsolid -- puts the curve drawing routines in "solid line" mode, % ** the default mode. See Subsection 6.1 of the manual. \def\setsolid{% \def\!Flist{\!Rule{24in}}\def\!Blist{\!Rule{24in}}% \def\!UDlist{\\{24in}\\{\!zpt}}% \!dashingoff} \setsolid % ** \findlength {CURVE CMDS} % ** PiCTeX executes the \start, \ljoin, and \qjoin cmds comprising % ** CURVE CMDS without plotting anything, but stashes the length % ** of the phantom curve away in \totalarclength. % ** See Subsection 6.3 of the manual. \def\findlength#1{% \begingroup \setdashpattern <0pt, \maxdimen> \setplotsymbol ({}) \dontsavelinesandcurves #1% \endgroup \ignorespaces} % ************************************************************* % *** DIVISION (Does long division of dimension registers) *** % ************************************************************* % ** User command: % ** \Divide {DIVIDEND} by {DIVISOR} forming {RESULT} % ** Internal command % ** \!divide{DIVIDEND}{DIVISOR}{RESULT} % ** \!divide DIVIDEND [by] DIVISOR [to get] ANSWER % ** Divides the dimension DIVIDEND by the dimension DIVISOR, placing the % ** quotient in the dimension register ANSWER. Values are understood to % ** be in points. E.g. 12.5pt/1.4pt=8.92857pt. % ** Quotient is accurate to 1/65536pt=2**[-16]pt % ** |DIVISOR| should be < 2048pt (about 28 inches). \def\!divide#1#2#3{% \!dimenB=#1% ** dimB holds current remainder (r) \!dimenC=#2% ** dimC holds divisor (d) \!dimenD=\!dimenB% ** dimD holds quotient q=r/d for this \divide \!dimenD \!dimenC% ** step, in units of scaled pts \!dimenA=\!dimenD% ** dimA eventually holds answer (a) \multiply\!dimenD \!dimenC% ** r <-- r - dq \advance\!dimenB -\!dimenD% ** First step complete. Have integer part % ** of a, and corresponding remainder. \!dimenD=\!dimenC% ** Temporarily use dimD to hold |d| \ifdim\!dimenD<\!zpt \!dimenD=-\!dimenD \fi \ifdim\!dimenD<64pt% ** Branch on the magnitude of |d| \!divstep[\!tfs]\!divstep[\!tfs]% \else \!!divide \fi #3=\!dimenA\ignorespaces} % ** The following code handles divisors d with % ** (1) .88in = 64pt <= d < 256pt = 3.54in % ** (2) 3.54in = 256pt <= d < 2048pt = 28.34in % ** Anything bigger than that may result in an overflow condition. % ** For our purposes, we should never even see case (2). \def\!!divide{% \ifdim\!dimenD<256pt \!divstep[64]\!divstep[32]\!divstep[32]% \else \!divstep[8]\!divstep[8]\!divstep[8]\!divstep[8]\!divstep[8]% \!dimenA=2\!dimenA \fi} % ** The following macro does the real long division work. \def\!divstep[#1]{% ** #1 = "B" \!dimenB=#1\!dimenB% ** r <-- B*r \!dimenD=\!dimenB% ** dimD holds quotient q=r/d for this \divide \!dimenD by \!dimenC% ** step, in units of scaled pts \!dimenA=#1\!dimenA% ** a <-- B*a + q \advance\!dimenA by \!dimenD% \multiply\!dimenD by \!dimenC% ** r <-- r - dq \advance\!dimenB by -\!dimenD} % ** \Divide: See Subsection 9.3 of the manual. \def\Divide <#1> by <#2> forming <#3> {% \!divide{#1}{#2}{#3}} % ********************************************* % *** ELLIPSES (Draws ellipses and circles) *** % ********************************************* % ** User commands % ** \ellipticalarc axes ratio A:B DEGREES degrees from XSTART YSTART % ** center at XCENTER YCENTER % ** \circulararc DEGREES degrees from XSTART YSTART % ** center at XCENTER YCENTER % ** Internal command % ** \!sinandcos{32*ANGLE in radians}{32*SIN}{32*COS} % ** \ellipticalarc axes ratio A:B DEGREES degrees from XSTART YSTART % ** center at XCENTER YCENTER % ** Draws a elliptical arc starting at the coordinate point (XSTART,YSTART). % ** The center of the ellipse of which the arc is a segment is at % ** (XCENTER,YCENTER). % ** The arc extends through an angle of DEGREES degrees (may be + or -). % ** A:B is the ratio of the length of the xaxis to the length of % ** the yaxis of the ellipse % ** Sqrt{[(XSTART-XCENTER)/A]**2 + [(YSTART-YCENTER)/B]**2} % ** must be < 512pt (about 7in). % ** Doesn't modify the dimensions (ht, dp, wd) of the PiCture under % ** construction. % ** \circulararc -- See Subsection 5.3 of the manual. \def\circulararc{% \ellipticalarc axes ratio 1:1 } % ** \ellipticalarc -- See Subsection 5.3 of the manual. \def\ellipticalarc axes ratio #1:#2 #3 degrees from #4 #5 center at #6 #7 {% \!angle=#3pt\relax% ** get angle \ifdim\!angle>\!zpt \def\!sign{}% ** counterclockwise \else \def\!sign{-}\!angle=-\!angle% ** clockwise \fi \!xxloc=\!M{#6}\!xunit% ** convert CENTER to dimension \!yyloc=\!M{#7}\!yunit \!xxS=\!M{#4}\!xunit% ** get STARTing point on rim of ellipse \!yyS=\!M{#5}\!yunit \advance\!xxS -\!xxloc% ** make center of ellipse (0,0) \advance\!yyS -\!yyloc \!divide\!xxS{#1pt}\!xxS % ** scale point on ellipse to point on \!divide\!yyS{#2pt}\!yyS % corresponding circle % \let\!MC=\!M% ** save current c/d mode \!setdimenmode% ** go into dimension mode % \!xS=#1\!xxS \advance\!xS\!xxloc \!yS=#2\!yyS \advance\!yS\!yyloc \!start (\!xS,\!yS)% \!loop\ifdim\!angle>14.9999pt% ** draw in major portion of ellipse \!rotate(\!xxS,\!yyS)by(\!cos,\!sign\!sin)to(\!xxM,\!yyM) \!rotate(\!xxM,\!yyM)by(\!cos,\!sign\!sin)to(\!xxE,\!yyE) \!xM=#1\!xxM \advance\!xM\!xxloc \!yM=#2\!yyM \advance\!yM\!yyloc \!xE=#1\!xxE \advance\!xE\!xxloc \!yE=#2\!yyE \advance\!yE\!yyloc \!qjoin (\!xM,\!yM) (\!xE,\!yE) \!xxS=\!xxE \!yyS=\!yyE \advance \!angle -15pt \repeat \ifdim\!angle>\!zpt% ** complete remaining arc, if any \!angle=100.53096\!angle% ** convert angle to radians, divide \divide \!angle 360 % ** by 2, and multiply by 32 \!sinandcos\!angle\!!sin\!!cos% ** get 32*sin & 32*cos \!rotate(\!xxS,\!yyS)by(\!!cos,\!sign\!!sin)to(\!xxM,\!yyM) \!rotate(\!xxM,\!yyM)by(\!!cos,\!sign\!!sin)to(\!xxE,\!yyE) \!xM=#1\!xxM \advance\!xM\!xxloc \!yM=#2\!yyM \advance\!yM\!yyloc \!xE=#1\!xxE \advance\!xE\!xxloc \!yE=#2\!yyE \advance\!yE\!yyloc \!qjoin (\!xM,\!yM) (\!xE,\!yE) \fi % \let\!M=\!MC% ** restore c/d mode \ignorespaces}% ** if appropriate % ** \!rotate(XREG,YREG)by(32cos,32sin)to(XXREG,YYREG) % ** rotates (XREG,YREG) by angle with specfied scaled cos & sin to % ** (XXREG,YYREG). Uses \!dimenA & \!dimenB as scratch registers. \def\!rotate(#1,#2)by(#3,#4)to(#5,#6){% \!dimenA=#3#1\advance \!dimenA -#4#2% ** Rcos(x+t)=Rcosx*cost - Rsinx*sint \!dimenB=#3#2\advance \!dimenB #4#1% ** Rsin(x+t)=Rsinx*cost + Rcosx*sint \divide \!dimenA 32 \divide \!dimenB 32 #5=\!dimenA #6=\!dimenB \ignorespaces} \def\!sin{4.17684}% ** 32*sin(pi/24) (pi/24=7.5deg) \def\!cos{31.72624}% ** 32*cos(pi/24) % ** \!sinandcos{32*ANGLE in radians}{\SINCS}{\COSCS} % ** Computes the 32*sine and 32*cosine of a small ANGLE expressed in % ** radians/32 and puts these values in the replacement texts of % ** \SINCS and \COSCS \def\!sinandcos#1#2#3{% \!dimenD=#1% ** angle is expressed in radians/32: 1pt = 1/32rad \!dimenA=\!dimenD% ** dimA will eventually contain 32sin(angle)in pts \!dimenB=32pt% ** dimB will eventually contain 32cos(angle)in pts \!removept\!dimenD\!value% ** get value of 32*angle, without "pt" \!dimenC=\!dimenD% ** holds 32*angle**i/i! in pts \!dimenC=\!value\!dimenC \divide\!dimenC by 64 % ** now 32*angle**2/2 \advance\!dimenB by -\!dimenC% ** 32-32*angle**2/2 \!dimenC=\!value\!dimenC \divide\!dimenC by 96 % ** now 32*angle**3/3! \advance\!dimenA by -\!dimenC% ** now 32*(angle-angle**3/6) \!dimenC=\!value\!dimenC \divide\!dimenC by 128 % ** now 32*angle**4/4! \advance\!dimenB by \!dimenC% \!removept\!dimenA#2% ** set 32*sin(angle) \!removept\!dimenB#3% ** set 32*cos(angle) \ignorespaces} % ***************************************************************** % *** RULES (Draws rules, i.e., horizontal & vertical lines) *** % ***************************************************************** % ** User command: % ** \putrule [] from XCOORD1 YCOORD1 % ** to XCOORD2 YCOORD2 % ** Internal commands: % ** \!puthline [] (h = horizontal) % ** Set by dashpat to either: \!putsolidhline or \!putdashedhline % ** \!putvline [] (v = vertical) % ** Either: \!putsolidvline or \!putdashedvline % ** \putrule [] from XCOORD1 YCOORD1 % ** to XCOORD2 YCOORD2 % ** Draws a rule -- dashed or solid depending on the current dash pattern -- % ** from (X1,Y1) to (X2,Y2). Uses TEK's \hrule & \vrule & \leaders % ** constructions to handle horizontal & vertical lines efficiently both % ** in terms of execution time and space in the DVI file. % ** See Subsection 4.1 of the manual. \def\putrule#1from #2 #3 to #4 #5 {% \!xloc=\!M{#2}\!xunit \!xxloc=\!M{#4}\!xunit% \!yloc=\!M{#3}\!yunit \!yyloc=\!M{#5}\!yunit% \!dxpos=\!xxloc \advance\!dxpos by -\!xloc \!dypos=\!yyloc \advance\!dypos by -\!yloc % \ifdim\!dypos=\!zpt \def\!!Line{\!puthline{#1}}\ignorespaces \else \ifdim\!dxpos=\!zpt \def\!!Line{\!putvline{#1}}\ignorespaces \else \def\!!Line{} \fi \fi \let\!ML=\!M% ** save current coord\dimen mode \!setdimenmode% ** express locations in dimens \!!Line% \let\!M=\!ML% ** restore previous c/d mode \ignorespaces} % ** \!putsolidhline [] % ** Place horizontal solid line \def\!putsolidhline#1{% \ifdim\!dxpos>\!zpt \put{\!hline\!dxpos}#1[l] at {\!xloc} {\!yloc} \else \put{\!hline{-\!dxpos}}#1[l] at {\!xxloc} {\!yyloc} \fi \ignorespaces} % ** \!putsolidvline [shifted ] % ** Place vertical solid line \def\!putsolidvline#1{% \ifdim\!dypos>\!zpt \put{\!vline\!dypos}#1[b] at {\!xloc} {\!yloc} \else \put{\!vline{-\!dypos}}#1[b] at {\!xxloc} {\!yyloc} \fi \ignorespaces} \def\!hline#1{\hbox to #1{\leaders \hrule height\linethickness\hfill}} \def\!vline#1{\vbox to #1{\leaders \vrule width\linethickness\vfill}} % ** \!putdashedhline [] % ** Place dashed horizontal line \def\!putdashedhline#1{% \ifdim\!dxpos>\!zpt \!DLsetup\!Flist\!dxpos \put{\hbox to \!totalleaderlength{\!hleaders}\!hpartialpattern\!Rtrunc} #1[l] at {\!xloc} {\!yloc} \else \!DLsetup\!Blist{-\!dxpos} \put{\!hpartialpattern\!Ltrunc\hbox to \!totalleaderlength{\!hleaders}} #1[r] at {\!xloc} {\!yloc} \fi \ignorespaces} % ** \!putdashedhline [] % ** Place dashed vertical line \def\!putdashedvline#1{% \!dypos=-\!dypos% ** vertical leaders go from top to bottom \ifdim\!dypos>\!zpt \!DLsetup\!Flist\!dypos \put{\vbox{\vbox to \!totalleaderlength{\!vleaders} \!vpartialpattern\!Rtrunc}}#1[t] at {\!xloc} {\!yloc} \else \!DLsetup\!Blist{-\!dypos} \put{\vbox{\!vpartialpattern\!Ltrunc \vbox to \!totalleaderlength{\!vleaders}}}#1[b] at {\!xloc} {\!yloc} \fi \ignorespaces} % ** The rest of the macros in this section are subroutines used by % ** \!putdashedhline and \!putdashedvline. \def\!DLsetup#1#2{% ** Dashed-Line set up \let\!RSlist=#1% ** set !Rule-Skip list \!countB=#2% ** convert rule length to integer (number of sps) \!countA=\!leaderlength% ** ditto, leaderlength \divide\!countB by \!countA% ** number of complete leader units \!totalleaderlength=\!countB\!leaderlength \!Rresiduallength=#2% \advance \!Rresiduallength by -\!totalleaderlength% \** excess length \!Lresiduallength=\!leaderlength \advance \!Lresiduallength by -\!Rresiduallength \ignorespaces} \def\!hleaders{% \def\!Rule##1{\vrule height\linethickness width##1}% \def\!Skip##1{\hskip##1}% \leaders\hbox{\!RSlist}\hfill} \def\!hpartialpattern#1{% \!dimenA=\!zpt \!dimenB=\!zpt \def\!Rule##1{#1{##1}\vrule height\linethickness width\!dimenD}% \def\!Skip##1{#1{##1}\hskip\!dimenD}% \!RSlist} \def\!vleaders{% \def\!Rule##1{\hrule width\linethickness height##1}% \def\!Skip##1{\vskip##1}% \leaders\vbox{\!RSlist}\vfill} \def\!vpartialpattern#1{% \!dimenA=\!zpt \!dimenB=\!zpt \def\!Rule##1{#1{##1}\hrule width\linethickness height\!dimenD}% \def\!Skip##1{#1{##1}\vskip\!dimenD}% \!RSlist} \def\!Rtrunc#1{\!trunc{#1}>\!Rresiduallength} \def\!Ltrunc#1{\!trunc{#1}<\!Lresiduallength} \def\!trunc#1#2#3{% \!dimenA=\!dimenB \advance\!dimenB by #1% \!dimenD=\!dimenB \ifdim\!dimenD#2#3\!dimenD=#3\fi \!dimenC=\!dimenA \ifdim\!dimenC#2#3\!dimenC=#3\fi \advance \!dimenD by -\!dimenC} % **************************************************************** % *** LINEAR ARC (Draws straight lines -- solid and dashed) *** % **************************************************************** % ** User commands % ** \inboundscheckoff % ** \inboundscheckon % ** Internal commands % ** \!start (XCOORD,YCOORD) % ** \!ljoin (XCOORD,YCOORD) % ** \!drawlinearsegment -- set by \dashpat to either % ** \!linearsolid or \!lineardashed % ** \!advancedashing -- set by \dashpat to either % ** \relax or \!!advancedashing % ** \!plotifinbounds -- set by \inboundscheck off/on to either % ** \!plot or \!!plotifinbounds % ** \!initinboundscheck -- set by \inboundscheck off/on to either % ** \relax or \!!initinboundscheck % \plotsymbolspacing ** distance between consecutive plot positions % \!xS ** starting x % \!yS ** starting y % \!xE ** ending x % \!yE ** ending y % \!xdiff ** x_end - x_start % \!ydiff ** y_end - y_start % \!distacross ** how far along curve next point to be plotted is % \!arclength ** approximate length of arc for current interval % \!downlength ** remaining length for "pen" to be down % \!uplength ** length for "pen" to be down % \!intervalno ** counts segments to curve % \totalarclength ** cumulative distance along curve % \!npoints ** approximately (arc length / plotsymbolspacing) % ** Calls -- \!Pythag, \!divide, \!plot % ** \!start (XCOORD,YCOORD) % ** Sets initial point for linearly (or quadratically) interpolated curve \def\!start (#1,#2){% \!plotxorigin=\!xorigin \advance \!plotxorigin by \!plotsymbolxshift \!plotyorigin=\!yorigin \advance \!plotyorigin by \!plotsymbolyshift \!xS=\!M{#1}\!xunit \!yS=\!M{#2}\!yunit \!rotateaboutpivot\!xS\!yS \!copylist\!UDlist\to\!!UDlist% **\!UDlist has the form \\{dimen1}\\{dimen2}.. % ** Routine will draw dashed line with pen % ** down for dimen1, up for dimen2, ... \!getnextvalueof\!downlength\from\!!UDlist \!distacross=\!zpt% ** 1st point goes at start of curve \!intervalno=0 % ** initialize interval counter \global\totalarclength=\!zpt% ** initialize distance traveled along curve \ignorespaces} % ** \!ljoin (XCOORD,YCOORD) % ** Draws a straight line starting at the last point specified % ** by the most recent \!start, \!ljoin, or \!qjoin, and % ** ending at (XCOORD,YCOORD). \def\!ljoin (#1,#2){% \advance\!intervalno by 1 \!xE=\!M{#1}\!xunit \!yE=\!M{#2}\!yunit \!rotateaboutpivot\!xE\!yE \!xdiff=\!xE \advance \!xdiff by -\!xS%** xdiff = xE - xS \!ydiff=\!yE \advance \!ydiff by -\!yS%** ydiff = yE - yS \!Pythag\!xdiff\!ydiff\!arclength% ** arclength = sqrt(xdiff**2+ydiff**2) \global\advance \totalarclength by \!arclength% \!drawlinearsegment% ** set by dashpat to \!linearsolid or \!lineardashed \!xS=\!xE \!yS=\!yE% ** shift ending points to starting points \ignorespaces} % ** The following routine is used to draw a "solid" line between (xS,yS) % ** and (xE,yE). Points are spaced nearly every \plotsymbolspacing length % ** along the line. \def\!linearsolid{% \!npoints=\!arclength \!countA=\plotsymbolspacing \divide\!npoints by \!countA% ** now #pts =. arclength/plotsymbolspacing \ifnum \!npoints<1 \!npoints=1 \fi \divide\!xdiff by \!npoints \divide\!ydiff by \!npoints \!xpos=\!xS \!ypos=\!yS % \loop\ifnum\!npoints>-1 \!plotifinbounds \advance \!xpos by \!xdiff \advance \!ypos by \!ydiff \advance \!npoints by -1 \repeat \ignorespaces} % ** The following routine is used to draw a dashed line between (xS,yS) % ** and (xE,yE). The dash pattern continues from the previous segment. \def\!lineardashed{% % ** \ifdim\!distacross>\!arclength \advance \!distacross by -\!arclength %nothing to plot in this interval % \else % \loop\ifdim\!distacross<\!arclength % ** plot point, interpolating linearly in x and y \!divide\!distacross\!arclength\!dimenA% ** dimA = across/arclength \!removept\!dimenA\!t% ** \!t holds value in dimA, without the "pt" \!xpos=\!t\!xdiff \advance \!xpos by \!xS \!ypos=\!t\!ydiff \advance \!ypos by \!yS \!plotifinbounds \advance\!distacross by \plotsymbolspacing \!advancedashing \repeat % \advance \!distacross by -\!arclength% ** prepare for next interval \fi \ignorespaces} \def\!!advancedashing{% \advance\!downlength by -\plotsymbolspacing \ifdim \!downlength>\!zpt \else \advance\!distacross by \!downlength \!getnextvalueof\!uplength\from\!!UDlist \advance\!distacross by \!uplength \!getnextvalueof\!downlength\from\!!UDlist \fi} % ** \inboundscheckoff & \inboundscheckon: See Subsection 5.5 of the manual. \def\inboundscheckoff{% \def\!plotifinbounds{\!plot(\!xpos,\!ypos)}% \def\!initinboundscheck{\relax}\ignorespaces} \def\inboundscheckon{% \def\!plotifinbounds{\!!plotifinbounds}% \def\!initinboundscheck{\!!initinboundscheck}% \!initinboundscheck\ignorespaces} \inboundscheckoff % ** The following code plots the current point only if it falls in the % ** current plotarea. It doesn't matter if the coordinate system has % ** changed since the plotarea was set up. However, shifts of the plot % ** are ignored (how the plotsymbol stands relative to its plot position is % ** unknown anyway). \def\!!plotifinbounds{% \ifdim \!xpos<\!checkleft \else \ifdim \!xpos>\!checkright \else \ifdim \!ypos<\!checkbot \else \ifdim \!ypos>\!checktop \else \!plot(\!xpos,\!ypos) \fi \fi \fi \fi} \def\!!initinboundscheck{% \!checkleft=\!arealloc \advance\!checkleft by \!xorigin \!checkright=\!arearloc \advance\!checkright by \!xorigin \!checkbot=\!areabloc \advance\!checkbot by \!yorigin \!checktop=\!areatloc \advance\!checktop by \!yorigin} % ********************************* % *** LOGTEN (Log_10 function) *** % ********************************* % % ** \!logten{X} % ** Calculates log_10 of X. X and LOG10(X) are in fixed point notation. % ** X must be positive; it may have an optional `+' sign; any number % ** of digits may be specified for X. The absolute error in LOG10(X) is % ** less than .0001 (probably < .00006). That's about as good as you % ** hope for, since TEX only operates to 5 figures after the decimal % ** point anyway. % \!rootten=3.162278pt **** These are values are set in ALLOCATIONS % \!tenAe=2.543275pt (=A5) % \!tenAc=2.773839pt (=A3) % \!tenAa=8.690286pt (=A1) \def\!logten#1#2{% \expandafter\!!logten#1\!nil \!removept\!dimenF#2% \ignorespaces} \def\!!logten#1#2\!nil{% \if -#1% \!dimenF=\!zpt \def\!next{\ignorespaces}% \else \if +#1% \def\!next{\!!logten#2\!nil}% \else \if .#1% \def\!next{\!!logten0.#2\!nil}% \else \def\!next{\!!!logten#1#2..\!nil}% \fi \fi \fi \!next} \def\!!!logten#1#2.#3.#4\!nil{% \!dimenF=1pt % ** DimF holds log10 original argument \if 0#1% \!!logshift#3pt % ** Argument < 1 \else % ** Argument >= 1 \!logshift#2/% ** Shift decimal pt as many places \!dimenE=#1.#2#3pt % ** as there are figures in #2 \fi % ** Now dimE holds revised X want log10 of \ifdim \!dimenE<\!rootten% ** Transform X to XX between sqrt(10) \multiply \!dimenE 10 % ** and 10*sqrt(10) \advance \!dimenF -1pt \fi \!dimenG=\!dimenE% ** dimG <- (XX + 10) \advance\!dimenG 10pt \advance\!dimenE -10pt % ** dimE <- (XX - 10) \multiply\!dimenE 10 % ** dimE = 10*(XX-10) \!divide\!dimenE\!dimenG\!dimenE% ** Now dimE=10t==10*(XX-10)/(XX+10) \!removept\!dimenE\!t% ** !t=10t, with "pt" removed \!dimenG=\!t\!dimenE% ** dimG=100t**2 \!removept\!dimenG\!tt% ** !tt=100t**2, with "pt" removed \!dimenH=\!tt\!tenAe% ** dimH=10*a5*(10t)**2 /100 \divide\!dimenH 100 \advance\!dimenH \!tenAc% ** ditto + 10*a3 \!dimenH=\!tt\!dimenH% ** ditto * (10t)**2 /100 \divide\!dimenH 100 \advance\!dimenH \!tenAa% ** ditto + 10*a1 \!dimenH=\!t\!dimenH% ** ditto * 10t / 100 \divide\!dimenH 100 % ** Now dimH = log10(XX) - 1 \advance\!dimenF \!dimenH}% ** dimF = log10(X) \def\!logshift#1{% \if #1/% \def\!next{\ignorespaces}% \else \advance\!dimenF 1pt \def\!next{\!logshift}% \fi \!next} \def\!!logshift#1{% \advance\!dimenF -1pt \if 0#1% \def\!next{\!!logshift}% \else \if p#1% \!dimenF=1pt \def\!next{\!dimenE=1p}% \else \def\!next{\!dimenE=#1.}% \fi \fi \!next} % *********************************************************** % *** PICTURES (Basic setups for PiCtures; \put commands) *** % *********************************************************** % ** User Commands: % ** \beginpicture % ** \endpicture % ** \endpicturesave % ** \setcoordinatesystem units point at XREF YREF % ** \put {OBJECT} [ORIENTATION] at XCOORD YCOORD % ** \multiput {OJBECT} [ORIENTATION] ) at % ** XCOORD YCOORD % ** *NUMBER_OF_TIMES DXCOORD DYCOORD / % ** \accountingon % ** \accountingoff % ** \stack [ORIENTATION] {LIST OF ITEMS} % ** \lines [ORIENTATION] {LINES} % ** \Lines [ORIENTATION] {LINES} % ** \setdimensionmode % ** \setcoordinatemode % ** \Xdistance % ** \Ydistance % ** Internal commands: % ** \!setputobject{OBJECT}{[ORIENTATION]} % ** \!dimenput{OBJECT}[ORIENTATION](XDIMEN,YDIMEN) % ** \!setdimenmode % ** \!setcoordmode % ** \!ifdimenmode % ** \!ifcoordmode % ** \beginpicture % ** \endpicture % ** \endpicturesave % ** \beginpicture ... \endpicture creates an hbox. Objects are % ** placed in this box using the \put command and the like (see below). % ** The location of an object is specified in terms of coordinate system(s) % ** established by \setcoordinatesystem. Each coordinate system (there % ** might be just one) specifies the length of 1 horizontal unit, the length % ** of 1 vertical unit, and the coordinates of a "reference point". The % ** reference points of various coordinate systems will be in the same % ** physical location. The macros keep track of the size of the objects % ** and their locations. The resulting hbox is the smallest hbox which % ** encloses all the objects, and whose TEK reference point is the point % ** on the left edge of the box closest vertically to the PICTEX reference % ** point. Using \endpicturesave, you can (globally) save the distance TEK's % ** reference point is to the right (respectively, up from) PICTEX's % ** reference point in the dimension register \XREG (respectively \YREG). % ** You can then \put the picture OBJECT into a larger picture so that its % ** reference point is at (XCOORD,YCOORD) with the command % ** \put {picture OBJECT} [Bl] <\XREG, \YREG> at XCOORD YCOORD % ** \beginpicture : See Subsection 1.1 of the manual. \def\beginpicture{% \setbox\!picbox=\hbox\bgroup% \!xleft=\maxdimen \!xright=-\maxdimen \!ybot=\maxdimen \!ytop=-\maxdimen} % ** \endpicture : See Subsection 1.1 of the manual. \def\endpicture{% \ifdim\!xleft=\maxdimen% ** check if nothing was put in picbox \!xleft=\!zpt \!xright=\!zpt \!ybot=\!zpt \!ytop=\!zpt \fi \global\!Xleft=\!xleft \global\!Xright=\!xright \global\!Ybot=\!ybot \global\!Ytop=\!ytop \egroup% \ht\!picbox=\!Ytop \dp\!picbox=-\!Ybot \ifdim\!Ybot>\!zpt \else \ifdim\!Ytop<\!zpt \!Ybot=\!Ytop \else \!Ybot=\!zpt \fi \fi \hbox{\kern-\!Xleft\lower\!Ybot\box\!picbox\kern\!Xright}} % ** \endpicturesave : See Subsection 8.4 of the manual. \def\endpicturesave <#1,#2>{% \endpicture \global #1=\!Xleft \global #2=\!Ybot \ignorespaces} % ** \setcoordinatesystem units % ** point at XREF YREF % ** Each of `units ' and `point at XREF YREF' % ** are optional. % ** Unit lengths must be given in dimensions (e.g., <10pt,1in>). % ** Default unit lengths are 1pt, 1pt, or previous unit lengths. % ** Reference point is specified in current units (e.g., 3 5 ). % ** Default reference point is 0 0 , or previous reference point. % ** Unit lengths and reference points obey TEX's scoping rules. % ** See Subsection 1.2 of the manual. \def\setcoordinatesystem{% \!ifnextchar{u}{\!getlengths } {\!getlengths units <\!xunit,\!yunit>}} \def\!getlengths units <#1,#2>{% \!xunit=#1\relax \!yunit=#2\relax \!ifcoordmode \let\!SCnext=\!SCccheckforRP \else \let\!SCnext=\!SCdcheckforRP \fi \!SCnext} \def\!SCccheckforRP{% \!ifnextchar{p}{\!cgetreference } {\!cgetreference point at {\!xref} {\!yref} }} \def\!cgetreference point at #1 #2 {% \edef\!xref{#1}\edef\!yref{#2}% \!xorigin=\!xref\!xunit \!yorigin=\!yref\!yunit \!initinboundscheck % ** See linear.tex \ignorespaces} \def\!SCdcheckforRP{% \!ifnextchar{p}{\!dgetreference}% {\ignorespaces}} \def\!dgetreference point at #1 #2 {% \!xorigin=#1\relax \!yorigin=#2\relax \ignorespaces} % ** \put {OBJECT} [XY] at (XCOORD,YCOORD) % ** `[XY]' and `' are optional. % ** First OBJECT is placed in an hbox (the "objectbox") and then a % ** "reference point" is assigned to the objectbox as follows: % ** [1] first, the reference point is taken to be the center of the box; % ** [2] next, centering is overridden by the specifications % ** X=l -- reference point along the left edge of the objectbox % ** X=r -- reference point along the right edge of the objectbox % ** Y=b -- reference point along the bottom edge of the objectbox % ** Y=B -- reference point along the Baseline of the objectbox % ** Y=t -- reference point along the top edge of the objectbox; % ** [3] finally the reference point is shifted left by XDIMEN, down % ** by YDIMEN (both default to 0pt). % ** The objectbox is placed within PICBOX with its reference point at % ** (XCOORD,YCOORD). % ** If OBJECT is a saved box, say box0, you have to write % ** \put{\box0}... or \put{\copy0}... % ** The objectbox is void after the put. % ** See Subsection 2.1 of the manual. \long\def\put#1#2 at #3 #4 {% \!setputobject{#1}{#2}% \!xpos=\!M{#3}\!xunit \!ypos=\!M{#4}\!yunit \!rotateaboutpivot\!xpos\!ypos% \advance\!xpos -\!xorigin \advance\!xpos -\!xshift \advance\!ypos -\!yorigin \advance\!ypos -\!yshift \kern\!xpos\raise\!ypos\box\!putobject\kern-\!xpos% \!doaccounting\ignorespaces} % ** \multiput etc. Like \put. The objectbox is not voided until the % ** termininating /, and is placed repeatedly with: % ** XCOORD YCOORD -- the objectbox is put down with its reference point % ** at (XCOORD,YCOORD); % ** *N DXCOORD DYCOORD -- each of N times the current % ** (xcoord,ycoord) is incremented by (DXCOORD,DYCOORD), and the % ** objectbox is put down with its reference point at (xcoord,ycoord) % ** (This specification has to follow an XCOORD YCOORD pair) % ** See Subsection 2.2 of the manual. \long\def\multiput #1#2 at {% \!setputobject{#1}{#2}% \!ifnextchar"{\!putfromfile}{\!multiput}} \def\!putfromfile"#1"{% \expandafter\!multiput \input #1 /} \def\!multiput{% \futurelet\!nextchar\!!multiput} \def\!!multiput{% \if *\!nextchar \def\!nextput{\!alsoby}% \else \if /\!nextchar \def\!nextput{\!finishmultiput}% \else \def\!nextput{\!alsoat}% \fi \fi \!nextput} \def\!finishmultiput/{% \setbox\!putobject=\hbox{}% \ignorespaces} % ** \!alsoat XCOORD YCOORD % ** The objectbox is put down with reference point at XCOORD,YCOORD \def\!alsoat#1 #2 {% \!xpos=\!M{#1}\!xunit \!ypos=\!M{#2}\!yunit \!rotateaboutpivot\!xpos\!ypos% \advance\!xpos -\!xorigin \advance\!xpos -\!xshift \advance\!ypos -\!yorigin \advance\!ypos -\!yshift \kern\!xpos\raise\!ypos\copy\!putobject\kern-\!xpos% \!doaccounting \!multiput} % ** \!alsoby*N DXCOORD DYCOORD % ** N times, the current (XCOORD,YCOORD) is advanced by (DXCOORD,DYCOORD), % ** and the current (shifted, oriented) OBJECT is put down. \def\!alsoby*#1 #2 #3 {% \!dxpos=\!M{#2}\!xunit \!dypos=\!M{#3}\!yunit \!rotateonly\!dxpos\!dypos \!ntemp=#1% \!!loop\ifnum\!ntemp>0 \advance\!xpos by \!dxpos \advance\!ypos by \!dypos \kern\!xpos\raise\!ypos\copy\!putobject\kern-\!xpos% \advance\!ntemp by -1 \repeat \!doaccounting \!multiput} % ** \accountingoff : Suspends PiCTeX's accounting of the aggregate % ** size of the picture box. % ** \accounting on : Reinstates accounting. % ** See Subsection 8.2 of the manual. \def\accountingon{\def\!doaccounting{\!!doaccounting}\ignorespaces} \def\accountingoff{\def\!doaccounting{}\ignorespaces} \accountingon \def\!!doaccounting{% \!xtemp=\!xpos \!ytemp=\!ypos \ifdim\!xtemp<\!xleft \!xleft=\!xtemp \fi \advance\!xtemp by \!wd \ifdim\!xright<\!xtemp \!xright=\!xtemp \fi \advance\!ytemp by -\!dp \ifdim\!ytemp<\!ybot \!ybot=\!ytemp \fi \advance\!ytemp by \!dp \advance\!ytemp by \!ht \ifdim\!ytemp>\!ytop \!ytop=\!ytemp \fi} \long\def\!setputobject#1#2{% \setbox\!putobject=\hbox{#1}% \!ht=\ht\!putobject \!dp=\dp\!putobject \!wd=\wd\!putobject \wd\!putobject=\!zpt \!xshift=.5\!wd \!yshift=.5\!ht \advance\!yshift by -.5\!dp \edef\!putorientation{#2}% \expandafter\!SPOreadA\!putorientation[]\!nil% \expandafter\!SPOreadB\!putorientation<\!zpt,\!zpt>\!nil\ignorespaces} \def\!SPOreadA#1[#2]#3\!nil{\!etfor\!orientation:=#2\do\!SPOreviseshift} \def\!SPOreadB#1<#2,#3>#4\!nil{\advance\!xshift by -#2\advance\!yshift by -#3} \def\!SPOreviseshift{% \if l\!orientation \!xshift=\!zpt \else \if r\!orientation \!xshift=\!wd \else \if b\!orientation \!yshift=-\!dp \else \if B\!orientation \!yshift=\!zpt \else \if t\!orientation \!yshift=\!ht \fi \fi \fi \fi \fi} % ** \!dimenput{OBJECT} [XY] (XLOC,YLOC) % ** This is an internal put routine, similar to \put, except that % ** XLOC=distance right from reference point, YLOC=distance up from % ** reference point. XLOC and YLOC are dimensions, so this routine % ** is completely independent of the current coordinate system. % ** This routine does NOT do ROTATIONS. \long\def\!dimenput#1#2(#3,#4){% \!setputobject{#1}{#2}% \!xpos=#3\advance\!xpos by -\!xshift \!ypos=#4\advance\!ypos by -\!yshift \kern\!xpos\raise\!ypos\box\!putobject\kern-\!xpos% \!doaccounting\ignorespaces} % ** The following macros permit the picture drawing routines to be used % ** either in the default "coordinate mode", or in "dimension mode". % ** In coordinate mode \!M(1.5,\!xunit) expands to 1.5\!xunit % ** In dimension mode \!M(1.5pt,\!xunit) expands to 1.5pt % ** Dimension mode is useful in coding macros. % ** Any special purpose picture macro that sets dimension mode should % ** reset coordinate mode before completion. % ** See Subsection 9.2 of the manual. \def\!setdimenmode{% \let\!M=\!M!!\ignorespaces} \def\!setcoordmode{% \let\!M=\!M!\ignorespaces} \def\!ifcoordmode{% \ifx \!M \!M!} \def\!ifdimenmode{% \ifx \!M \!M!!} \def\!M!#1#2{#1#2} \def\!M!!#1#2{#1} \!setcoordmode \let\setdimensionmode=\!setdimenmode \let\setcoordinatemode=\!setcoordmode % ** \Xdistance{XCOORD}, \Ydistance{YCOORD} are the horizontal and % ** vertical distances from the origin (0,0) to the point % ** (XCOORD,YCOORD) in the current coordinate system. % ** See Subsection 9.2 of the manual. \def\Xdistance#1{% \!M{#1}\!xunit \ignorespaces} \def\Ydistance#1{% \!M{#1}\!yunit \ignorespaces} % ** The following macros -- \stack, \line, and \Lines -- are useful for % ** annotating PiCtures. They can be used outside the \beginpicture ... % ** \endpicture environment. % ** \stack [POSITIONING] {VALUESLIST} % ** Builds a vertical stack of the values in VALUESLIST. Values in % ** VALUESLIST are separated by commas. In the resulting stack, values are % ** centered by default, and positioned flush left (right) if % ** POSITIONING = l (r). Values are separated vertically by LEADING, % ** which defaults to \stackleading. % ** See Subsection 2.3 of the manual. \def\stack{% \!ifnextchar[{\!stack}{\!stack[c]}} \def\!stack[#1]{% \let\!lglue=\hfill \let\!rglue=\hfill \expandafter\let\csname !#1glue\endcsname=\relax \!ifnextchar<{\!!stack}{\!!stack<\stackleading>}} \def\!!stack<#1>#2{% \vbox{\def\!valueslist{}\!ecfor\!value:=#2\do{% \expandafter\!rightappend\!value\withCS{\\}\to\!valueslist}% \!lop\!valueslist\to\!value \let\\=\cr\lineskiplimit=\maxdimen\lineskip=#1% \baselineskip=-1000pt\halign{\!lglue##\!rglue\cr \!value\!valueslist\cr}}% \ignorespaces} % ** \lines [POSITIONING] {LINES} % ** Builds a vertical array of the lines in LINES. Each line in LINES % ** is terminated by a \cr. In the resulting array, lines are % ** centered by default, and positioned flush left (right) if % ** POSITIONING = l (r). The lines in the array are subject to TeX's % ** usual spacing rules: in particular the baselines are ordinarily an equal % ** distance apart. The baseline of the array is the baseline of the % ** the bottom line. % ** See Subsection 2.3 of the manual. \def\lines{% \!ifnextchar[{\!lines}{\!lines[c]}} \def\!lines[#1]#2{% \let\!lglue=\hfill \let\!rglue=\hfill \expandafter\let\csname !#1glue\endcsname=\relax \vbox{\halign{\!lglue##\!rglue\cr #2\crcr}}% \ignorespaces} % ** \Lines [POSITIONING] {LINES} % ** Like \lines, but the baseline of the array is the baseline of the % ** top line. See Subsection 2.3 of the manual. \def\Lines{% \!ifnextchar[{\!Lines}{\!Lines[c]}} \def\!Lines[#1]#2{% \let\!lglue=\hfill \let\!rglue=\hfill \expandafter\let\csname !#1glue\endcsname=\relax \vtop{\halign{\!lglue##\!rglue\cr #2\crcr}}% \ignorespaces} % ********************************************* % *** PLOTTING (Things to do with plotting) *** % ********************************************* % ** User commands % ** \setplotsymbol ({PLOTSYMBOL} [ORIENTATION] ) % ** \savelinesandcurves on "FILE_NAME" % ** \dontsavelinesandcurves % ** \writesavefile {MESSAGE} % ** \replot {FILE_NAME} % ** Internal command % ** \!plot(XDIMEN,YDIMEN) % ** \setplotsymbol ({PLOTSYMBOL} [ ] < , >) % ** Save PLOTSYMBOL away in an hbox for use with curve plotting routines % ** See Subsection 5.2 of the manual. \def\setplotsymbol(#1#2){% \!setputobject{#1}{#2} \setbox\!plotsymbol=\box\!putobject% \!plotsymbolxshift=\!xshift \!plotsymbolyshift=\!yshift \ignorespaces} \setplotsymbol({\fiverm .})% ** initialize plotsymbol % ** \!plot is either \!!plot (when no lines and curves are being saved) or % ** \!!!plot (when lines and curves are being saved) % ** \!!plot(XDIMEN,YDIMEN) % ** Places the current plotsymbol a horizontal distance=XDIMEN-xorigin % ** and a vertical distance=YDIMEN-yorigin from the current % ** reference point. \def\!!plot(#1,#2){% \!dimenA=-\!plotxorigin \advance \!dimenA by #1% ** over \!dimenB=-\!plotyorigin \advance \!dimenB by #2% ** up \kern\!dimenA\raise\!dimenB\copy\!plotsymbol\kern-\!dimenA% \ignorespaces} % ** \!!!plot(XDIMEN,YDIMEN) % ** Like \!!plot, but also saves the plot location in units of % ** scaled point, on file `replotfile' \def\!!!plot(#1,#2){% \!dimenA=-\!plotxorigin \advance \!dimenA by #1% ** over \!dimenB=-\!plotyorigin \advance \!dimenB by #2% ** up \kern\!dimenA\raise\!dimenB\copy\!plotsymbol\kern-\!dimenA% \!countE=\!dimenA \!countF=\!dimenB \immediate\write\!replotfile{\the\!countE,\the\!countF.}% \ignorespaces} % ** \savelinesandcurves on "FILE_NAME" % ** Switch to save locations used for plotting lines and curves % ** (No advantage in saving locations for solid lines; however % ** replotting curve locations speeds things up by a factor of about 4. % ** \dontsavelinesandcurves % ** Terminates \savelinesandcurves. The default. % ** See Subsection 5.6 of the manual. \def\savelinesandcurves on "#1" {% \immediate\closeout\!replotfile \immediate\openout\!replotfile=#1% \let\!plot=\!!!plot} \def\dontsavelinesandcurves {% \let\!plot=\!!plot} \dontsavelinesandcurves % ** \writesavefile {MESSAGE} % ** The message is preceded by a "%", so that it won't interfere % ** with replotting. % ** See Subsection 5.6 of the manual. {\catcode`\%=11\xdef\!Commentsignal{%}} \def\writesavefile#1 {% \immediate\write\!replotfile{\!Commentsignal #1}% \ignorespaces} % ** \replot "FILE_NAME" % ** Replots the locations saved earlier under \savelinesandcurves % ** on "FILE_NAME" % ** See Subsection 5.6 of the manual. \def\replot"#1" {% \expandafter\!replot\input #1 /} \def\!replot#1,#2. {% \!dimenA=#1sp \kern\!dimenA\raise#2sp\copy\!plotsymbol\kern-\!dimenA \futurelet\!nextchar\!!replot} \def\!!replot{% \if /\!nextchar \def\!next{\!finish}% \else \def\!next{\!replot}% \fi \!next} % ************************************************** % *** PYTHAGORAS (Euclidean distance function) *** % ************************************************** % ** User command: % ** \placehypotenuse for and in % ** Internal command: % ** \!Pythag{X}{Y}{Z} % ** Input X,Y are dimensions, or dimension registers. % ** Output Z == sqrt(X**2+Y**2) must be a dimension register. % ** Assumes that |X|+|Y| < 2048pt (about 28in). % ** Without loss of generality, suppose x>0, y>0. Put s = x+y, % ** z = sqrt(x**2+y**2). Then z = s*f, where f = sqrt(t**2 + (1-t)**2) % ** = sqrt((1+tau**2)/2), where t = x/s and tau = 2(t-1/2) . % ** Uses the \!divide macro (which uses registers \!dimenA--\!dimenD. % ** Uses the \!removept macro (e.g., 123.45pt --> 123.45) % ** Uses registers \!dimenE--\!dimenI. \def\!Pythag#1#2#3{% \!dimenE=#1\relax \ifdim\!dimenE<\!zpt \!dimenE=-\!dimenE \fi% ** dimE = |x| \!dimenF=#2\relax \ifdim\!dimenF<\!zpt \!dimenF=-\!dimenF \fi% ** dimF = |y| \advance \!dimenF by \!dimenE% ** dimF = s = |x|+|y| \ifdim\!dimenF=\!zpt \!dimenG=\!zpt% ** dimG = z = sqrt(x**2+y**2) \else \!divide{8\!dimenE}\!dimenF\!dimenE% ** now dimE = 8t = (8|x|)/s \advance\!dimenE by -4pt% ** 8tau = (8t-4)*2 \!dimenE=2\!dimenE% ** (tau = 2*t - 1) \!removept\!dimenE\!!t% ** 8tau, without "pt" \!dimenE=\!!t\!dimenE% ** (8tau)**2, in pts \advance\!dimenE by 64pt% ** u = [64 + (8tau)**2]/2 \divide \!dimenE by 2% ** [u = (8f)**2] \!dimenH=7pt% ** initial guess g at sqrt(u) \!!Pythag\!!Pythag\!!Pythag% ** 3 iterations give sqrt(u) \!removept\!dimenH\!!t% ** 8f=sqrt(u), without "pt" \!dimenG=\!!t\!dimenF% ** z = (8f)*s/8 \divide\!dimenG by 8 \fi #3=\!dimenG \ignorespaces} \def\!!Pythag{% ** Newton-Raphson for sqrt \!divide\!dimenE\!dimenH\!dimenI% ** v = u/g \advance\!dimenH by \!dimenI% ** g <-- (g + u/g)/2 \divide\!dimenH by 2} % ** \placehypotenuse for and in % ** See Subsection 9.3 of the manual. \def\placehypotenuse for <#1> and <#2> in <#3> {% \!Pythag{#1}{#2}{#3}} % ********************************************** % *** QUADRATIC ARC (Draws a quadratic arc) *** % ********************************************** % ** Internal command % ** \!qjoin (XCOORD1,YCOORD1) (XCOORD2,YCOORD2) % ** \!qjoin (XCOORD1,YCOORD1) (XCOORD2,YCOORD2) % ** Draws an arc starting at the (last) point specified by the most recent % ** \!qjoin, or \!ljoin, or \!start and passing through (X_1,Y_1), (X_2,Y_2). % ** Uses quadratic interpolation in both x and y: % ** x(t), 0 <= t <= 1, interpolates x_0, x_1, x_2 at t=0, .5, 1 % ** y(t), 0 <= t <= 1, interpolates y_0, y_1, y_2 at t=0, .5, 1 \def\!qjoin (#1,#2) (#3,#4){% \advance\!intervalno by 1 \!ifcoordmode \edef\!xmidpt{#1}\edef\!ymidpt{#2}% \else \!dimenA=#1\relax \edef\!xmidpt{\the\!dimenA}% \!dimenA=#2\relax \edef\!ymidpt{\the\!dimenA}% \fi \!xM=\!M{#1}\!xunit \!yM=\!M{#2}\!yunit \!rotateaboutpivot\!xM\!yM \!xE=\!M{#3}\!xunit \!yE=\!M{#4}\!yunit \!rotateaboutpivot\!xE\!yE % % ** Find coefficients for x(t)=a_x + b_x*t + c_x*t**2 \!dimenA=\!xM \advance \!dimenA by -\!xS% ** dimA = I = xM - xS \!dimenB=\!xE \advance \!dimenB by -\!xM% ** dimB = II = xE-xM \!xB=3\!dimenA \advance \!xB by -\!dimenB% ** b=3I-II \!xC=2\!dimenB \advance \!xC by -2\!dimenA% ** c=2(II-I) % % ** Find coefficients for y(t)=y_x + b_y*t + c_y*t**2 \!dimenA=\!yM \advance \!dimenA by -\!yS% \!dimenB=\!yE \advance \!dimenB by -\!yM% \!yB=3\!dimenA \advance \!yB by -\!dimenB% \!yC=2\!dimenB \advance \!yC by -2\!dimenA% % % ** Use Simpson's rule to calculate arc length over [0,1/2]: % ** arc length = 1/2[1/6 f(0) + 4/6 f(1/4) + 1/6 f(1/2)] % ** with f(t) = sqrt(x'(t)**2 + y'(t)**2). \!xprime=\!xB \!yprime=\!yB% ** x'(t) = b + 2ct \!dxprime=.5\!xC \!dyprime=.5\!yC% ** dt=1/4 ==> dx'(t) = c/2 \!getf \!midarclength=\!dimenA \!getf \advance \!midarclength by 4\!dimenA \!getf \advance \!midarclength by \!dimenA \divide \!midarclength by 12 % % ** Get arc length over [0,1]. \!arclength=\!dimenA \!getf \advance \!arclength by 4\!dimenA \!getf \advance \!arclength by \!dimenA \divide \!arclength by 12% ** Now have arc length over [1/2,1] \advance \!arclength by \!midarclength \global\advance \totalarclength by \!arclength % % % ** Check to see if there's anything to plot in this interval \ifdim\!distacross>\!arclength \advance \!distacross by -\!arclength% ** nothing % \else \!initinverseinterp% ** initialize for inverse interpolation on arc length \loop\ifdim\!distacross<\!arclength% ** loop over points on arc \!inverseinterp% ** find t such that arc length[0,t] = distacross, % ** using inverse quadratic interpolation % ** now evaluate x(t)=(c*t + b)*t + a \!xpos=\!t\!xC \advance\!xpos by \!xB \!xpos=\!t\!xpos \advance \!xpos by \!xS % ** evaluate y(t) \!ypos=\!t\!yC \advance\!ypos by \!yB \!ypos=\!t\!ypos \advance \!ypos by \!yS \!plotifinbounds% ** plot point if in bounds \advance\!distacross \plotsymbolspacing%** advance arc length for next pt \!advancedashing% ** see "linear" \repeat % \advance \!distacross by -\!arclength% ** prepare for next interval \fi % \!xS=\!xE% ** shift ending points to starting points \!yS=\!yE \ignorespaces} % ** \!getf -- Calculates sqrt(x'(t)**2 + y'(t)**2) and advances % ** x'(t) and y'(t) \def\!getf{\!Pythag\!xprime\!yprime\!dimenA% \advance\!xprime by \!dxprime \advance\!yprime by \!dyprime} % ** \!initinverseinterp -- initializes for inverse quadratic interpolation % ** of arc length provided 1/3 < midarclength/arclength < 2/3; otherwise % ** initializes for inverse linear interpolation. \def\!initinverseinterp{% \ifdim\!arclength>\!zpt \!divide{8\!midarclength}\!arclength\!dimenE% ** dimE=8w=8r/s, where r % ** = midarclength, s=arclength % ** Test for w out of range: w<1/3 or w>2/3 \ifdim\!dimenE<\!wmin \!setinverselinear \else \ifdim\!dimenE>\!wmax \!setinverselinear \else% ** w in range: initialize \def\!inverseinterp{\!inversequad}\ignorespaces % % ** Calculate the coefficients \!beta and \!gamma of the quadratic % ** t = \!beta*v + \!gamma*v**2 % ** taking the values t=0, 1/2, 1 at v=0, w==r/s, 1 respectively: % ** \!beta = (1/2 - w**2)/[w(1-w)] % ** \!gamma = 1 - beta. % \!removept\!dimenE\!Ew% ** 8w, without "pt" \!dimenF=-\!Ew\!dimenE% ** -(8w)**2 \advance\!dimenF by 32pt% ** 32 - (8w)**2 \!dimenG=8pt \advance\!dimenG by -\!dimenE% ** 8 - 8w \!dimenG=\!Ew\!dimenG% ** (8w)*(8-8w) \!divide\!dimenF\!dimenG\!beta% ** beta = (32-(8w)**2)/(8w(8-8w)) % ** = (1/2 - w**2)/(w(1-w)) \!gamma=1pt \advance \!gamma by -\!beta% ** gamma = 1-beta \fi% ** end of the \ifdim\!dimenE>\!wmax \fi% ** end of the \ifdim\!dimenE<\!wmin \fi% ** end of the \ifdim\!arclength>\!zpt \ignorespaces} % ** For 0 <= t <= 1, let AL(t) = arclength[0,t]/arclength[0,1]; note % ** AL(0)=0, AL(1/2)=midarclength/arclength, AL(1)=1. This routine % ** calculates an approximation to AL^{-1}(distance across/arclength), % ** using the assumption that AL^{-1} is quadratic. Specifically, % ** it finds t such that % ** AL^{-1}(v) =. t = v*(\!beta + \!gamma*v) % ** where \!beta and \!gamma are set by \!initinv, and where % ** v=distance across/arclength \def\!inversequad{% \!divide\!distacross\!arclength\!dimenG% ** dimG = v = distacross/arclength \!removept\!dimenG\!v% ** v, without "pt" \!dimenG=\!v\!gamma% ** gamma*v \advance\!dimenG by \!beta% ** beta + gamma*v \!dimenG=\!v\!dimenG% ** t = v*(beta + gamma*v) \!removept\!dimenG\!t}% ** t, without "pt" % ** When w <= 1/3 or w >= 2/3, the following routine writes (using % ** plain TEK's \wlog command) a warning message on the user's log file, % ** and initializes for inverse linear interpolation on arc length. \def\!setinverselinear{% \def\!inverseinterp{\!inverselinear}% \divide\!dimenE by 8 \!removept\!dimenE\!t \!countC=\!intervalno \multiply \!countC 2 \!countB=\!countC \advance \!countB -1 \!countA=\!countB \advance \!countA -1 \wlog{\the\!countB th point (\!xmidpt,\!ymidpt) being plotted doesn't lie in the}% \wlog{ middle third of the arc between the \the\!countA th and \the\!countC th points:}% \wlog{ [arc length \the\!countA\space to \the\!countB]/[arc length \the \!countA\space to \the\!countC]=\!t.}% \ignorespaces} % ** Inverse linear interpolation \def\!inverselinear{% \!divide\!distacross\!arclength\!dimenG \!removept\!dimenG\!t} % ************************************** % ** ROTATIONS (Handles rotations) *** % ************************************** % ** User commands % ** \startrotation [by COS_OF_ANGLE SIN_OF_ANGLE] [about XPIVOT YPIVOT] % ** \stoprotation % ** \startrotation [by COS_OF_ANGLE SIN_OF_ANGLE] [about XPIVOT YPIVOT] % ** Future (XCOORD,YCOORD)'s will be rotated about (XPIVOT,YPIVOT) % ** by the angle with the give COS and SIN. Both fields are optional. % ** [COS,SIN] defaults to previous value, or (1,0). % ** (XPIVOT,YPIVOT) defaults to previous value, or (0,0) % ** You can't change the coordinate system in the scope of a rotation. % ** See Subsection 9.1 of the manual. \def\startrotation{% \let\!rotateaboutpivot=\!!rotateaboutpivot \let\!rotateonly=\!!rotateonly \!ifnextchar{b}{\!getsincos }% {\!getsincos by {\!cosrotationangle} {\!sinrotationangle} }} \def\!getsincos by #1 #2 {% \edef\!cosrotationangle{#1}% \edef\!sinrotationangle{#2}% \!ifcoordmode \let\!ROnext=\!ccheckforpivot \else \let\!ROnext=\!dcheckforpivot \fi \!ROnext} \def\!ccheckforpivot{% \!ifnextchar{a}{\!cgetpivot}% {\!cgetpivot about {\!xpivotcoord} {\!ypivotcoord} }} \def\!cgetpivot about #1 #2 {% \edef\!xpivotcoord{#1}% \edef\!ypivotcoord{#2}% \!xpivot=#1\!xunit \!ypivot=#2\!yunit \ignorespaces} \def\!dcheckforpivot{% \!ifnextchar{a}{\!dgetpivot}{\ignorespaces}} \def\!dgetpivot about #1 #2 {% \!xpivot=#1\relax \!ypivot=#2\relax \ignorespaces} % ** Following terminates rotation. % ** See Subsection 9.1 of the manual. \def\stoprotation{% \let\!rotateaboutpivot=\!!!rotateaboutpivot \let\!rotateonly=\!!!rotateonly \ignorespaces} % ** !!rotateaboutpivot{XREG}{YREG} % ** XREG <-- xpvt + cos(angle)*(XREG-xpvt) - sin(angle)*(YREG-ypvt) % ** YREG <-- ypvt + cos(angle)*(YREG-ypvt) + sin(angle)*(XREG-xpvt) % ** XREG,YREG are dimension registers. Can't be \!dimenA to \!dimenD \def\!!rotateaboutpivot#1#2{% \!dimenA=#1\relax \advance\!dimenA -\!xpivot \!dimenB=#2\relax \advance\!dimenB -\!ypivot \!dimenC=\!cosrotationangle\!dimenA \advance \!dimenC -\!sinrotationangle\!dimenB \!dimenD=\!cosrotationangle\!dimenB \advance \!dimenD \!sinrotationangle\!dimenA \advance\!dimenC \!xpivot \advance\!dimenD \!ypivot #1=\!dimenC #2=\!dimenD \ignorespaces} % ** \!!rotateonly{XREG}{YREG} % ** Like \!!rotateaboutpivot, but with a pivot of (0,0) \def\!!rotateonly#1#2{% \!dimenA=#1\relax \!dimenB=#2\relax \!dimenC=\!cosrotationangle\!dimenA \advance \!dimenC -\!rotsign\!sinrotationangle\!dimenB \!dimenD=\!cosrotationangle\!dimenB \advance \!dimenD \!rotsign\!sinrotationangle\!dimenA #1=\!dimenC #2=\!dimenD \ignorespaces} \def\!rotsign{} \def\!!!rotateaboutpivot#1#2{\relax} \def\!!!rotateonly#1#2{\relax} \stoprotation \def\!reverserotateonly#1#2{% \def\!rotsign{-}% \!rotateonly{#1}{#2}% \def\!rotsign{}% \ignorespaces} % ********************************** % *** SHADING (Handles shading) *** % ********************************** % ** User commands % ** \setshadegrid [span ] [point at XSHADE YSHADE] % ** \setshadesymbol [] ({SHADESYMBOL} % ** [ORIENTATION]) % ** Internal commands: % ** \!startvshade (xS,ybS,ytS) % ** \!starthshade (yS,xlS,xrS) % ** \!lshade [] % ** ** when shading vertically: % ** [the region from (xS,ybS,ytS) to] (xE,ybE,ytE) % ** ** when shading horizontally: % ** [the region from (yS,xlS,xrS) to] (yE,xlE,xrE) % ** \!qshade [] % ** ** when shading vertically: % ** [the region from (xS,ybS,ytS) to] (xM,ybM,ytM) (xE,ybE,ytE) % ** ** when shading horizontally: % ** [the region from (yS,xlS,xrS) to] (yM,xlM,xrM) (yE,xlE,xrE) % ** \!lattice{ANCHOR}{SPAN}{LOCATION}{INDEX}{LATTICE LOCATION} % ** \!override{NOMINAL DIMEN}{REPLACEMENT DIMEN}{DIMEN} % ** The shading routine can operate either in a "vertical mode" or a % ** "horizontal mode". In vertical mode, the region to be shaded is specified % ** in the form % ** {(x,y): xl <= x <= xr & yb(x) <= y <= yt(x)} % ** where yb and yt are functions of x. In horizontal mode, the region % ** is specified in the form % ** {(x,y): yb <= y <= yt & xl(y) <= x <= xr(y)}. % ** The functions yb and yt may be either both linear or both quadratic; % ** similarly for xl and xr. A region with say, piecewise quadratic bottom % ** and top boundaries, can be shaded by consecutive (vertical) \!qshades, % ** proceeding from left to right. Similarly, a region with piecewise % ** quadratic left and right boundaries can be shaded by consecutive % ** (horizontal) \!qshades, proceeding from bottom to top. More complex % ** regions can be shaded by partitioning them into appropriate subregions, % ** and shading those. % ** Shading is accomplished by placing a user-selected shading symbol at % ** those points of a regular grid which fall within the region to be % ** shaded. This region can be "shrunk" so that a largish shading symbol % ** will not extend outside it. Shrinking is accomplished by specifying % ** shrinkages for the left, right, bottom, and top boundaries, in a manner % ** discussed further below. % ** \shades and \!joins MUST NOT be intermingled. Finish drawing a curve % ** before starting to shade a region, and finish shading a region before % ** starting to draw a curve. % ** \setshadegrid [span ] [point at XSHADE YSHADE] % ** The shading symbol is placed down on the points of a grid centered % ** at the coordinate point (XSHADE,YSHADE). The grid points are of the % ** form (j*SPAN,k*SPAN), with j+k even. SPAN is specified % ** as a dimension. % ** (XSHADE,YSHADE) defaults to previous (XSHADE,YSHADE) (or (0,0) if none) % ** SPAN defaults to previous span (or 5pt if none) % ** See Subsection 7.2 of the manual. \def\setshadegrid{% \!ifnextchar{s}{\!getspan } {\!getspan span <\!dshade>}} \def\!getspan span <#1>{% \!dshade=#1\relax \!ifcoordmode \let\!GRnext=\!GRccheckforAP \else \let\!GRnext=\!GRdcheckforAP \fi \!GRnext} \def\!GRccheckforAP{% \!ifnextchar{p}{\!cgetanchor } {\!cgetanchor point at {\!xshadesave} {\!yshadesave} }} \def\!cgetanchor point at #1 #2 {% \edef\!xshadesave{#1}\edef\!yshadesave{#2}% \!xshade=\!xshadesave\!xunit \!yshade=\!yshadesave\!yunit \ignorespaces} \def\!GRdcheckforAP{% \!ifnextchar{p}{\!dgetanchor}% {\ignorespaces}} \def\!dgetanchor point at #1 #2 {% \!xshade=#1\relax \!yshade=#2\relax \ignorespaces} % ** \setshadesymbol [] ({SHADESYMBOL} % ** [ORIENTATION]) % ** Saves SHADESYMBOL away in an hbox for use with shading routines. % ** A shade symbol will not be plotted if its plot position comes within % ** distance LS of the left boundary, RS of the right boundary, TS of the % ** top boundary, BS of the bottom boundary. These parameters have % ** default values that should work in most cases (see below). % ** To override a default value, specify the replacement value % ** in the appropriate subfield of the shrinkages field. % ** 0pt may be coded as "z" (without the quotes). To accept a % ** default value, leave the field empty. Thus % ** [,z,,5pt] sets LS=default, RS=0pt, BS=default, TS=5pt . % ** Skipping the shrinkages field accepts all the defaults. % ** See Subsection 7.1 of the manual. \def\setshadesymbol{% \!ifnextchar<{\!setshadesymbol}{\!setshadesymbol<,,,> }} \def\!setshadesymbol <#1,#2,#3,#4> (#5#6){% % ** set the shadesymbol \!setputobject{#5}{#6}% \setbox\!shadesymbol=\box\!putobject% \!shadesymbolxshift=\!xshift \!shadesymbolyshift=\!yshift % % ** set the shrinkages \!dimenA=\!xshift \advance\!dimenA \!smidge% ** default LS = xshift - smidge \!override\!dimenA{#1}\!lshrinkage% \!dimenA=\!wd \advance \!dimenA -\!xshift% ** default RS = width - xshift \advance\!dimenA \!smidge% - smidge \!override\!dimenA{#2}\!rshrinkage \!dimenA=\!dp \advance \!dimenA \!yshift% ** default BS = depth + yshift \advance\!dimenA \!smidge% - smidge \!override\!dimenA{#3}\!bshrinkage \!dimenA=\!ht \advance \!dimenA -\!yshift% ** default TS = height - yshift \advance\!dimenA \!smidge% - smidge \!override\!dimenA{#4}\!tshrinkage \ignorespaces} \def\!smidge{-.2pt}% % ** \!override{NOMINAL DIMEN}{REPLACEMENT DIMEN}{DIMEN} % ** Overrides the NOMINAL DIMEN by the REPLACEMENT DIMEN to produce DIMEN, % ** according to the following rules: % ** REPLACEMENT DIMEN empty: DIMEN <-- NOMINAL DIMEN % ** REPLACEMENT DIMEN z: DIMEN <-- 0pt % ** otherwise: DIMEN <-- REPLACEMENT DIMEN % ** DIMEN must be a dimension register \def\!override#1#2#3{% \edef\!!override{#2}% \ifx \!!override\empty #3=#1\relax \else \if z\!!override #3=\!zpt \else \ifx \!!override\!blankz #3=\!zpt \else #3=#2\relax \fi \fi \fi \ignorespaces} \def\!blankz{ z} \setshadesymbol ({\fiverm .})% ** initialize plotsymbol % ** \fivesy ^^B is a small cross % ** \!startvshade [at] (xS,ybS,ytS) % ** Initiates vertical shading mode \def\!startvshade#1(#2,#3,#4){% \let\!!xunit=\!xunit% \let\!!yunit=\!yunit% \let\!!xshade=\!xshade% \let\!!yshade=\!yshade% \def\!getshrinkages{\!vgetshrinkages}% \let\!setshadelocation=\!vsetshadelocation% \!xS=\!M{#2}\!!xunit \!ybS=\!M{#3}\!!yunit \!ytS=\!M{#4}\!!yunit \!shadexorigin=\!xorigin \advance \!shadexorigin \!shadesymbolxshift \!shadeyorigin=\!yorigin \advance \!shadeyorigin \!shadesymbolyshift \ignorespaces} % ** \!starthshade [at] (yS,xlS,xrS) % ** Initiates horizontal shading mode \def\!starthshade#1(#2,#3,#4){% \let\!!xunit=\!yunit% \let\!!yunit=\!xunit% \let\!!xshade=\!yshade% \let\!!yshade=\!xshade% \def\!getshrinkages{\!hgetshrinkages}% \let\!setshadelocation=\!hsetshadelocation% \!xS=\!M{#2}\!!xunit \!ybS=\!M{#3}\!!yunit \!ytS=\!M{#4}\!!yunit \!shadexorigin=\!xorigin \advance \!shadexorigin \!shadesymbolxshift \!shadeyorigin=\!yorigin \advance \!shadeyorigin \!shadesymbolyshift \ignorespaces} % ** \!lattice{ANCHOR}{SPAN}{LOCATION}{INDEX}{LATTICE LOCATION} % ** Consider the lattice with points ANCHOR + j*SPAN. This routine determines % ** the index k of the smallest lattice point >= LOCATION, and sets % ** LATTICE LOCATION = ANCHOR + k*SPAN. % ** INDEX is assumed to be a count register, LATTICE LOCATION a dimen reg. \def\!lattice#1#2#3#4#5{% \!dimenA=#1% ** dimA = ANCHOR \!dimenB=#2% ** dimB = SPAN (assumed > 0pt) \!countB=\!dimenB% ** ctB = SPAN, as a count % % ** Determine index of smallest lattice point >= LOCATION \!dimenC=#3% ** dimC = LOCATION \advance\!dimenC -\!dimenA% ** now dimC = LOCATION-ANCHOR \!countA=\!dimenC% ** ctA = above, as a count \divide\!countA \!countB% ** now ctA = desired index, if dimC <= 0 \ifdim\!dimenC>\!zpt \!dimenD=\!countA\!dimenB% ** (tentative k)*span \ifdim\!dimenD<\!dimenC% ** if this is false, ctA = desired index \advance\!countA 1 % ** if true, have to add 1 \fi \fi % \!dimenC=\!countA\!dimenB% ** lattice location = anchor + ctA*span \advance\!dimenC \!dimenA #4=\!countA% ** the desired index #5=\!dimenC% ** corresponding lattice location \ignorespaces} % ** \!qshade [with shrinkages] [[LS,RS,BS,TS]] % ***** during vertical shading: % ** [the region from (xS,ybS,ytS) to] (xM,ybM,ytM) [and] (xE,ybE,ytE) % ** Shades the region {(x,y): xS <= x <= xE, yb(x) <= y <= yt(x)}, where % ** yb is the quadratic thru (xS,ybS) & (xM,ybM) & (xE,ybE) % ** yt is the quadratic thru (xS,ytS) & (xM,ybM) & (xE,ytE) % ** xS,ybS,ytS are either given by \!startvshade or carried over % ** as the ending values of the immediately preceding \!qshade. % ** For the interpretation of LS, RS, BS, & TS, see \setshadesymbol. The % ** values set there can be overridden, for the course of this \!qshade % ** only, in the same manner as overrides are specified for % ** \setshadesymbol. % ***** during horizontal shading: % ** [the region from (yS,xlS,xrS) to] (yM,xlM,xrM) [and] (yE,xlE,xrE) \def\!qshade#1(#2,#3,#4)#5(#6,#7,#8){% \!xM=\!M{#2}\!!xunit \!ybM=\!M{#3}\!!yunit \!ytM=\!M{#4}\!!yunit \!xE=\!M{#6}\!!xunit \!ybE=\!M{#7}\!!yunit \!ytE=\!M{#8}\!!yunit \!getcoeffs\!xS\!ybS\!xM\!ybM\!xE\!ybE\!ybB\!ybC%**Get coefficients B & C for \!getcoeffs\!xS\!ytS\!xM\!ytM\!xE\!ytE\!ytB\!ytC%**y=y0 + B(x-X0) + C(x-X0)**2 \def\!getylimits{\!qgetylimits}% \!shade{#1}\ignorespaces} % ** \!lshade ... (xE,ybE,ytE) % ** This is like \!qshade, but the top and bottom boundaries are linear, % ** rather than quadratic. \def\!lshade#1(#2,#3,#4){% \!xE=\!M{#2}\!!xunit \!ybE=\!M{#3}\!!yunit \!ytE=\!M{#4}\!!yunit \!dimenE=\!xE \advance \!dimenE -\!xS% ** xE-xS \!dimenC=\!ytE \advance \!dimenC -\!ytS% ** ytE-ytS \!divide\!dimenC\!dimenE\!ytB% ** ytB = (ytE-ytS)/(xE-xS) \!dimenC=\!ybE \advance \!dimenC -\!ybS% ** ybE-ybS \!divide\!dimenC\!dimenE\!ybB% ** ybB = (ybE-ybS)/(xE-xS) \def\!getylimits{\!lgetylimits}% \!shade{#1}\ignorespaces} % ** \!getcoeffs{X0}{Y0}{X1}{Y1}{X2}{Y2}{B}{C} % ** Finds B and C such that the quadratic y = Y0 + B(x-X0) + C(x-X0)**2 % ** passes through (X1,Y1) and (X2,Y2): when X0=0=Y0, the formulas are: % ** B = S1 - X1*C, C = (S2-S1)/X2 % ** with % ** S1 = Y1/X1, S2 = (Y2-Y1)/(X2-X1). \def\!getcoeffs#1#2#3#4#5#6#7#8{% \!dimenC=#4\advance \!dimenC -#2% ** dimC=Y1-Y0 \!dimenE=#3\advance \!dimenE -#1% ** dimE=X1-X0 \!divide\!dimenC\!dimenE\!dimenF% ** dimF=S1 \!dimenC=#6\advance \!dimenC -#4% ** dimC=Y2-Y1 \!dimenH=#5\advance \!dimenH -#3% ** dimH=X2-X1 \!divide\!dimenC\!dimenH\!dimenG% ** dimG=S2 \advance\!dimenG -\!dimenF% ** dimG=S2-S1 \advance \!dimenH \!dimenE% ** dimH=X2-X0 \!divide\!dimenG\!dimenH#8% ** C=(S2-S1)/(X2-X0) \!removept#8\!t% ** C, without "pt" #7=-\!t\!dimenE% ** -C*(X1-X0) \advance #7\!dimenF% ** B=S1-C*(X1-X0) \ignorespaces} \def\!shade#1{% % ** Get LS,RS,BS,TS for this panel \!getshrinkages#1<,,,>\!nil% % ** now effective LS=dimE, RS=dimF, % ** BS=dimG, TS=dimH \advance \!dimenE \!xS% ** now dimE=xS+LS \!lattice\!!xshade\!dshade\!dimenE% ** set parity=index of left-mst x-lattice \!parity\!xpos% ** point >= xS+LS, xpos=its location \!dimenF=-\!dimenF% ** set dimF=xE-RS \advance\!dimenF \!xE % \!loop\!not{\ifdim\!xpos>\!dimenF}% ** loop over x-lattice points <= xE-RS \!shadecolumn% \advance\!xpos \!dshade% ** move over to next column \advance\!parity 1% ** increase index of x-point \repeat % \!xS=\!xE% ** shift ending values to starting values \!ybS=\!ybE \!ytS=\!ytE \ignorespaces} \def\!vgetshrinkages#1<#2,#3,#4,#5>#6\!nil{% \!override\!lshrinkage{#2}\!dimenE \!override\!rshrinkage{#3}\!dimenF \!override\!bshrinkage{#4}\!dimenG \!override\!tshrinkage{#5}\!dimenH \ignorespaces} \def\!hgetshrinkages#1<#2,#3,#4,#5>#6\!nil{% \!override\!lshrinkage{#2}\!dimenG \!override\!rshrinkage{#3}\!dimenH \!override\!bshrinkage{#4}\!dimenE \!override\!tshrinkage{#5}\!dimenF \ignorespaces} \def\!shadecolumn{% \!dxpos=\!xpos \advance\!dxpos -\!xS% ** dx = x - xS \!removept\!dxpos\!dx% ** ditto, without "pt" \!getylimits% ** get top and bottom y-values \advance\!ytpos -\!dimenH% ** less TS \advance\!ybpos \!dimenG% ** plus BS \!yloc=\!!yshade% ** get anchor point for this column \ifodd\!parity \advance\!yloc \!dshade \fi \!lattice\!yloc{2\!dshade}\!ybpos% \!countA\!ypos% ** ypos=smallest y point for this column \!dimenA=-\!shadexorigin \advance \!dimenA \!xpos% ** over \loop\!not{\ifdim\!ypos>\!ytpos}% ** loop over ypos <= yt(t) \!setshadelocation% ** vmode: xloc=xpos, yloc=ypos % ** hmode: xloc=ypos, yloc=xpos \!rotateaboutpivot\!xloc\!yloc% \!dimenA=-\!shadexorigin \advance \!dimenA \!xloc% ** over \!dimenB=-\!shadeyorigin \advance \!dimenB \!yloc% ** up \kern\!dimenA \raise\!dimenB\copy\!shadesymbol \kern-\!dimenA \advance\!ypos 2\!dshade \repeat \ignorespaces} \def\!qgetylimits{% \!dimenA=\!dx\!ytC \advance\!dimenA \!ytB% ** yt(t)=ytS + dx*(Bt + dx*Ct) \!ytpos=\!dx\!dimenA \advance\!ytpos \!ytS \!dimenA=\!dx\!ybC \advance\!dimenA \!ybB% ** yb(t)=ybS + dx*(Bb + dx*Cb) \!ybpos=\!dx\!dimenA \advance\!ybpos \!ybS} \def\!lgetylimits{% \!ytpos=\!dx\!ytB% ** yt(t)=ytS + dx*Bt \advance\!ytpos \!ytS \!ybpos=\!dx\!ybB% ** yb(t)=ybS + dx*Bb \advance\!ybpos \!ybS} \def\!vsetshadelocation{% ** vmode: xloc=xpos, yloc=ypos \!xloc=\!xpos \!yloc=\!ypos} \def\!hsetshadelocation{% ** hmode: xloc=ypos, yloc=xpos \!xloc=\!ypos \!yloc=\!xpos} % ************************************** % *** TICKS (Draws ticks on graphs) *** % ************************************** % ** User commands % ** \ticksout % ** \ticksin % ** \gridlines % ** \nogridlines % ** \loggedticks % ** \unloggesticks % ** See Subsection 3.4 of the manual % ** The following is an option of the \axis command % ** ticks % ** [in] [out] % ** [long] [short] [length ] % ** [width ] % ** [andacross] [butnotacross] % ** [logged] [unlogged] % ** [unlabeled] [numbered] [withvalues VALUE1 VALUE2 ... VALUEk / ] % ** [quantity Q] [at LOC1 LOC2 ... LOCk / ] [from LOC1 to LOC2 by % ** LOC_INCREMENT] % ** See Subsection 3.2 of the manual for the rules. % ** The various options of the tick field are processed by the % ** \!nextkeyword command defined below. % ** For example, `\!nextkeyword short ' expands to `\!ticksshort', % ** while `\!nextkeyword withvalues' expands to `\!tickswithvalues'. \def\!axisticks {% \def\!nextkeyword##1 {% \expandafter\ifx\csname !ticks##1\endcsname \relax \def\!next{\!fixkeyword{##1}}% \else \def\!next{\csname !ticks##1\endcsname}% \fi \!next}% \!axissetup \def\!axissetup{\relax}% \edef\!ticksinoutsign{\!ticksinoutSign}% \!ticklength=\longticklength \!tickwidth=\linethickness \!gridlinestatus \!setticktransform \!maketick \!tickcase=0 \def\!LTlist{}% \!nextkeyword} \def\ticksout{% \def\!ticksinoutSign{+}} \def\ticksin{% \def\!ticksinoutSign{-}} \ticksout \def\gridlines{% \def\!gridlinestatus{\!gridlinestootrue}} \def\nogridlines{% \def\!gridlinestatus{\!gridlinestoofalse}} \nogridlines \def\loggedticks{% \def\!setticktransform{\let\!ticktransform=\!logten}} \def\unloggedticks{% \def\!setticktransform{\let\!ticktransform=\!donothing}} \def\!donothing#1#2{\def#2{#1}} \unloggedticks % ** \!ticks/ : terminates read of tick options \expandafter\def\csname !ticks/\endcsname{% \!not {\ifx \!LTlist\empty} \!placetickvalues \fi \def\!tickvalueslist{}% \def\!LTlist{}% \expandafter\csname !axis/\endcsname} \def\!maketick{% \setbox\!boxA=\hbox{% \beginpicture \!setdimenmode \setcoordinatesystem point at {\!zpt} {\!zpt} \linethickness=\!tickwidth \ifdim\!ticklength>\!zpt \putrule from {\!zpt} {\!zpt} to {\!ticksinoutsign\!tickxsign\!ticklength} {\!ticksinoutsign\!tickysign\!ticklength} \fi \if!gridlinestoo \putrule from {\!zpt} {\!zpt} to {-\!tickxsign\!xaxislength} {-\!tickysign\!yaxislength} \fi \endpicturesave <\!Xsave,\!Ysave>}% \wd\!boxA=\!zpt} \def\!ticksin{% \def\!ticksinoutsign{-}% \!maketick \!nextkeyword} \def\!ticksout{% \def\!ticksinoutsign{+}% \!maketick \!nextkeyword} \def\!tickslength<#1> {% \!ticklength=#1\relax \!maketick \!nextkeyword} \def\!tickslong{% \!tickslength<\longticklength> } \def\!ticksshort{% \!tickslength<\shortticklength> } \def\!tickswidth<#1> {% \!tickwidth=#1\relax \!maketick \!nextkeyword} \def\!ticksandacross{% \!gridlinestootrue \!maketick \!nextkeyword} \def\!ticksbutnotacross{% \!gridlinestoofalse \!maketick \!nextkeyword} \def\!tickslogged{% \let\!ticktransform=\!logten \!nextkeyword} \def\!ticksunlogged{% \let\!ticktransform=\!donothing \!nextkeyword} \def\!ticksunlabeled{% \!tickcase=0 \!nextkeyword} \def\!ticksnumbered{% \!tickcase=1 \!nextkeyword} \def\!tickswithvalues#1/ {% \edef\!tickvalueslist{#1! /}% \!tickcase=2 \!nextkeyword} \def\!ticksquantity#1 {% \ifnum #1>1 \!updatetickoffset \!countA=#1\relax \advance \!countA -1 \!ticklocationincr=\!axisLength \divide \!ticklocationincr \!countA \!ticklocation=\!axisstart \loop \!not{\ifdim \!ticklocation>\!axisend} \!placetick\!ticklocation \ifcase\!tickcase \relax % Case 0: no labels \or \relax % Case 1: numbered -- not available here \or \expandafter\!gettickvaluefrom\!tickvalueslist \edef\!tickfield{{\the\!ticklocation}{\!value}}% \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist% \fi \advance \!ticklocation \!ticklocationincr \repeat \fi \!nextkeyword} \def\!ticksat#1 {% \!updatetickoffset \edef\!Loc{#1}% \if /\!Loc \def\next{\!nextkeyword}% \else \!ticksincommon \def\next{\!ticksat}% \fi \next} \def\!ticksfrom#1 to #2 by #3 {% \!updatetickoffset \edef\!arg{#3}% \expandafter\!separate\!arg\!nil \!scalefactor=1 \expandafter\!countfigures\!arg/ \edef\!arg{#1}% \!scaleup\!arg by\!scalefactor to\!countE \edef\!arg{#2}% \!scaleup\!arg by\!scalefactor to\!countF \edef\!arg{#3}% \!scaleup\!arg by\!scalefactor to\!countG \loop \!not{\ifnum\!countE>\!countF} \ifnum\!scalefactor=1 \edef\!Loc{\the\!countE}% \else \!scaledown\!countE by\!scalefactor to\!Loc \fi \!ticksincommon \advance \!countE \!countG \repeat \!nextkeyword} \def\!updatetickoffset{% \!dimenA=\!ticksinoutsign\!ticklength \ifdim \!dimenA>\!offset \!offset=\!dimenA \fi} \def\!placetick#1{% \if!xswitch \!xpos=#1\relax \!ypos=\!axisylevel \else \!xpos=\!axisxlevel \!ypos=#1\relax \fi \advance\!xpos \!Xsave \advance\!ypos \!Ysave \kern\!xpos\raise\!ypos\copy\!boxA\kern-\!xpos \ignorespaces} \def\!gettickvaluefrom#1 #2 /{% \edef\!value{#1}% \edef\!tickvalueslist{#2 /}% \ifx \!tickvalueslist\!endtickvaluelist \!tickcase=0 \fi} \def\!endtickvaluelist{! /} \def\!ticksincommon{% \!ticktransform\!Loc\!t \!ticklocation=\!t\!!unit \advance\!ticklocation -\!!origin \!placetick\!ticklocation \ifcase\!tickcase \relax % Case 0: no labels \or % Case 1: numbered \ifdim\!ticklocation<-\!!origin \edef\!Loc{$\!Loc$}% \fi \edef\!tickfield{{\the\!ticklocation}{\!Loc}}% \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist% \or % Case 2: labeled \expandafter\!gettickvaluefrom\!tickvalueslist \edef\!tickfield{{\the\!ticklocation}{\!value}}% \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist% \fi} \def\!separate#1\!nil{% \!ifnextchar{-}{\!!separate}{\!!!separate}#1\!nil} \def\!!separate-#1\!nil{% \def\!sign{-}% \!!!!separate#1..\!nil} \def\!!!separate#1\!nil{% \def\!sign{+}% \!!!!separate#1..\!nil} \def\!!!!separate#1.#2.#3\!nil{% \def\!arg{#1}% \ifx\!arg\!empty \!countA=0 \else \!countA=\!arg \fi \def\!arg{#2}% \ifx\!arg\!empty \!countB=0 \else \!countB=\!arg \fi} \def\!countfigures#1{% \if #1/% \def\!next{\ignorespaces}% \else \multiply\!scalefactor 10 \def\!next{\!countfigures}% \fi \!next} \def\!scaleup#1by#2to#3{% \expandafter\!separate#1\!nil \multiply\!countA #2\relax \advance\!countA \!countB \if -\!sign \!countA=-\!countA \fi #3=\!countA \ignorespaces} \def\!scaledown#1by#2to#3{% \!countA=#1\relax% ** get original # \ifnum \!countA<0 % ** take abs value, \def\!sign{-}% ** remember sign \!countA=-\!countA \else \def\!sign{}% \fi \!countB=\!countA% ** copy |#| \divide\!countB #2\relax% ** integer part (|#|/sf) \!countC=\!countB% ** get sf * (|#|/sf) \multiply\!countC #2\relax \advance \!countA -\!countC% ** ctA is now remainder \edef#3{\!sign\the\!countB.}% ** +- integerpart. \!countC=\!countA % ** Tack on proper number \ifnum\!countC=0 % ** of zeros after . \!countC=1 \fi \multiply\!countC 10 \!loop \ifnum #2>\!countC \edef#3{#3\!zero}% \multiply\!countC 10 \repeat \edef#3{#3\the\!countA}% ** Add on rest of remainder \ignorespaces} \def\!placetickvalues{% \advance\!offset \tickstovaluesleading \if!xswitch \setbox\!boxA=\hbox{% \def\\##1##2{% \!dimenput {##2} [B] (##1,\!axisylevel)}% \beginpicture \!LTlist \endpicturesave <\!Xsave,\!Ysave>}% \!dimenA=\!axisylevel \advance\!dimenA -\!Ysave \advance\!dimenA \!tickysign\!offset \if -\!tickysign \advance\!dimenA -\ht\!boxA \else \advance\!dimenA \dp\!boxA \fi \advance\!offset \ht\!boxA \advance\!offset \dp\!boxA \!dimenput {\box\!boxA} [Bl] <\!Xsave,\!Ysave> (\!zpt,\!dimenA) \else \setbox\!boxA=\hbox{% \def\\##1##2{% \!dimenput {##2} [r] (\!axisxlevel,##1)}% \beginpicture \!LTlist \endpicturesave <\!Xsave,\!Ysave>}% \!dimenA=\!axisxlevel \advance\!dimenA -\!Xsave \advance\!dimenA \!tickxsign\!offset \if -\!tickxsign \advance\!dimenA -\wd\!boxA \fi \advance\!offset \wd\!boxA \!dimenput {\box\!boxA} [Bl] <\!Xsave,\!Ysave> (\!dimenA,\!zpt) \fi} \normalgraphs \catcode`!=12 % ***** THIS MUST NEVER BE OMITTED \numsec=0\numfor=1 %\magnification=\magstep1\hoffset=0.cm %\voffset=1truecm\hsize=16.5truecm \vsize=21.truecm %\baselineskip=14pt plus0.1pt minus0.1pt \parindent=12pt %\lineskip=4pt\lineskiplimit=0.1pt \parskip=0.1pt plus1pt %\def\ds{\displaystyle}\def\st{\scriptstyle}\def\sst{\scriptscriptstyle} %\font\seven=cmr7 %\nopagenumbers \centerline {\bf LOW TEMPERATURE STOCHASTIC DYNAMICS} \centerline {\bf FOR AN ISING MODEL} \centerline {\bf WITH ALTERNATING FIELD.} \vskip 2 truecm \centerline {Francesca R. Nardi and Enzo Olivieri}\par\noindent \vskip 0.5 truecm \centerline {\it Dipartimento di Matematica - II Universit\`a di Roma}\par\noindent \centerline {\it Tor Vergata - Via della Ricerca Scientifica - 00173 ROMA - Italy}\par\noindent \centerline {\rm E-mail: nardi@mat.utovrm.it, olivieri@mat.utovrm.it} \vskip 1.5 truecm \centerline { Dedicated to the memory of Roland L'vovich Dobrushin} \vskip 1. truecm \centerline {\bf Abstract} \vskip 0.5 truecm \centerline { \vbox { \hsize=13truecm \baselineskip 0.35cm We study, in the low temperature regime, a 2D stochastic Ising system with nearest neighbour ferromagnetic interaction subject to a positive (negative) magnetic field on even (odd) horizontal lines. We find, for different values of the magnetic fields, very different dynamical behaviours which are strictly related to the peculiar features of the expected equilibrium phase diagram at low temperature. In particular we analyse in detail the metastable behaviour (lifetime of the metastable equilibrium, typical paths during the transition to the stable equilibrium) in the vicinities of a ``low-temperature critical point".} } \par \vskip 2 truecm {\bf Keywords : stochastic Ising model, metastability, nucleation, large deviations.} \vfill\eject \numsec=1\numfor=1 \vskip 1cm {\bf Section 1. Introduction.} \par \vskip 1cm In the recent years many efforts have been devoted to the description of metastability and nucleation. This dynamical phenomenon, appearing in thermodynamic systems close to a first order phase transition, has been analysed in several papers, with the rigorous methods of mathematical physics, in the framework of Glauber dynamics for various lattice spin systems ([NS1], [NS2], [KO1], [KO2],[CO]). By Glauber dynamics we mean a single spin-flip Markovian time evolution which is reversible w.r.t the Gibbs measure corresponding to the interaction characterizing a lattice spin model. We refer to [PL1], [PL2], [CGOV] for a general discussion on metastability and, for instance, to [NS1], [CO] for a more specific discussion.\par In this paper we study a stochastic Ising model with alternating field in the low temperature region. We consider discrete time Metropolis dynamics (see \equ (1.10) below) for a 2D ferromagnetic Ising system with nearest neighbours interaction (coupling constant $J > 0$) enclosed in a sufficiently large but finite torus $\L$ and subject to a positive (negative) external magnetic field $h_1 >0$, ($- h_2 < 0$) on the even (odd) horizontal lines.\par The phase diagram in the ($h_1, h_2$)-plane at $T=0$ is discussed below. Mainly three different configurations appear as ground states in different regions: all pluses $\piuuno$, all minuses $\menouno$ and an alternate configuration $\piumeno$ with all pluses (all minuses) on even (odd) horizontal lines. They are separated by the coexistence lines $h_1=h_2;\;\; h_1 = 2J; \;\; h_2 = 2J$ which converge in the triple point $\widetilde P \equiv (2J,2J)$ (see Fig. 2.1).\par There are strong arguments leading to the conjecture that for positive temperature $T$ the phase diagram changes completely (phase $\equiv$ infinite volume Gibbs measure). It is expected that for $T>0$ the coexistence lines $h_1 = 2J; \;\; h_2 = 2J$ disappear since the system, in that region, behaves like a collection of almost independent one-dimensional standard zero field Ising systems. On the other hand for $h_1= h_2 < 2J$ we expect that at low enough temperature $T$ we have coexistence of two phases and that, given such a $T$, on the $h_1 = h_2$ line the coexistence ends at a critical point $P^*\equiv ( 2J-\d, 2J-\d)$ with $\d \sim \exp (-{\rm const} {1\over T})$. It is not hard to realize that on the segment $0 < h_1 = h_2 < 2J -\d $ our model shares many features with a zero field ferromagnetic anisotropic Ising model with coupling constants, along horizontal and vertical directions given, respectively, by $J_1 = J, \; J_2 = J - { (h_1 +h_2)\over 4}$ (see \equ (3.4) below). It becomes more and more anisotropic as we approach the triple point $\widetilde P$.\par In the framework of our stochastic dynamics we will analyse the metastable behaviour by choosing the parameters $h_1, h_2$ close to the line $0 < h_1 = h_2 < 2J$ or close to the line $h_2 =2J, \; h_1 > 2J$ and taking a large but finite volume $\L$ in the limit of very small $T = 1/ \b $. We will always assume $h_1 \geq h_2$; because of the symmetry this is not a loss of generality.\par Mathematically the above described asymptotic regime will correspond to the study of some large deviation problem for a Markov chain with transition probabilities exponentially small in a large parameter $\b$: the so called Freidlin-Wentzell regime (see [C], [FW], [OS1], [OS2]).\par One expects that the special equilibrium behaviour of our model and in particular the disappearance, for an arbitrarily small but strictly positive $T$ of two coexistence lines, the appearance of a critical ending point of the $0 < h_1 = h_2 $ coexistence line and the extreme anisotropical behaviour when approaching $\widetilde P$ must have consequences in the dynamical behaviour at low temperature in the vicinities of these ($ T = 0$) coexistence lines. Indeed our results provide the dynamical counterparts of the above described static behaviour confirming the above mentioned peculiarities; also some other unexpected features show up.\par We will consider the regions: $$0 2J, 0 < \m =2J - h_2 \Eq (1.2)$$ corresponding to the unique ground state $\piuuno$. Starting from $\menouno$ (or $\piumeno$) we will consider the first hitting time $\t_{\piuuno}$ to the configuration $\piuuno$ ( see \equ (2.7) below), compute its asymptotics for large $\b$ and describe the typical mechanism of transition (first excursion) from $\menouno $ ( or $\piumeno$ ) to $\piuuno$. Our main results are:\par\noindent 1. Near the $T=0$ coexistence line given by: $h_2 = 2J, h_1 > 2J$ ( disappearing at $T>0$) we find absence of metastability in the sense that the protocritical droplet (see [NS1], [KO1], [KO2]) is microscopic and the ``lifetime" does not diverge as we approach the coexistence line.\par\noindent 2. Near the $T=0$ coexistence line given by: $0 < h_1= h_2 < 2J$ we have ``usual" metastable behaviour. The transition is driven by the formation of a critical nucleus whose size diverges as we approach the coexistence line. The unexpected behaviour concerns the shape of the critical nucleus as well as the nucleation pattern. We call Wulff shape the equilibrium $T=0$ shape of a droplet namely the shape minimizing the energy for fixed volume. It turns out that it is given by a rectangle with vertical and horizontal sides in the ratio $$ {l_2 \over l_1} = { J - ( {h_1 + h_2 \over 4}) \over J } \Eq (1.3) $$ This ratio becomes $\ll 1$ near the triple point $\widetilde P$. We find that the shape characterizing the critical nucleus and all the droplets appearing before its formation is rectangular but non-Wulff. It is characterized by a ratio $$ {l_2 \over l_1} \sim 2\Eq (1.4) $$ Notice that the non-Wulff nature of the nucleation pattern is even enhanced w.r.t. what has been found ([KO1]) in the anisotropic Ising model. The relevant rectangles during the nucleation actually have a vertical side {\it larger} (almost twice as much) than the horizontal one whereas for the Wulff shape we have the opposite situation and the horizontal side becomes even arbitrarily larger than the vertical one if we are sufficiently close to $\widetilde P$. This fact cannot be easily predicted on static grounds but it is rather related to a genuine dynamic effect. \par\noindent 3. In the vicinity of $\widetilde P$ the mechanism of nucleation depends on the the angle from which we approach it. In particular it turns out that given a halfline emerging from $\widetilde P$, lying inside the regions \equ (1.1), \equ (1.2) and forming an angle $\a$ with the line $ h_2 = 2J$, no matter how close we go to $\widetilde P$, staying on this line, the size of the critical droplet remains constant: it depends on $\a$ and tends to infinity when $\a$ tends to the value ${3 \over 4} \p$ corresponding to the line $h_1 = h_2$.\par The paper is organized as follows: in Section 2 we give the definitions and state our main result namely Theorem 1 which refers to the region \equ (1.1). In Section 3 we analyse the local minima of the energy and their (generalized) basins of attraction. In Section 4 we prove Theorem 1. In Section 5 we give further results concerning the typical trajectories of our process during the first excursion. Finally in Section 6 we briefly analyse the other regions of parameters. \par \numsec=2\numfor=1 \vskip 1cm {\bf Section 2. Definitions and results.} \par \vskip 1cm We start by introducing the model that we want to study.\par The configuration space is $${\cal S}_{\L} = \{-1,+1\}^{\L}\Eq (2.1)$$ where $\L \; = \L_N \equiv [1,\dots ,N]\times [1,\dots ,N] $ is a two-dimensional torus (a square with periodic boundary conditions) of side $N$; this $N$ is assumed to be even. \par A configuration $\s$ is a function : $$ \s \; : \;\L_N \; \to \; \{ -1,+1\} $$ We write $\s \prec \s'$ if $\s$ is pointwise smaller than $\s'$: $$ \s \prec \s' \;\;\Longleftrightarrow \;\; \s(x) \leq \s'(x)\; \forall x \Eq (2.1a) $$ Let ${\cal L}_1$ ( ${\cal L}_2$ ) be the set of horizontal even (odd) rows in ${\bf Z^2}$: $${\cal L}_1=\{x=(x_1,x_2) {\in \L_N} \quad \vert \quad x_2 \quad \hbox{is even} \quad \} $$ $${\cal L}_2=\L_N \backslash {\cal L}_1 $$ To any configuration $\s\in{\cal S}_{\L}$ we associate the energy: $$ H(\sigma)=-{J\over 2}\sum_{\subset \L_N} \s(x) \s(y)-{{h_1}\over 2}\sum_{x\in{\cal L}_1} \s(x)+{{h_2}\over 2}\sum_{x\in{\cal L}_2}\s(x) \Eq (2.2)$$ where $J$, $h_1, h_2$ are positive constants and $$ denotes a generic pair of nearest neighbour sites in $\L_N$. \par Thus \equ (2.2) describes an Ising model with alternating field given by $h_1 >0$ in ${\cal L}_1$ and by $- h_2 <0$ in ${\cal L}_2$: it will be called $h_1 h_2$-model.\par The associated {\it Gibbs measure} in the torus $\L_N$ is given by: $$ \m_{\L_N} \; = \; {\exp ( - \b H(\s)) \over Z_{\L_N} } \Eq (2.2') $$ where $\b $ represents the inverse temperature and $Z_{\L_N}$ is the normalization factor called {\it partition function}.\par We want now to introduce a dynamics in our model . It is a disctrete time Glauber dynamics namely a Markov chain with state space ${\cal S}_{\L_N}$ and transition probabilities $P(\s, \h)$ allowing only transitions between pairs $\s, \h$ of configurations differing by a single spin-flip and {\it reversible} w.r.t. the Gibbs measure $\m_{\L_N}$ for the $h_1h_2$-model, namely such that: $$ \m_{\L_N} (\s) P(\s, \h)\; = \; \m_{\L_N} (\h) P(\h, \s). \Eq (2.4) $$ Our choice is the so called {Metropolis algorithm}, where $P(\s, \h)$ for $\s \neq \eta$, is defined as $$P(\sigma,\eta)=\left\{ \matrix{ {e^{-\beta[H(\eta)-H(\sigma)]^{+}}\over\ |\L_N|}& {\rm if} \;\exists\; x\in\,\L_N:\; \sigma^{(x)}=\eta\cr \quad \cr 0 &{\rm otherwise}\cr} \right. \Eq (1.10)$$ where $$\s^{(x)}(y) =\left\{ \eqalign {\s(y)&\;\;\;\;\;\;\;\forall\; y \not=x\cr -\s(y)&\;\;\;\;\;\;\; y=x\cr}. \right.\Eq (1.8)$$ and : $$a^{+}=\left\{ \matrix { a&{\rm if}\;a\geq 0\cr 0&{\rm if}\;a<0\cr}\right. \;\;\;\; .\Eq (2.6)$$ The {\it space of trajectories} of the process is $$ \Omega\equiv\bigl({\cal S}_{\L_N} \bigr)^{{\bf N}}. $$ An element in $\Omega$ is denoted by $\omega$; it is a function $$\omega:{\bf N} \to {\cal S}_{\L_N}.$$ We often write $\omega=\sigma_0,\sigma_1,\dots,\sigma_t,\dots$. \par We will call {\it path} an {\it allowed} trajectory namely: $\omega=\sigma_0,\sigma_1,\dots,\sigma_t,\dots$ is a path iff $\sigma_j$ and $\sigma_{j+1}\; \forall j$ are {\it connected} in the sense that $\sigma_{j+1} = \sigma_j^{ (x)}$ for some $x\in\L_N$ . We use the notation $\o :\s \rightarrow \h$ to denote a path $\o$ joining $\s$ to $\h$. \par A path $\o=\s_0,\s_1,\dots ,\s_n$ is called {\it downhill} ({\it uphill}) iff $H(\s_{j+1})\le H(\s_j)$ ($H(\s_{j+1})\ge H(\s_j)$) $\forall j=0,1,\dots ,n-1$. We will use the convention that a downhill path can (and will) end only in a local minimum for $H$. \par Given $V>0$ a path $\o=\s_0,\s_1,\dots ,\s_n$ is called {\it $V$-downhill} if $$\hbox{either}\;\;\;\;\;\;\forall\> i\in(0,\ldots,n-1) \qquad\hbox{H}(\s_i)> \hbox{H}(\s_{i+1})$$ $$\hbox{or}\;\;\;\forall\> i\in(0,\ldots,n-2)\;\;\;\;\;\hbox{H}(\s_i)+V=\hbox{H}(\s_{i+1}) \qquad \hbox{and} \qquad \hbox{H}(\s_i)> \hbox{H}(\s_{i+2})$$ A set $D$ of configurations, $D \in {\cal S}_{\L_N}$, is said to be {\it connected} iff for every pair of configurations $\s,\h\in D$, $\exists$ a path $\o :\s \rightarrow\h$ such that $\o\subset D$. \par We say that a configuration $\s$ is {\it downhill connected} ({\it$V$-downhill connected}) to $\h$ iff there exists a downhill ($V$-downhill) path $\o :\s\rightarrow\h$.\par We say that a path $\o = \s_0, \dots , \s_t, \dots$ is {\it almost downhill} if the energy does not exceed the initial value, namely: $$ H(\s_i) \leq H(\s_0), \;\;\; i=0,1,\dots $$ \par We will denote by $M$ the set of all locally stable configurations namely the set of all local minima of the energy. More precisely: $\s\in M$ iff for every $x\in\L_N ,$ the corresponding increment in energy, given by $$\D _{x} H(\s):= H(\s^{(x)}) - H(\s) \Eq (2.6')$$ is positive. \par We will choose the parameters $J,h_1,h_2$ so that the quantity $\D _{x} H(\s)$ will be always non-zero and this will somehow simplify some arguments. \par Given $D\subset {\cal S}_{\L_N}$ we define the (outer) boundary $\partial D$ of $D$ as the set: $$ \partial D \equiv \partial ^+ D:= \{\s \not\in D : \exists \s' \in D : P(\s',\s) >0\}\;\; , $$ namely $$ \partial D := \{\s \not\in D :\exists x\in \L_N \;\hbox { such that}\; \s' = \s^{(x)}\in D\}\;\; .\Eq (2.6'') $$ Similarly we define the inner boundary $\partial ^- D$ as $$ \partial ^- D := \{\s \in D :\exists x\in \L_N \;\hbox { such that}\; \s' = \s^{(x)}\not\in D\}\;\; .\Eq (2.6aa)$$ We denote by $F=F(D)$ the ``bottom" of $D$ namely the set of all minima of the energy on $ D $: $$ F(D) := \{ \z\in D : \min _{ \s\in D } H(\s) = H(\z) \}\;\; . \Eq(2.6 '''') $$ We denote by $U=U(D)$ the set of all minima of the energy on the boundary $\partial D $ of $D$: $$ U(D) \equiv F(\partial D) := \{ \z \in \partial D : \min _{ \s \in \partial D } H(\s) = H(\z) \} \Eq(2.6''') $$ and we define $H(U(D)):=H(\xi)$ with $\xi\in U(D)$. \par Given a stable state $\s\in M$ i.e. a local minimum for the energy, we define the following {\it basins} for $\s$:\par \noindent i) the {\it basin of attraction of } $\s$ given by: $$ B(\s) := \{ \z : \hbox {every downhill path starting from }\z \; \hbox {ends in} \; \s\}\;\; , \Eq(2.6b) $$ $B(\s) $ can be seen as the usual basin of attraction of $\s$ with respect to the $\b = \infty$ dynamics. \par \noindent ii) $\bar B(\s) =$ the {\it strict basin of attraction of } $\s$ given by :\par $$ \bar B(\s) := \{ \z \in B(\s) \; : \; H(\z) < H(U( B(\s)))\}\;\; . \Eq(2.6c) $$ \par \noindent iii) finally, given $V>0$, we define the $V$-{\it basin} of $\s$ as the (possibly empty) set: $$ B^{(V)} (\s) := \{ \z : \hbox {every downhill path starting from }\z \; \hbox {ends} $$ $$ \hbox { in a local minimum $\x \in M$ which is $V$-downhill connected to }\; \s\}\;\; ; \Eq(2.6d) $$ We introduce now the useful notion of {\it cycle}. A connected set $A$ which satisfies: $$ \max _ {\s\in A} H(\s) = \bar H < \min _ {\z \in \partial A } H(\z) = H(U(A)) $$ is called {\it cycle}. Notice that every local minimum for the energy is a (trivial) cycle. \par The following simple properties of the cycles are true. Their proof is immediate (see, for instance [OS1]). \par\noindent \item{1.} Given a state $\bar \s \in {\cal S}_{\L_N} $ and a real number $c$ the set of all $\s$'s connected to $\bar\s $ by paths with energy always below $c$ either coincides with ${\cal S}_{\L_N}$ or it is a cycle $A$ with $$ H(U(A)) \geq c\;\; . $$ \item{2.} Given two cycles $A_1,\; A_2$, either i) $ A_1 \cap A_2 = \emptyset$ or ii) $A_1 \subset A_2 $ or, vice-versa, $A_2 \subset A_1 $ . \par \par For each pair of states $\s,\h\in {\cal S}_{\L_N}$ we define their minimal saddle $ { S}(x,y)$ as the set of states corresponding to the solution of the following minimax problem: let, for any path $\o$ $$ \hat H(\o)\; := \max _{ \z\in \o} H(\z), \;\; \;\;\;\;\;\;\bar H_{\s,\h} \;:=\;\min_{\o : \s \to \h} \hat H (\o)\;\; , $$ find $$ S(\s,\h):= \{ \z:\; H(\z) = \bar H_{\s,\h} ; \; \exists \;\o : \;\s \to \h ,\; \o \ni \z,\;\hat H(\o) = \bar H_{\s,\h} \}\;\; . $$ $\bar H_{\s,\h}$ is called {\it communication height} between $\s$ and $\h$.\par A saddle $S(\s,\h)$ such that $S(\s,\h) \cap \{\s,\h\} \neq \emptyset$ is called {\it trivial}.\par Given a connected set $D\subset {\cal S}_{\L}$, consider the (possibly empty) set $\widetilde S(D)$ of configurations in $\partial D$ downhill connected to some configurations in $D^c \equiv {\cal S}_{\L} \setminus D$. We call {\it set of minimal saddles} in the boundary of $D$ the (possibly empty) set: $$ S(D) = \widetilde S(D) \cap U(D) \Eq(2.6dd)$$ A {\it global saddle point} is any configuration $$\bar\sigma \; \in {S}(- \underline 1,+ \underline 1)\;\; .$$ One immediately verifies that a strict basin of attraction of a local minimum is a cycle with nontrivial saddles in its boundary. This case corresponds to a ``one well" structure. More general cases involve the presence of ``internal saddles" and correspond to a ``several wells" situation. \par Given any set of configurations $A\subset {\cal S}_{\L_N}$, we use $\tau_A$ to denote the {\it first hitting time} to $A$: $$ \tau_A :=\inf\{t\geq 0 \;: \sigma_t\in A\}\;\; . \Eq (2.7) $$ We use $P_\eta(\cdot)$ to denote the probability distribution over the process starting at $t=0$ from the configuration $\eta$.\par We denote by $\piuuno\; (\menouno)$ the configuration where $\s(x) = +1\;\forall\;x\in\L_N\; (\s(x) = -1\;\forall\; x\in \L_N )$.\par We want to define now a class of configurations in ${\cal S}_{\L_N}$. Let $r_i $ be the $i$-th row of $\L_N$ $$r_i=\{x=(x_1,x_2)\in\ret \quad |\quad x_2=i \quad \}\Eq (3.3) $$ and let $ \nu $ be a subset of indices contained in $ [1,\cdots,N] $. Given $\nu$ let : $$\s_{\n}=\cases{+1\qquad &$\forall\; x\in r_i \;\forall\; i\in\n$\cr -1 \qquad &$\forall \; x\in r_i \; \forall\; i\in [1,\cdots,N] \backslash \n$\cr} \Eq (2.18)$$ \vskip 0.5 true cm Notice that for instance if $$\n=[1,\ldots,N]\qquad \Longrightarrow \qquad \s_\n= \piuuno ; \qquad\qquad \n=\emptyset \qquad \Longrightarrow \qquad \s_\n= \menouno $$ \vskip 0.5 true cm $$\n=2[1,\ldots,{N\over2}] \; \Longrightarrow \; \s_\n=\cases{+1\quad & if \quad x$\in{\cal L}_1$\cr -1\quad &if \quad x$\in{\cal L}_2$\cr} \Eq (3.5)$$ The above configuration with $+1$ in ${\cal L}_1$ and $-1$ in ${\cal L}_2$ is denoted by $\piumeno$. \par \vskip 1 true cm Now let $k\in \, {\bf N}, \quad \{n_i,m_i\}_{i=1,\ldots,k},$ be such that both $n_i\geq 0$ and $m_i\geq 0$ are even numbers; let us define $\n$ as the union of intervals: $$\n=[n_1, n_1+m_1]\cup [n_2, n_2+m_2] \cup,\ldots,\cup[n_k, n_k+m_k] \Eq (2.19') $$ with $n_i+m_ih_2$ and $02J$ and $h_1>2J $}\quad \vtop{\hsize =9 true cm \noindent ${\cal M }_{h_1,h_2}=\s_\n$ where $\n=2\>[1,\ldots,{N\over2}]$.}} \medskip \leftline{\raggedright\vtop{\hsize =6 true cm if $h_2=2J$ and $h_1>2J $}\quad \vtop{\hsize =9 true cm \noindent the ground state is multiply degenerate; ${\cal M }_{h_1,h_2}=\{\s_\n\;\hbox{such that } \n\supset 2\>[1,\ldots,{N\over2}]\}$.}} \medskip \leftline{\raggedright\vtop{\hsize =6 true cm if $h_1=2J$ and $h_2>2J $}\quad \vtop{\hsize =9 true cm \noindent the ground state is multiply degenerate; ${\cal M }_{h_1,h_2}=\{\s_\n\;\hbox{such that}\; \emptyset\subset\n\subset 2\>[1,\ldots,{N\over2}]\}$.}} \medskip \leftline{\raggedright\vtop{\hsize =6 true cm if $h_2=h_1=2J$ }\quad \vtop{\hsize =9 true cm \noindent the ground state is multiply degenerate; ${\cal M }_{h_1,h_2}$ is the set of all possible unions of stable bands $\s_\n$ given by \equ (2.18), \equ (2.19') }} \bigskip \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.5true cm,0.5truecm> \setplotarea x from 0 to 14, y from 0 to 14 \plot 2 2 14 2 / \plot 2 2 2 14 / \plot 2 2 7 7 / \plot 7 7 14 7 / \plot 7 7 7 14 / \setdashes \plot 7 2 7 7 / \plot 7 2 4.5 4.5 / \plot 7 7 12 2 / \plot 12 2 12 7 / \put {I} at 4.5 3.5 \put {II} at 6 5 \put {III} at 9.5 3.5 \put {IV} at 10.5 5.5 \put {V} at 13 5.5 \put {$2J$} at 7 1 \put {$J$} at 4.5 1 \put {$4J$} at 12 1 \put {$h_1$} at 14 1 \put {$2J$} at 1 7 \put {$h_2$} at 1 14 \put {$\piumeno$} at 10 10 \put {$\piuuno$} at 14 4 \put {$\menouno$} at 5 10 \put {\smbfb \quad Fig. 2.1 } at 14 14 \put {$\widetilde P$} at 7.5 7.5 \endpicture \hss\egroup \endinsert It will turn out that, for our purposes, the most interesting regions of the parameters are the following ones: $${\rm I}\; :=\; h_2 \; < \; h_1\; <\; 2J - h_1$$ $${\rm II}\; :=\;2J - h_1\;< \; h_2\; < \; h_1\; ; \;\;\; J\;< \;h_1 \; <\; 2J$$ We will also consider the regions $${\rm III}\; :=\; 0 \; \leq \; h_2\; \leq\; 4J - h_1\; ; \;\; 2J\; \leq \; h_1\;\leq \; 4J$$ $${\rm IV}\; :=\; 0 \leq \; 4J - h_1 \; \leq \; h_2 \; < \; 2J$$ $${\rm V}\; :=\; 4J \; \leq h_1 \; ; \;\;\; h_2 \; < \;2J $$ We want now to define a set ${\cal P}$ of configurations (see Fig. 2.2, 2.3) that will be called {\it protocritical}. The crucial part of the present work will be to prove that it is precisely the set ${S}(- \underline 1,+ \underline 1)$ of global saddles. Following a general strategy already adopted in other cases ([KO1], [KO2], [CO]) we shall prove, and this is the content of Theorem 1 below, that the first excursion from $-\underline 1$ to $+\underline 1$ typically passes through a configuration from ${\cal P}$ and the time needed for this to happen is of the order $\exp(\beta\Gamma)$ where $$\G \; := \; H ( {\cal P}) - H ( \menouno)\;\; . \Eq (2.10)$$ \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.5true cm,0.5truecm> \setplotarea x from 0 to 28, y from 0 to 15 \plot 2 2 2 13 / \plot 2 13 7 13 / \plot 7 13 7 6 / \plot 7 6 8 6 / \plot 8 6 8 4 / \plot 8 4 7 4 / \plot 7 4 7 2 / \plot 7 2 2 2 / \plot 18 2 18 11 / \plot 18 11 20 11 / \plot 20 11 20 13 / \plot 20 13 21 13 / \plot 21 13 21 12 / \plot 21 12 22 12 / \plot 22 12 22 11 / \plot 22 11 24 11 / \plot 24 11 24 2 / \plot 24 2 18 2 / \setdashes \plot 7 13 8 13 / \plot 8 13 8 2 / \plot 8 2 7 2 / \plot 18 11 18 13 / \plot 18 13 24 13 / \plot 24 13 24 11 / \put {${\cal L}_1$} at 28 2.5 \put {${\cal L}_1$} at 28 12.5 \put {${\cal L}_2$} at 28 11.5 \put {${\cal L}_1$} at 9 4.5 \put {${\cal L}_2$} at 9 5.5 \put {$l_h^*$} at 1 7.5 \put {$l_b^*-1$} at 5 1 \put {$l_h^*-2$} at 16 7.5 \put {$l_b^*$} at 21 1 \put {${\cal P}_{I,a}$} at 5 8 \put {${\cal P}_{I,b}$} at 21 8 \put {\smbfb \quad Fig. 2.2} at 15 0 \put {$(a)$} at 5 15 \put {$(b)$} at 21 15 \endpicture \hss\egroup \endinsert We first define two critical lenths whose meaning will appear clear below: $$l_b^*={\m\overwithdelims [] \e}+1 \Eq (3.12)$$ and $$l_h^*=2l_b^*-1\;\; \Eq (3.12')$$ For $x \in {\bf R}^+ $ we denote by $[x]$ the largest integer $\leq \; x$. We suppose that ${\m \over \e}$ is not integer. \par Given two integers $l_1,l_2 \leq N-2$, let $=R(l_1,l_2)$ be the set of configurations where the plus spins are precisely the ones on the sites internal to the rectangle, drawn on the dual lattice ${\bf Z}^2 + (1/2,1/2)$, with horizontal and vertical sides equal, respectively, to $l_1, l_2$. \par Let ${\cal P}_{ {\rm I},a}$ be the set of configurations where the plus spins are precisely the ones contained in a contour obtained by adding to $R(l_b^* -1, l_h^*)$ a protuberance given by two adjacent unit squares as indicated in Fig. 2.2(a). Let ${\cal P}_{ {\rm I},b}$ be the set of configurations where the plus spins are precisely the ones contained in a contour obtained by adding to $R(l_b^* , l_h^*-2)$ a protuberance given by three adjacent unit squares as indicated in Fig. 2.2(b).\par Similarly we call ${\cal P}_{ {\rm II},a}$,${\cal P}_{ {\rm II},b}$ the configurations depicted in Fig. 2.3(a), 2.3(b), respectively.\par It turns out that ${\cal P}_{ {\rm I},a}$, ${\cal P}_{ {\rm I},b}$,${\cal P}_{ {\rm II},a}$, ${\cal P}_{ {\rm II},b}$ are particular cases of the classes of configurations $\s_3, \s_4, \bar \s_3, \bar \s_4$ that will be defined in Section 3. \par For $(h_1,h_2) \in {\rm I}$ we set $$ {\cal P} := {\cal P}_{ {\rm I},a} \cup {\cal P}_{ {\rm I},b}$$ Whereas for $(h_1,h_2) \in {\rm II}$ we set $$ {\cal P} := {\cal P}_{ {\rm II},a }\cup {\cal P}_{ {\rm II},b}$$ \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.5true cm,0.5truecm> \setplotarea x from 0 to 28, y from 0 to 15 \plot 2 2 2 13 / \plot 2 13 7 13 / \plot 7 13 7 7 / \plot 7 7 8 7 / \plot 8 7 8 6 / \plot 8 6 7 6 / \plot 7 6 7 5 / \plot 7 5 8 5 / \plot 8 5 8 4 / \plot 8 4 7 4 / \plot 7 4 7 2 / \plot 7 2 2 2 / \plot 18 2 18 11 / \plot 18 11 20 11 / \plot 20 11 20 13 / \plot 20 13 22 13 / \plot 22 13 22 12 / \plot 22 12 21 12 / \plot 21 12 21 11 / \plot 21 11 24 11 / \plot 24 11 24 2 / \plot 24 2 18 2 / \setdashes \plot 7 13 8 13 / \plot 8 13 8 2 / \plot 8 2 7 2 / \plot 18 11 18 13 / \plot 18 13 24 13 / \plot 24 13 24 11 / \put {${\cal L}_1$} at 28 2.5 \put {${\cal L}_1$} at 28 12.5 \put {${\cal L}_2$} at 28 11.5 \put {${\cal L}_1$} at 9 6.5 \put {${\cal L}_1$} at 9 4.5 \put {$l_h^*$} at 1 7.5 \put {$l_b^*-1$} at 5 1 \put {$l_h^*-2$} at 16 7.5 \put {$l_b^*$} at 21 1 \put {${\cal P}_{II,a}$} at 5 8 \put {${\cal P}_{II,b}$} at 21 8 \put {\smbfb \quad Fig. 2.3} at 15 0 \put {$(a)$} at 5 15 \put {$(b)$} at 21 15 \endpicture \hss\egroup \endinsert Now we are ready to state our Theorem 1. \vskip 0.5 truecm \noindent {\bf Theorem 1.}\par \bigskip \noindent {\it Let $\bar\tau_{-\underline 1}$ be the last instant in which $\sigma_t= -\underline 1$ before $\tau_{+\underline 1}$: $$ \bar\tau _{-\underline 1} :=\max \{t<\tau_{+\underline 1}: \sigma_t=-\underline 1\}\;\; .\Eq (2.11) $$ Let $$ \bar\tau_{\cal P} :=\min\{t> \bar\tau_{-\underline 1} : \sigma_t = \cal P\}\;\; ; \Eq (2.12) $$ for every $\d > 0$: \par\noindent \vskip 0.35 truecm i) $$ \lim_{\beta\to\infty}P_{-\underline 1}(\bar\tau_{\cal P} <\tau_{+\underline 1})=1\;\; ; \Eq (2.13) $$ \par ii) $$ \lim_{\beta\to\infty}P_{-\underline 1}(\exp[\beta(\Gamma-\d)] <\tau_{+\underline 1}<\exp[\beta(\Gamma+\d)])=1\;\; .\Eq (2.14) $$ } \bigskip %%%%%%%%%%%%%%%%%%%End of Theorem 1 The proof will be given in Section 5 and it will be based on various propositions stated and proved in Sections 3,4 below. \numsec=3\numfor=1 \vskip 1cm {\bf Section 3. Local minima of the energy.} \par \vskip 1cm In this section we want to analyse the local minima of the energy ($\equiv$ {\it stable configurations}) especially from a geometric point of view; in particular we want to discuss some particularly interesting, ``more stable" minima corresponding to a class of rectangles.\par To describe more general configurations we need some more definitions.\par \bigskip For any configuration $\s\in {\cal S}_{\L}$ we denote by $c^{+}(\s)$, $c^{-}(\s)$ the union of all closed unit squares centered at sites $x\in\L$ with $\s(x)$ respectivly equal to $+1,-1$ . $c^{+}(\s)$, $c^{-}(\s)$ decompose into maximal connected components ($\equiv$ clusters) $c^{+}_j, \; j=1, \dots , k^{+}$, $c^{-}_j, \; j=1, \dots , k^{-}$. \par In fact the centers of $c^{+}_j$, $c^{-}_j$ form a $\star$--cluster in the sense of sites percolation, namely they are maximally connected components in the sense of the next nearest neighbours but we will simply call them clusters. \par To any cluster $c^{+}_j$ ($c^{-}_j$) we associate its {\it rectangular envelope} $R(c^{+ }_{j})$ ($R(c^{-}_{j})$) defined as the minimal closed rectangle (with sides on the dual lattice ${\bf Z}^2+\bigl({1\over 2},{1\over 2}\bigr)$) containing it; if none of the rectangles $R(c^+_{j})$ is winding around the torus, we call the corresponding configuration {\it acceptable}. In any such configurations it is well defined the ``sea" of minuses.\par Given an acceptable configuration $\s$ its {\it monotonic envelope}, denoted by $\g (\s)$, is the smallest monotonic cluster containing $c^+(\s)$; where a cluster $c$ is said to be {\it monotonic} if its boundary $\partial c$ is a unique ``monotonic" contour in the sense that it has the same length as its rectangular envelope.\par Given an acceptable configuration $\s $ containing a unique cluster we also write $R(\s)$ for its rectangular envelope.\par \bigskip {\bf Remark} \par \bigskip We often interchange an acceptable configuration $\s$ giving rise to a unique cluster (of pluses) $C(\s)$ with $C(\s)$ itself. $C(\s)$, a closed subset of ${\bf R}^2$, in turn, can be identified with the set of its internal ${\bf Z}^2$ sites. Moreover we will often assimilate (and even denote by the same symbol with an abuse of notation) the cluster $C(\s)$ with the equivalence class of all the clusters obtained from $C(\s)$ by suitable translations on the lattice (arbitrary in horizontal direction and even in vertical direction). Actually, for clusters like $\s_i,\; \bar \s_i, i=1, \dots , 4$ below (see Fig. 3.1, 3.2) we will assimilate $C(\s)$ with the family of configurations obtained by displacements, along the sides, of some protuberances. The reader will easily deduce the meaning of our statements and symbols from the context.\par \bigskip In the following we will consider the whole region of parameters: $$h_2 \; < \; h_1\; ; \; h_2\; <\; 2J \Eq (3.1)$$ corresponding to regions I, II, III, IV, V in Fig. 2.1. We will first consider ``extended " minima and then, only for $h_1,h_2$ varying in I, II the ``localized" ones.\par We start by giving a list of all possible spin-flips with the corresponding increment in energy $\D _x H := H(\s^{(x)}) - H(\s)$.\par In the following we draw all the initial configuration $\s$ at the site $x$ and in the four nearest neighbours when $\s(x) = -1$; moreover we specify the layer, ${\cal L}_1$ or ${\cal L}_2$, to which it belongs. We associate to each configuration the corresponding value for $\D _x H$. To complete the list it suffices to take into account all the reciprocal spin-flips: this amounts to consider all the remaining cases in which $\s(x) = +1$; the corresponding $\D _x H$ are just the opposite of the previous ones.\par\bigskip \vskip 0.5 true cm $$\displaylines{\matrix{ {\cal L}_2&\;&\;&-&\;\cr {\cal L}_1&\;&-&-&-\cr {\cal L}_2&\;&\;&-&\;\cr}\qquad\D_x\hbox{H}=4J-h_1\qquad \matrix{{\cal L}_1&\;&\;&-&\;\cr {\cal L}_2&\;&-&-&-\cr {\cal L}_1&\;&\;&-&\;\cr} \qquad\D_x\hbox{H}=4J+h_2\cr }$$ \vskip 0.5 true cm $$\displaylines{\matrix{{\cal L}_2&\;&\;&-&\;\cr {\cal L}_1 &\;&+&-&-\cr {\cal L}_2&\;&\;&-&\;\cr}\qquad\D_x\hbox{H}=2J-h_1\qquad \matrix{{\cal L}_1&\;&\;&-&\;\cr {\cal L}_2&\;&+&-&-\cr {\cal L}_1&\;&\;&-&\;\cr}\qquad \D_x\hbox{H}=2J+h_2 \cr }$$ \vskip 0.5 true cm $$\displaylines{\matrix{{\cal L}_2&\;&\;&-&\;\cr {\cal L}_1 &\;&+&-&-\cr {\cal L}_2 &\;&\;&+&\;\cr}\;\qquad\D_x\hbox{H}=-h_1\qquad\quad \matrix{ {\cal L}_1&\;&\;&-&\;\cr {\cal L}_2&\;&+&-&-\cr {\cal L}_1&\;&\;&+&\;\cr}\qquad \D_x\hbox{H}=+h_2\quad\;\cr}$$ \vskip 0.5 true cm $$\displaylines{\matrix{{\cal L}_2&\;&\;&-&\;\cr {\cal L}_1 &\;&+&-&+\cr {\cal L}_2 &\;&\;&+&\;\cr}\qquad\D_x\hbox{H}=-(2J+h_1)\qquad \matrix{{\cal L}_1&\;&\;&-&\;\cr {\cal L}_2 &\;&+&-&+\cr {\cal L}_1 &\;&\;&+&\;\cr}\qquad\D_x\hbox{H}=-(2J-h_2)\cr}$$ \vskip 0.5 true cm $$\displaylines{\matrix{{\cal L}_2&\;&\;&+&\;\cr {\cal L}_1 &\;&+&-&+\cr {\cal L}_2&\;&\;&+&\;\cr}\qquad\D_x\hbox{H}=-(2J+h_1)\qquad \matrix{{\cal L}_1&\;&\;&+&\;\cr {\cal L}_2&\;&+&-&+\cr {\cal L}_1&\;&\;&+&\;\cr}\qquad \D_x\hbox{H}=-(2J-h_2)\cr}$$ \par\bigskip It immediately follows from the previous list that the local minima are characterized by the following four properties:\par 1) Any spin $+1\; \in \; {\cal L}_1$ must have at least two n.n. $+1$ spins\par 2) Any spin $+1\; \in \; {\cal L}_2$ must have at least three n.n. $+1$ spins\par 3) Any spin $-1\; \in \; {\cal L}_1$ must have at least three n.n. $-1$ spins\par 4) Any spin $-1\; \in \; {\cal L}_2$ must have at least two n.n. $-1$ spins\par It follows from the above properties that in a stable configuration the ``plus angles" must belong to ${\cal L}_1$ whereas the ``minus" angles must belong to ${\cal L}_2$ :\bigskip $$\displaylines{ \matrix{{\cal L}_2&\;&\;&-&\;\cr {\cal L}_1&\;&-&+&+\cr {\cal L}_2&\;&\;&+&\;\cr}\qquad\qquad \matrix{{\cal L}_1&\;&\;&+&\;\cr {\cal L}_2&\;&+&-&-\cr {\cal L}_1&\;&\;&-&\;\cr}\cr}$$ \bigskip We immediately get that any band $\s_{\n}$ defined by \equ (2.18), \equ (2.19'), starting and ending in ${\cal L}_1$, with any height $2p+1,\; p=0,1,2\dots$, is a local minimum in regions I, II, III, IV and V.\par It is easy to convince oneself that these bands are the only local minima in regions III, IV, V whereas in I, II there are other, localized minima. \par We notice that in regions I and II there are stable rectangles $R(l_1,l_2)$ but not all of them are stable. For that it is necessary and sufficient that $l_1 \geq 2, l_2\geq 3$ and $R(l_1,l_2)$ starts and ends in ${\cal L}_1$. In particular $l_2$ must be odd .\par Always in regions I and II there are many other minima beyond the stable rectangles and the stable bands but, as we will see, they are in a sense less stable. \bigskip We want now to analyse the ``different degree of stability" of different local minima.\par It follows from the list of spin-flips that in regions I and II the minimal positive increment of energy $V_1$ is given by: $$ V_1 \; = \; \min \{ h_2,2J-h_1\} \Eq (3.2) $$ Notice that in region I we have: $V_1 \; = \; h_2$ whereas in region II we have: $V_1 \; = \;2J-h_1$.\par Given a minimum $\s$ we call it $V_1$-unstable if there exists a $V_1$-downhill path starting from $\s$ and leading to another minimum. Otherwise it is called $V_1$-stable.\par We have the following: \goodbreak \bigskip {\bf 3.1 Proposition}\par \bigskip {\it Let $h_1,h_2 \in \{ {\rm I}\cup{\rm II}\}$. Any minimum $\s$ is $V_1$-unstable if and only if it has a minus angle on ${\cal L}_2$ like:} \bigskip $$\displaylines{\matrix{{\cal L}_1&\;&\;&+&\;\cr {\cal L}_2&\;&+&-&-\cr {\cal L}_1&\;&\;&-&\;\cr}\cr}$$ \bigskip {\it Proof.} It easily follows from the above properties 1), 2), 3), 4) that if a local minimum $\s$ contains the above minus angle then it must also contain: \bigskip $$\displaylines{\matrix{{\cal L}_1&\;&+&+&+&\;\cr {\cal L}_2&\;&+&+&-&-\cr {\cal L}_1&\;&+&+&-&-\cr {\cal L}_2&\;&\;&\;&-&\;\cr}\cr}$$ \bigskip Starting from this situation it is easy to costruct a $V_1$-dowhill path leading in two steps to a configuration $\s'$ with $H(\s')- H(\s) = h_2 - h_1 < 0$: we flip the minus spin at the angle, say $x$ and the n.n. minus spin below it, say $y$. In region I we first flip $\s(x)$ then $\s(y)$. Vice-versa in region II we first flip $\s(y)$ then $\s(x)$.\par On the other hand it is easily seen that a stable configuration without any minus angle in ${\cal L}_2$ is $V_1$-stable. \par \eop \par\bigskip It is immediately seen that the stable bands and the stable rectangles are the only stable configurations which do not contain minus angles belonging to ${\cal L}_2$ and therefore they are the only $V_1$-stable configurations. \par Consider the strict basin of attraction $\bar B (R)$ of a stable rectangle $R$ and the set $S(\bar B (R) )$ of its minimal saddles (see \equ (2.6dd) ). It is easily seen that $$ H(S(\bar B (R) )) - H(R) =: {V_2}=\min \{ h_1,\m \}. \Eq (3.3') $$ \bigskip We want now to analyse the tendency of a stable configuration consisting only of an isolated cluster to grow or shrink. It will turn out that the less stable between such minima, corresponding to a non-rectangular shape, will typically evolve towards a suitable rectangle in a time scale much smaller than the typical time needed for a rectangle to grow or shrink. In other words after an initial transient leading to a rectangle the tendency to grow or shrink is established starting from this rectangle. \par Let us now give a (naive) static argument that could be used in order to discriminate subcriticality (tendency to shrink) or supercriticality (tendency to grow) of a given rectangle. \par The energy formation of a stable rectangle $R(l_1,l_2)$ with sides $l_1,l_2$ is: $$H(R(l_1,l_2))-H(\menouno)=2J(l_1+l_2)-h_1l_1{l_2+1 \overwithdelims () 2}+h_2l_1{l_2-1\overwithdelims () 2}=$$ $$=2J(l_1+l_2)-{\e\over2}(l_2+1)l_1-l_1h_2 \Eq (3.4)$$ where we recall that: $$ \e = h_1-h_2 \Eq (3.5a) $$ It is interesting to compute the $T=0$ Wulff shape namely the shape minimizing the energy as a function of the real variables $l_1, l_2$ for fixed area. It is easily seen that this Wulff shape is characterized by the following ratio between the sides: $${l_1\over l_2}={4J\over4J-\e-2h_2} \Eq (3.5b)$$ Looking at the expression \equ (3.4) one would be lead to the conclusion that the critical droplet is the unique saddle point corresponding to: $$ l_1 = {4J\over \e}, \;\;\;\;\;\;\;\;\;\; l_2 = {4J-\e -2h_2\over \e} \Eq (3.5') $$ defining a particular Wulff shape rectangle. We will see that this conclusion is erroneous. >From a dynamical point of view we have to carefully analyse the different ways of shrinking and growing. It will turn out that the crucial point is the comparison between four different times which constitute the typical scales for the relevant mechanisms.\par \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.5true cm,0.5truecm> \setplotarea x from 0 to 30, y from 0 to 14 \plot 3 3 13 3 / \plot 13 3 13 7 / \plot 13 7 14 7 / \plot 14 7 14 9 / \plot 14 9 13 9 / \plot 13 9 13 10 / \plot 13 10 3 10 / \plot 3 10 3 3 / \plot 18 3 29 3 / \plot 29 3 29 10 / \plot 29 10 26 10 / \plot 26 10 26 12 / \plot 26 12 25 12 / \plot 25 12 25 11 / \plot 25 11 24 11 / \plot 24 11 24 10 / \plot 24 10 18 10 / \plot 18 10 18 3 / %\putrectangle corners at 3 10 and 4 9 \setdashes \plot 13 5 12 5 / \plot 12 5 12 10 / \plot 18 8 20 8 / \plot 20 8 20 9 / \plot 20 9 21 9 / \plot 21 9 21 10 / \plot 22 10 22 8 / \plot 22 8 29 8 / %\putrectangle corners at 0 11 and 6 0 \put {$h_1$} at 0 3.5 \put {$h_1$} at 0 9.5 \put {$-h_2$} at 0 4.5 \put {$\s_1$} at 13.5 11 \put {$\s_2$} at 30 11 \put {$\s_3$} at 7 7 \put {$\s_4$} at 23.5 6 \put {\smbfb \quad Fig. 3.1 } at 15 14 \endpicture \hss\egroup \endinsert Let $\s_1 (l_1,l_2)$ be the configuration obtained from $R(l_1,l_2)$ by adding to one of its vertical edges a $1\times2$ rectangular protuberance as it is shown in Fig. 3.1; $\s_2 (l_1,l_2)$ is obtained from $R(l_1,l_2)$ by adding to one of its horizontal sides a``triangular" protuberance containing three unit squares as shown in Fig. 3.1. $\s_3 (l_1,l_2)$ is obtained from $R(l_1,l_2)$ by removing all the unit squares contained in a vertical $1\times l_2$ column except for a $1\times2$ rectangle as shown in Fig. 3.1. Finally $\s_4 (l_1,l_2)$ is obtained from $R(l_1,l_2)$ by removing all the unit squares contained in a horizontal $l_1\times 2 $ strip except for a triangle as shown in Fig. 3.1 The corresponding typical times $t_i,\; i=1, \dots, 4$ needed to reach $\s_i (l_1,l_2)$ starting from $R(l_1,l_2)$ namely the exponentials of $\b$ times the heigths of the corresponding energy barriers are: $$\eqalign { t_{1}=e^{\beta(2J-h_1+h_2)}\;\;\;\;\;\;&t_{2}=e^{\beta(4J+2h_2-h_1)}\cr t_{3}=e^{\beta({\e\over 2}(l_h-3)+h_1)}\;\;\;\;\;&t_{4}=e^{\beta(\e(l_b-2)+h_1)}\cr} \;\; ,\Eq (3.6)$$ Let us now introduce, similarly to what we did above, the configurations $\bar \s_i (l_1,l_2), \;i=1, \dots 4$ depicted in Fig. 3.2.\par The difference w.r.t.the previous configurations $ \s_i (l_1,l_2), \; i=1, \dots 4$ is just in the shape of the protuberances. The $1\times 2$ rectangle on the vertical side is substituted by two unit squares at distance one whereas the triangle on the horizontal side is ``inverted". The corresponding typical times are: $$\eqalign { \bar t_{1}=e^{\b 2(\m-\e)}\;\;\;\;\;\;&\bar t_{2}=e^{\b (2J+h_2+2(\m-\e) )}\cr \bar t_{3}=e^{\b ({\e\over 2}(l_h-3)+\m)}\;\;\;\;\;&\bar t_{4}= e^{\b (\e(l_b-2)+\m)}\cr} \;\; ,\Eq (3.7)$$ \vskip 1cm \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.5true cm,0.5truecm> \setplotarea x from 0 to 30, y from 0 to 13 \plot 2 3 13 3 / \plot 13 3 13 4 / \plot 13 4 12 4 / \plot 12 4 12 5 / \plot 12 5 13 5 / \plot 13 5 13 6 / \plot 13 6 12 6 / \plot 12 6 12 10 / \plot 12 10 2 10 / \plot 2 10 2 3 / \plot 17 3 28 3 / \plot 28 3 28 10 / \plot 28 10 26 10 / \plot 26 10 26 11 / \plot 26 11 27 11 / \plot 27 11 27 12 / \plot 27 12 25 12 / \plot 25 12 25 10 / \plot 25 10 17 10 / \plot 17 10 17 3 / %\putrectangle corners at 3 10 and 4 9 \setdashes \plot 11 3 11 7 / \plot 11 7 12 7 / \plot 12 8 11 8 / \plot 11 8 11 9 / \plot 11 9 12 9 / \plot 17 8 19 8 / \plot 19 8 19 10 / \plot 21 10 21 9 / \plot 21 9 20 9 / \plot 20 9 20 8 / \plot 20 8 28 8 / %\putrectangle corners at 0 11 and 6 0 \put {$h_1$} at 0 3.5 \put {$h_1$} at 0 9.5 \put {$-h_2$} at 0 4.5 \put {$\bar\s_1$} at 11.5 11 \put {$\bar\s_2$} at 30 11 \put {$\bar\s_3$} at 6 7 \put {$\bar\s_4$} at 21.5 5.5 \put {\smbfb \quad Fig. 3.2} at 15 0 \endpicture \hss\egroup \endinsert It will be shown later on that, starting from $R(l_1,l_2)$, to determine the most likely future evolution in the sense of the first new rectangle visited after leaving $R(l_1,l_2)$ one has just to make a comparison between the four times $t_i, i=1, \dots, 4$ in region I and between $\bar t_i, \; i=1, \dots , 4$ in region II. This will follow from the fact that the minimal saddles on the boundary of a suitably defined generalized basin of attraction of $R(l_1,l_2)$ can always be found among the configurations $\s_i (l_1,l_2)$ or among the $\bar \s_i(l_1,l_2)$, in regions I and II, respectively.\par One immediately realizes that it is always $t_1 < t_2$, $\bar t_1 < \bar t_2$ whereas the relation between the other pairs of times $t_i, t_j , \;(i,j) \neq (1,2)$, or $\bar t_i,\bar t_j,\; (i,j)\neq (1,2)$ depends on the sides of $R(l_1,l_2)$. In order for a rectangle to have a tendency to grow, in region I, we must have $t_1< t_3$ and $ t_1 {2\m-\e \over \e} \qquad\qquad l_b>{\m \over \e}\;\; ;\Eq (3.8)$$ where we recall that: $$\m := 2J -h_2, \;\;\; \e = h_1 - h_2 \Eq (3.9) $$ and that we suppose that ${ \m \over \e}$ is not integer. Then the minimal supercritical rectangle, in region I, has sides $$l_b^*={\m\overwithdelims [] \e}+1\;\;\;\;\;\;\; l_h^*=2l_b^*-1 \Eq (3.10)$$ If either $l_1 < l_b^*$ or $l_2 < l_b^*$ the corresponding stable rectangle has a tendency to shrink (it is subcritical); namely a stable rectangle $R(l_1,l_2)$ is supercritical if and only if it contains in its interior a rectangle $R(l_b^*,l_h^*)$.\par In region II again by characterizing the critical lengths $l_b^*, l_h^*$ (sides of the minimal supercritical rectangle) as the minimal integers such that $\bar t_1 <\bar t_3$ and $\bar t_1 <\bar t_4$ one has (for different reasons) exactly the same results: $$l_b^*={\m\overwithdelims [] \e}+1\;\;\;\;\;\;\; l_h^*=2l_b^*-1 \Eq (3.11)$$\par Notice that the critical shape is non-Wulff similarly to what it has been found for the anisotropic Ising model (see [KO1]); but now this effect is even enhanced: for the critical rectangle the vertical side is larger (almost the double) than the horizontal one whereas in the Wulff rectangle the horizontal side is larger than the vertical one (and tends to be infinitely larger as we approach the triple point $h_1 = h_2 = 2J$).\par We will say that a stable rectangle has {\it standard shape} if its sides $l_1,l_2$ satisfy the relation $$l_1 = 2l_2 - 1. \Eq (3.12'')$$ \bigskip {\bf Notation} \bigskip We denote by ${\cal B}(R)$ the $V_1$-basin of attraction of $R$. \par \bigskip It is easy to see that given any configuration in $\partial ( {\cal B}(R)\; )$ giving rise to a single cluster either \par i) its rectangular envelope $R(\s)$ coincides with $R$ and in this case if $\s$ is $V_1$-downhill connected to a $V_1$-stable configuration $\h\not = R$ then $\h$ must consist of one or more stable rectangles strictly contained in $R$ ; or \par ii) $R(\s)$ strictly contains $R$ and in this case the stable rectangles $\bar R\not = R$ reachable from $\s$ with a $V_1$-downhill path strictly contain $R$.\par Other situations are impossible.\par We want now to determine the set of minimal saddles $S( {\cal B}(R))$. To this end we need some definitions.\par We say that a saddle in $\widetilde S( {\cal B}(R))$ (see definition before \ \equ (2.6dd)) is {\it towards the growth (contraction) } if $R(\s) \supset R\;\; (R(\s) = R )$.\par Consider a configuration $\h$ giving rise to a unique cluster $C(\h)$. \par Let $\g(C(\h))$ be the monotone envelope of $C(\h)$. We can write: $$\g(C(\h))\backslash C(\h) ={\bigcup {A_i} }\;\; \cup\;\; {\bigcup {B_j}} \Eq (3.13)$$ where $A_i$ are (possibly empty) sets which are not connected to the sea of minuses and $\partial C(\h)\bigcap\partial A_i=\partial A_i$ if non-empty is made by one or more closed curves. $B_j$, if non-empty, are connected to the sea of minuses and $\partial C(\h)\bigcap\partial B_i \; \subset\;\partial B_i$ is an open curve. The $A_i$'s are called {\it ( internal) lakes} the $B_i$'s are called {\it gulfs}. \par A gulf is said to be {\it vertical (horizontal)} if the segment $$ \d (B_i) := \partial\bigl(B_j\bigr)\backslash \; \partial\bigl(C(\h)\bigr)$$ is vertical (horizontal). \par \vskip 2 truecm \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.5true cm,0.5truecm> \setplotarea x from 0 to 0, y from 0 to 2 \axis bottom / \axis left / \plot 0 2 1 2 / \plot 1 2 1 3 / \plot 1 3 2 3 / \plot 2 3 2 4 / \plot 2 4 3 4 / \plot 3 4 3 6 / \plot 3 6 4 6 / \plot 4 6 4 9 / \plot 4 9 3 9 / \plot 3 9 3 10 / \plot 3 10 2 10 / \plot 2 10 2 11 / \plot 2 11 1 11 / \plot 1 11 1 10 / \plot 1 10 0 10 / \plot 0 10 0 12 / \setdashes \plot 0 2 0 10 / \plot 1 0 1 12 / \plot 2 0 2 12 / \plot 3 0 3 12 / \plot 4 0 4 12 / \put {$\hbox{r}_1$} at 0.5 6.5 \put {$\hbox{r}_k$} at 4.5 4.5 \put {\smbfb \quad Fig. 3.3 } at 7 6 \endpicture \hss\egroup \endinsert If we have a vertical (horizontal) gulf $B_j$, we can consider a line $r_1$ which contains $\d (B_j)$. \par Let us consider a line $r_2$ parallel to $r_1$, at a distance one from it in the direction of the interior of $B_j$. We can then recursively define $r_i, i>2, $ as the line parallel to $r_{i-1}$, at distance one from it in the same direction as the one leading from $r_1$ to $r_2$. We stop at step $k$ when $r_k$ intersetcs $B_j$, but $r_{k+1}$ does not intersect $B_j$. The line $r_k$ obtained with this procedure is called {\it innermost line of the gulf} $B_j$ (see Fig. 3.3). \par Before stating Proposition 3.3, the main result of this Section, concerning the characterization of the set $S ( {\cal B} (R(l_1,l_2)) )$ we give two Lemmata which will be used in its proof. \bigskip {\bf 3.2 Lemma }\par {\it Let $\s$ be a cluster with at least one vertical gulf $B_j$ or with an internal lake $A_i$ or with a horizontal gulf such that $$dist(\d(B_j),r_k) \cases{\geq 2 & or \cr \qquad \cr =1 & and $B_j\in{\cal L}_1$\cr}$$ Then there exists $\h \succ \s$ with $\g(\h) = \g (\s)$ and $ H(\h) < H(\s)$.} \bigskip {\it Proof} \par We will show that either there esists a site $x$ such that $\s (x) = -1$ and $$H(\s^{(x)})-H(\s)<0$$ and then we can choose $\h \equiv \s^{(x)}$; or there exist two sites $x$ $y$ such that $\s (x) =\s (y) = -1$ and $\h$ is obtained from $\s$ by flipping the spins in those sites: $\h=\bigl( \s^{(x)}\bigr)^{(y)}$ and we have: $$H(\h)-H(\s)<0$$ Given a vertical gulf $B_j$ we consider the innermost line $r_k$ of $B_j$. If $\partial B_j \cap r_k$ contains only length-one segments ( see Fig. 3.4) then, adjacent to these segments in $B_j$, we have only isolated sites. Let $x$ be any of those, then \bigskip \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.5true cm,0.5truecm> \setplotarea x from 0 to 12, y from 0 to 7 % \axis bottom / %\axis left / \plot 0 0 0 2 / \plot 0 2 1 2 / \plot 1 2 1 3 / \plot 1 3 0 3 / \plot 0 3 0 5 / \plot 0 5 1 5 / \plot 1 5 1 6 / \plot 1 6 0 6 / \plot 0 6 0 7 / %inserisco altra figura aggiungo 10 a tutte le ascisse \plot 10 0 10 1 / \plot 10 1 11 1 / \plot 11 1 11 2 / \plot 11 2 12 2 / \plot 12 2 12 3 / \plot 12 5 12 7 / \plot 12 7 11 7 / \plot 11 7 11 9 / \plot 11 9 10 9 / \setdashes \plot 1 0 1 7 / \put {$x$} at 0.5 5.5 \put {$\hbox{r}_k$} at 1.5 1.5 \put {\smbfb \quad Fig. 3.4 } at 6 6 %inserisco altra figura aggiungo 10 a tutte le ascisse \plot 10 9 10 11 / \plot 12 0 12 11 / \put {$x$} at 11.5 6.5 \put {$y$} at 11.5 5.5 \put {$\hbox{r}_k$} at 13 9 \put {\smbfb \quad Fig. 3.5 } at 17 6 \endpicture \hss\egroup \endinsert $$\D H= H(\s^{(x)})- H (\s)=\cases{-2J-h_1&if $x\in{\cal L}_1$\cr \qquad\cr -2J+h_2&if $x\in{\cal L}_2$\cr}$$ \par If the intersection contains segments whith length $\geq 2$ (see Fig. 3.5), we consider the top angle and the sites $x$, $y$ immediately below as shown in Fig. 3.5. \bigskip Let $\h=\bigl( \s^{(x)}\bigr)^{(y)}$ then $$H(\h)- H ( \s)\leq +h_2-h_1<0.$$ The case with an internal lake $A_i$ can be discussed with arguments similar to those used for the vertical gulf, by taking a vertical line $r$ that intersects the lake and divides it into two vertical gulfs. \par Given a horizontal gulf if the row between $r_{k-1}$ and $r_k$ belongs to ${\cal L}_1$, we take a site $x$, say, in the right hand angle. We get a situation like in Fig. 3.6 \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.5true cm,0.5truecm> \setplotarea x from 0 to 23, y from 0 to 5 %\axis bottom / %\axis left / \plot 5 4 7 4 / \plot 7 4 7 3 / \plot 7 3 11 3 / \plot 11 3 11 4 / \plot 11 4 13 4 / \setdashes \plot 3 3 15 3 / \plot 3 4 15 4 / \put {$x$} at 10.5 3.5 \put {$\hbox{r}_k$} at 17 3 \put {$\hbox{r}_{k-1}$} at 17 4 \put {${\cal L}_1$} at 19 3.5 \put {\smbfb \quad Fig. 3.6} at 22 3.5 \endpicture \hss\egroup \endinsert $$\D H= H(\s^{(x)})- H(\s)\leq -h_1$$ \par If the row between $r_{k-1}$ and $r_k$ belongs to ${\cal L}_2$ then, by hypothesis, the one between $r_{k-2}$ and $r_{k-1}$ belongs to ${\cal L}_1 \cap B_j$.\par Let us consider the angle on the right of $r_k \cap \partial B_j$: if it is of the type shown in Fig. 3.7 \par \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.5true cm,0.5truecm> % \axis bottom / % \axis left / \plot 0 1 4 1 / \plot 4 1 4 3 / \setdashes \plot 0 1 7 1 / \plot 0 2 7 2 / \plot 0 3 7 3 / \put {$\hbox{r}_k$} at 8 1 \put {$\hbox{r}_{k-1}$} at 8 2 \put {$\hbox{r}_{k-2}$} at 8 3 \put {${\cal L}_1$} at 10.5 2.5 \put {\smbfb \quad Fig. 3.7} at 14 2 \put {${\cal L}_2$} at 10.5 1.5 \put {$x$} at 3.5 1.5 \put {$y$} at 3.5 2.5 \put {$+$} at 3.5 0.5 \put {$+$} at 4.5 0.5 \put {$+$} at 4.5 1.5 \put {$+$} at 4.5 2.5 \endpicture \hss\egroup \endinsert then we can simply flip the spins at $x$ and $y$, and the energy cost will be $$\D H\leq +h_2-h_1$$ Otherwise, if it is of the type shown in Fig. 3.8\par \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.5true cm,0.5truecm> % \axis bottom / % \axis left / \plot 0 1 3 1 / \plot 3 1 3 2 / \plot 3 2 4 2 / \setdashes \plot 3 1 6 1 / \plot 0 2 6 2 / \put {$\hbox{r}_k$} at 7 1 \put {$\hbox{r}_{k-1}$} at 7 2 \put {${\cal L}_2$} at 9 1.5 \put {\smbfb \quad Fig. 3.8} at 11 2 \put {$-$} at 2.5 1.5 \put {$-$} at 2.5 2.5 \put {$-$} at 3.5 2.5 \put {$+$} at 2.5 0.5 \put {$+$} at 3.5 1.5 \put {$+$} at 3.5 0.5 \endpicture \hss\egroup \endinsert i.e. if we can immediately find another angle, then we continue to follow the boundary until we find a third angle, as shown in Fig. 3.9.\par \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.5true cm,0.5truecm> \axis bottom / \axis left / \plot 0 0 3 0 / \plot 3 0 3 1 / \plot 3 1 4 1 / \plot 5 1 6 1 / \plot 6 1 6 2 / \setdashes \plot 3 0 8 0 / \plot 0 1 8 1 / \put {$\hbox{r}_k$} at 9 0 \put {$\hbox{r}_{k-1}$} at 9 1 \put {\smbfb \quad Fig. 3.9} at 14 1 \put {${\cal L}_2$} at 11 0.5 \put {${\cal L}_1$} at 11 1.5 \put {$x$} at 5.5 1.5 \put {$-$} at 2.5 1.5 \put {$-$} at 2.5 0.5 \put {$-$} at 3.5 1.5 \put {$+$} at 3.5 0.5 \put {$+$} at 6.5 1.5 \put {$+$} at 6.5 0.5 \endpicture \hss\egroup \endinsert Let $x$ be the site in the minus angle in ${\cal L}_1$; we have: $$\D H= H (\s^{(x)})- H (\s)\leq -h_1$$ By taking $\h = \s^{(x)}$ we conclude the proof \eop \par \bigskip {\bf 3.3 Lemma.}\par \bigskip {\it Among the configurations $\s$ with a single cluster $C(\s)$ having a given (stable) rectangular envelope $R$ the one with minimal energy is given precisely by $C(\s) \equiv R$.}\par\bigskip {\it Proof}\par It is not totally immediate like in the standard Ising model. It follows from the following argument . Suppose first that $C(\s)$ is monotonic. We can decompose $R\setminus C(\s)$ into a union of rectangles $R_j$ having a nonempty part of their boundary in common with the boundary of $R$. Since $R$ starts and ends in ${\cal L}_1$, if $n$ is the number of sites in $(R\setminus C(\s)) \cap {\cal L}_1$ and $m$ is the number of sites in $(R\setminus C(\s)) \cap {\cal L}_2$, we have $$n \geq m$$ Then, since the $J$-contribution to the energy in $R$ and in $C(\s)$ is the same, we have: $$H(\s) - H(R) = nh_1 -mh_2 \geq 0$$ If $C(\s)$ is not monotonic, by repeatedly applying Lemma 3.2 we can easily reduce ourselves to the case of a configuration $\h$ with the same monotonic envelope as $\s$, with lower energy and being monotonic except for some heigth-one horizontal gulfs in ${\cal L}_2$. Also in this case we can apply the procedure of the monotonic case and decompose $R\setminus C(\s)$ into a union of rectangles $R_j$ having a nonempty part of their boundary in common with the boundary of $R$. We get $$H(\s) - H(R) \geq nh_1 -mh_2 \geq 0$$ with $$n \geq m$$ This concludes the proof. \eop \par \bigskip Now, given a stable rectangle $R = R(l_b,l_h)$, consider the previously defined configurations $\s_i(l_b,l_h), \bar \s_i(l_b,l_h), i=1, \dots , 4$ (see Fig. 3.1, 3.2). We have the following \par \bigskip {\bf 3.4 Proposition.}\par \bigskip {\it The set of minimal saddles in $S({\cal B} (R(l_b,l_h)) )$ towards the growth is $\s_1(l_b,l_h), \; (\bar \s_1(l_b,l_h))$ in region {\rm I} {\rm (II)}.\par The set of minimal saddles in $S({\cal B} (R(l_b,l_h)) )$ towards the contraction are:\par In region {\rm I} $$\s_3(l_b,l_h) \;\;\hbox{if }\;\; l_h<2l_b-1, \;\;\;\;\;\;\; \s_4(l_b,l_h) \;\;\hbox{if }\;\; l_h>2l_b-1$$ $$\s_3(l_b,l_h) \cup \s_4(l_b,l_h) \;\;\hbox{if }\;\; l_h=2l_b-1 \Eq (3.14) $$ In region {\rm II} $$\bar \s_3(l_b,l_h) \;\;\hbox{if }\;\; l_h<2l_b-1, \;\;\;\;\;\;\; \bar \s_4(l_b,l_h) \;\;\hbox{if }\;\; l_h>2l_b-1$$ $$\bar \s_3(l_b,l_h) \cup \bar \s_4(l_b,l_h) \;\;\hbox{if }\;\; l_h=2l_b-1 \Eq (3.15) $$} {\it Proof.} \par\bigskip Consider the configurations $\s_1 = \s_1(l_b,l_h), \;\; \bar \s_1 = \bar \s_1(l_b,l_h)$ . It is immediate to verify that they belong to $ \widetilde S({\cal B} (R(l_b,l_h)) )$. Let : $$ \D H^*:= \min \{ H(\s_1)-H(R), H(\bar \s_1)-H(R)\} \equiv \min \{ 2J-\e, 2(\m-\e)\}. \Eq (3.16)$$ We have that any configuration $\s$ with $H(\s) - H(R) > \D H^*$ cannot belong to $S ( {\cal B} (R(l_b,l_h)) )$.\par Now we notice that, given any configuration in $S ( {\cal B} (R(l_b,l_h)) )$, giving rise to a single cluster it can only have a unique gulf being a unit square vertical gulf belonging to ${\cal L}_1$ and no lakes. Indeed it is immediate to verify that to create a lake starting from $R$ one needs at least an energy $ 4J-h_2\; > \; \D H ^*$ since either an internal plus spin has to flip into minus ( $ \D H = 4J-h_2 $) or an external protuberance enclosing a minus has to be formed ( $ \D H > 4J-h_2 $). Similarly we can exclude the formation of gulfs made by single sites in ${\cal L}_2$ ($ \D H > 2J + h_1 $) or by more than one site in ${\cal L}_2$, ($ \D H > \min \{2J -h_2 + h_1,4J -2h_2 \}$).\par On the other hand for similar reasons a configuration $\s$ in $S({\cal B}(R(l_1,l_2)))$ cannot consist of more than one cluster.\par We want now to show that if there are minimal saddles in $S({\cal B}(R(l_1,l_2)))$ towards the growth they must be either $\s _1$ or $\bar \s _1$ (see Fig. 3.1). Let $\s$ be one of these saddles in $S({\cal B}(R(l_1,l_2)))$.\par We know that $\s$ must contain a unique cluster. Moreover we have: $R(\s) = R' \supset R$ and by Lemma 3.3 $ \s \cap R =R$. Necessarily either $\s = \s_2 (R),$ or $\s = \bar \s _2 (R)$ or $\s = \s _1 (R)$ or $\s = \bar \s _1 (R)$ as it easily follows by looking at the minimizing configurations in $R' \setminus R$ among the ones giving rise to a saddle in $\widetilde S({\cal B}(R(l_1,l_2)))$. Since $$ H(\s_2 ) - H(R) > \D H^* , \;\;\;\;\; H(\bar \s_2 ) - H(R) > \D H^* $$ necessarily the minimal saddles towards the growth are either $\s_1$ or $\bar \s _1$.\par \bigskip Now we want to show that the minimal saddles in $S({\cal B}(R(l_1,l_2)))$ towards the contraction are given by \equ (3.14), \equ (3.15) in regions I, II, respectively. \par Let $\z$ be one of these saddles. We know that $\z$ is {\it almost monotonic} in the sense that it is monotonic except at most for one vertical unit gulf in ${\cal L}_2$.\par Consider $\s \in {\cal B}(R)$ such that $\s^{(x)} = \x$ with $\x \in \widetilde S({\cal B}(R))$ and almost monotonic ($\s \in \partial ^- {\cal B}(R)$, see \equ (2.6aa)) and with $\s_x =+1, \; \x_x =-1$, $H(\s) < H(R)$. Necessarily also $\s$ is almost monotonic. Starting from $\s$ it is easy to construct an almost monotonic configuration $\h \in \partial^- {\cal B}(R) $ being stable except possibly for the unit vertical gulf $y$, such that $$ \h \prec \s , \;\;\;\;\;\;\;\; H(\h) \leq H(\s) \Eq (3.17) $$ Indeed suppose first that $\s$ is monotonic ; if $\s$ is stable we take $\h \equiv \s$. If $\s$ is not a local minimum nonetheless it must be sufficiently ``fat" to contain a local minimum as we immediately get by a comparison of $H(\s) - H(R)$ with $\D H^*$. We start eroding from the angles the plus spins in ${\cal L}_2 \cap \h$; in other words we flip into minus all the plus spins belonging to rows in ${\cal L} _2 \cap \h$ touching the sea of minuses (this operation is well defined since $\h$ is monotonic). It is immediately seen that, in this way, we end up with a stable configuration $\h \in \partial ^- {\cal B}(R) $ satisfying the above requirements \equ (3.17). By the argument of proof of Lemma 3.3 we get: $$H(\h) -H(R) > \e m $$ where $m$ is an integer $\geq 0$ . If $\x$ is almost monotonic with a vertical unit gulf in $y \in {\cal L}_2$ we have necessarily $y \neq x$ and $\s^{(y)}$ monotonic . We can apply to $\s$ the above procedure of angle erosion of pluses in $ {\cal L}_2$. The spin at $y$ , having three plus neighbours in ${\cal L}_2 \cap \s$, is not changed so we end up with $\h$ such that $\h ^{(y)} $ is a monotonic local minimum. It follows that $$H(\h) -H(R) = \e m + 2J -h_2 = \e m + \m$$ $m \in {\bf Z}^+$. Consider the configuration $\h ^{(x)}$. Obviously we have $\h ^{(x)} \in \; S({\cal B}(R(l_1,l_2)))$. Suppose first that $x \in \; {\cal L}_1$. Since our construction involved only sites in ${\cal L}_2$ we did not touch $\s(x)$. We have either $$H(\h^{(x)}) -H(R) \geq \e m +h_1 \Eq (3.18)$$ or $$H(\h^{(x)}) -H(R) \geq \e m +\m +h_1 \Eq (3.19)$$ with $m \in {\bf Z}^+$. The case of \equ (3.19) can be excluded since $$\m +h_1 > \D H^*$$ If $x \in \; {\cal L}_2$ again in our construction we did not touch $x$ since we only decreased the energy. If $\h$ is monotonic we have: $$H(\h^{(x)}) -H(R) = \e m +2 kJ - h_2 \Eq (3.20)$$ with $m \in {\bf Z}^+$, $k=0,1,2$. It is immediately seen that we cannot have $k=0$; indeed we must have $\h_x =+1$ but since $\s$ is monotonic and $x \in {\cal L}_2 $ our construction should have given $\h_x =-1$. It is immediate to verify that $k=2$ imply an increment in energy strictly larger than $\D H^*$ an then it can be neglected. Therefore we have only to consider the case $k=1$. In this case $\h ^{(x)}$ is not monotonic but it has a unit vertical gulf at $x$. We get: $$H(\h^{(x)}) -H(R) = \e m +\m \Eq (3.21)$$ Similarly if, in the above situation, $\h$ is only almost monotonic in the sense that it contains a unit vertical gulf in ${\cal L}_2 $ we get $$H(\h^{(x)}) -H(R) = \e m +2\m > \D H^*\Eq (3.22)$$ By a global comparison between the above cases we see that we are led to find the minimal possible values of $m$ in the r.h.s of \equ (3.18), \equ (3.21), respectively. If $\h^{(x)}$ is downhill connected only to minima $V_1$-downhill connected to a unique rectangle we easily get that this minimal value is given by: $$m=\min \Bigl\{ {l_h-3\over 2},\;l_b-2\Bigr\}. \Eq (3.23)$$ If $\h^{(x)}$ is downhill connected to at least a minimum $V_1$-downhill connected to a $V_1$-stable configuration containing more than one stable rectangle (splitting) we easily get: $$m\geq {l_h-3\over 2} + l_b-2. \Eq (3.24)$$ \par and this concludes the proof of the Proposition. \eop \goodbreak \numsec=4\numfor=1 \vskip 1cm {\bf Section 4. Proof of Theorem 1.} \par \vskip 1cm Let us assume that there exists a set ${\cal G}$ satisfying the following\par \bigskip {\bf Property ${\cal K}$ }:\par\bigskip 1. ${\cal G}$ is connected. \par 2. $ {\cal P} \in S( {\cal G})$ \par 3. $ \;\exists \;c>0 $ such that $\min\limits_{\s \in \partial {\cal G} \backslash {\cal P}} H(\s) \ge H({\cal P}) + c$ \par 4. There exists a path $\o:\; \menouno \rightarrow {\cal P},\;\o\, \in {\cal G}$ such that $H(\z)From Proposition 3.4 in [OS1] we know that there exists a cycle $\bar {\cal G}$ satisfying above properties ${\cal K}$ 1,2,3.\par >From Proposition 3.7 in [OS1] we get: $$ \forall \d \; >\;0\qquad \lim\limits_{\b \rightarrow \infty} P_{\menouno}(\t_{\partial \bar {\cal G}} < e^{\G(\b+\d)}) = 1\Eq (4.3)$$ On the other hand, from Lemma 3.1 in [OS1] we get that: $$ \forall \; \d \; >\;0 \qquad \lim\limits_{\b \rightarrow \infty} P_{\menouno}(\t_{\partial \bar {\cal G}} > e^{\G(\b-\d)}) = 1\Eq (4.4)$$ We know that $$ \exists \;\l > 0 \hbox{ such that } P_{\cal P}(\t_{\piuuno} < \t_{\menouno}) > \l.\Eq (4.5)$$ >From \equ (4.3), \equ (4.4), \equ (4.5), property ${\cal K}$ 6 and Proposition A.1 of [CO] we get the result.\eop \bigskip Then the proof of Theorem 1 is reduced to the construction of the set ${\cal G}$.\par \bigskip \goodbreak \centerline{\bf Costruction of $\bf {\cal G}$.} \par \bigskip Let us now start the construction of the set ${\cal G}$. To do that we need some more definitions. We want to recall that in the present work we often identify a configuration $\s$ with the union $C(\s)$ of the closed unit squares in ${\bf R}^2$ centered at sites $x$ with $\s(x) =+1$. Then it makes sense to construct configurations as unions or intersections of other configurations and write, for istance, $$\s = \h \cup \x, \qquad \s' = \h' \cap \x'$$ meaning $$C(\s) = C(\h) \cup C(\x),\qquad C(\s') = C(\h') \cap C(\x')$$ Given a set $A$ being a union of unit squares centered at lattice sites in some ${\cal A} \subset \L$ we identify $A$ with the configuration $\s$ given by $$\s(x)=\cases{+1\qquad \forall\;x\;\in\;{\cal A}\cr -1\qquad \forall\;x\;\in\;\L\setminus{\cal A} \cr}$$ We write $\s = \emptyset$ to denote the configuration $\s(x) = -1 \; \forall \; x \in \;\L$.\par The basic idea for a successful construction of a set ${\cal G}$ satisfying property ${\cal K}$ is to think of ${\cal G}$ as a sort of lower estimate of the set of subcritical configurations namely the ones which typically for large $\b$ visit $\menouno$ before getting to $\piuuno$. By ``lower estimate" we mean that any $\s$ in ${\cal G}$ is certainly subcritical but we can (and we will) even leave some subcritical configurations outside ${\cal G}$ $\underline{\rm provided}$ we still fulfil the crucial property that the minimum of the energy in $\partial {\cal G}$ is reached precisely at the set ${\cal P}$ of protocritical configurations. We then need a criterion (sufficient condition) for subcriticality which applies to every configuration and not only to the stable rectangles like in the discussion we did in the previous section 3.\par We will start our analysis from configurations $\s$ giving rise to a single cluster. The main difficulties arising in our $h_1h_2$-model are that, contrary to the standard Ising model: \par 1. a downhill path leading from $\s$ to its rectangular envelope in general does not exist and \par 2. the protuberances which are able to induce the growth of a rectangle (when attached to one of its sides) are more complicated than the ones (simply unit squares) appearing in the standard Ising model. These protuberances which can be considered as a sort of ``one-dimensional protocritical droplets" depend on the direction of the side of the rectangle and are different in the different regions of the parameters $h_1h_2$. Therefore, as it will appear clear in the following, given a single cluster $\s$ we will need to introduce a geometrical object associated to $\s$, denoted by $\r(\s)$ and called {\it quasi-rectangle}, or quasi-rectangular envelope of $\s$ in terms of which it will be easy to decide the subcriticality or supercriticality of $\s$. The important properties that we will use are : $$ \r(\s) \succ \s, \;\;\;\;\; H(\r(\s)) \leq H(\s) $$ Now suppose we are given a (not necessarily stable) rectangle $R = R(l_1,l_2)$ having a given location and being large enough to contain an $R(1,2)$ rectangle. We recall that $l_1,l_2$ denote the horizontal side (basis) and the vertical side (height), respectively. We want to introduce some useful geometrical notions depending on the location of $R$. \par \bigskip We call $\tilde s_t,\tilde s_b$, respectively, the rectangles adjacent from the interior to the top and bottom horizontal edge of $R$ with basis $l_1$ and height equal to: two if the edge of $R$ to which it is adjacent "lies on ${\cal L}_1$''; one if the edge of $R$ to which they are adjacent "lies on ${\cal L}_2$''. We call $\tilde c_l,\tilde c_r$, respectively, the rectangles with height $l_2$ and basis one adjacent from the interior to the left and right vertical edges of $R$. We set $$ c_l = c_l(R) :=\tilde c_l\setminus [\tilde c_l \cap (\tilde s_t\cup\tilde s_b)], $$ $$ c_r = c_r(R) := \tilde c_r\setminus [\tilde c_r \cap (\tilde s_t\cup\tilde s_b)] $$ and call them left and right {\it column} of $R$ (see Fig. 4.1).\par We set $$ s_t = s_t(R) :=\tilde s_t\setminus [\tilde s_t \cap (\tilde c_l\cup\tilde c_r)], $$ $$ s_b = s_b(R) :=\tilde s_b\setminus [\tilde s_b \cap (\tilde c_l\cup\tilde c_r)] $$ and call them (horizontal) top and bottom {\it strip} of $R$ (see Fig. 4.1).\par We set, for $i= t,b ; \;\;j =l,r$ $$ a_{i,j} = a_{i,j}(R) = \tilde s_i \cap \tilde c_j $$ and call them corners of $R$. They are $R(1,2)$ or $R(1,1)$ rectangles.\par The union $$ {\cal F} = {\cal F}(R) := \tilde s_t\cup \tilde s_b \cup \tilde c_l \cup \tilde c_r \equiv s_t\cup s_b \cup c_l \cup c_r \cup a_{t,l} \cup a_{t,r} \cup a_{b,l} \cup a_{b,r} $$ is called the (picture) {\it frame} of the rectangle $R$.\par Finally the (possibly empty) set $$ {\cal H} = {\cal H}(R) := R \setminus {\cal F}(R) $$ is called {\it hard core} of $R$. (see Fig. 4.1) \par \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.6true cm,0.6truecm> \setplotarea x from 0 to 10, y from 0 to 6 \putrectangle corners at 0 6 and 10 0 \putrectangle corners at 1 1 and 9 0 \putrectangle corners at 1 6 and 9 4 \setdashes \putrectangle corners at 0 4 and 1 1 \putrectangle corners at 9 4 and 10 1 \put {${s}_t$} at 5 5 \put {${s}_b$} at 5 0.5 \put {${c}_l$} at 0.5 2.5 \put {${c}_r$} at 9.5 2.5 \put {${a}_{t,l}$} at 0.5 5 \put {${a}_{b,r}$} at 9.5 0.5 \put {${a}_{b,l}$} at 0.5 0.5 \put {${a}_{t,r}$} at 9.5 5 \put {${\cal L}_1$} at 13 5.5 \put {${\cal L}_2$} at 13 0.5 \put {${\cal L}_2$} at 13 4.5 \put {\smbfb \quad Fig. 4.1 } at 16 3.5 \endpicture \hss\egroup \endinsert Now, given a single cluster $\s$ we define its quasi-rectangular envelope $\r (\s)$. We distinguish various cases.\par\bigskip {\bf CASE 1 The rectangular envelope $R(\s)$ of the cluster $\s$ starts and ends in rows in ${\cal L}_1$}.\par We start preliminarly defining an auxiliary sequence of configurations (clusters). For the two columns $c_i, i=l,r$ and for the two strips $s_j, j=t,b$ we define $\h_{c_i} =\h_{c_i}(\s)$ and $\h_{s_j} =\h_{s_j}(\s)$ as follows:\par {\leftskip =1.2 cm $\bullet$ If the intersection (restriction) of $\s$ with the column, $\s\cap{c}$, contains only one site in ${\cal L}_1$ then we set: $\h_{{c}} =\s\cap{c}$, otherwise $\h_{{c}}={c}$. \par $\bullet$ If the intersection of $\s$ with the strip $\s\cap{s}$ contains one of this two protuberances \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.5truecm,0.5truecm> \axis bottom / \axis left / % \plot 1 1 2 1 / \plot 2 1 2 3 / \plot 2 3 3 3 / \plot 3 3 3 2 / \plot 3 2 4 2 / \plot 4 2 4 1 / % \plot 4 1 5 1 / % \plot 8 1 9 1 / \plot 9 1 9 3 / \plot 9 3 11 3 / \plot 11 3 11 2 / \plot 11 2 10 2 / \plot 10 2 10 1 / \plot 10 1 11 1 / % \put {$+$} at 1.5 0.5 \put {$+$} at 2.5 0.5 \put {$+$} at 3.5 0.5 \put {$+$} at 2.5 1.5 \put {$+$} at 2.5 2.5 \put {$+$} at 3.5 1.5 % \put {$+$} at 4.5 0.5 \put {$+$} at 9.5 1.5 \put {$+$} at 9.5 2.5 \put {$+$} at 9.5 0.5 \put {$+$} at 10.5 2.5 \put {$+$} at 10.5 0.5 % \put {$+$} at 8.5 0.5 % \put {$+$} at 11.5 0.5 \endpicture \hss\egroup \endinsert then we set $\h_{{s}}={s}$ otherwise $\h_{{s}} =\s\cap{s}$. \par} We follow this procedure for all strips and columns. Now we preliminarly define a configuration $\r''(\s)$ : \par $$\r''(\s) = {\cal H}(R) \cup\h_{c_{l}}\cup\h_{c_{r}}\cup\h_{s_{t}}\cup\h_{s_{b}}$$ Let $a_{ij}$ be a corner and let $s_i$, $c_j$ be the strip and column adjacent to $a_{ij}$. \par The above procedure will give rise to one of the following four different results for $\h_{s_i}$ and $\h_{c_j}$: \par {\leftskip =1 cm I both $s_i$ and $c_j \;$ are filled: $\h_{s_i}=s_i \;\;\; \hbox {and} \;\;\; \h_{c_j}=c_j$\par \noindent II only the strip $s_i \;$ is filled: $\h_{s_i}=s_i \;\;\; \hbox{and} \;\;\; \h_{c_j}=c_j\cap\s$\par \noindent III only the column $c_j\;$ is filled : $\h_{s_i}=s_i\cap\s \;\;\; \hbox{and} \;\;\; \h_{c_j}=c_j$\par \noindent IV neither the strip $s_i$ nor the column $c_j\;$ are filled: $\h_{s_i}=s_i\cap\s \;\;\; \hbox{and} \;\;\; \h_{c_j}=c_j\cap\s $\par \noindent}\par \bigskip \par \bigskip According to the different case we are dealing with we now prescribe, for each corner $a = a_{i,j}$, a new configuration $\h_a$ in $a$ that subsequently will be united to the previously defined $\r''(\s)$.\par \bigskip \everycr={\noalign{\bigskip}} \tabskip =1 cm\halign to 16.5 cm {% #\hfill&#\hfill\hfill&#\hfill\hfill \cr CASE I&$\qquad\qquad$&$\h_a=a\qquad$\cr CASE II&${\rm if}\;\s\cap a=\emptyset$&$\h_a=\emptyset\qquad$\cr $\quad$&${\rm if}\;\s\cap a \subset {\cal L}_1\;{\rm and}\; \s\cap c_j=\emptyset$& $\h_a=\emptyset$\cr $\quad$&otherwise&$\h_a=a\cap c_j$\cr CASE III&${\rm if}\; a\cap \s=\emptyset$&$\h_a=\emptyset$\cr $\qquad$&${\rm if} \;a\cap \s =a \;{\rm and}\; \s\cap s_i=\emptyset$& $\h_a=a\cap\s$\cr $\qquad$&otherwise&$\h_a=a\cup s_i$\cr CASE IV&${\rm if}\; \s\cap a=\emptyset$&$\h_a=\emptyset$\cr $\quad$&${\rm if}\;\s\cap a \subset {\cal L}_1\;{\rm and}\; \s\cap c_j=\emptyset$& $\h_a=a\cap\s$\cr $\quad$&${\rm if}\;\s\cap a \subset {\cal L}_1\;{\rm and}\; \s\cap c_j\not=\emptyset$& $\h_a=a\cup s_i\cup c_j$\cr $\qquad$&${\rm if}\;\s\cap a \subset {\cal L}_2$& $\h_a=a\cup s_i\cup c_j$\cr $\qquad$&${\rm if}\;\s\cap a=a \;{\rm and}\; \s\cap c_j =\emptyset \;{\rm and}\; \s\cap s_i=\emptyset$& $\h_a=a\qquad$\cr $\qquad$&$\quad " \qquad \quad{\rm and}\; \s\cap c_j \not=\emptyset \;{\rm and}\; \s\cap s_i=\emptyset$& $\h_a=a\cup c_j $\cr $\qquad$&$\quad " \qquad \quad{\rm and}\; \s\cap c_j =\emptyset \;{\rm and}\; \s\cap s_i\not=\emptyset$& $\h_a=a\cup c_j \cup s_i$\cr $\qquad$&$\quad " \qquad \quad{\rm and}\; \s\cap c_j \not=\emptyset \;{\rm and}\; \s\cap s_i\not=\emptyset$& $\h_a=a\cup c_j \cup s_i$\cr} Now we define: $$\r'(\s)= \r''(\s)\cup\h_{a_{t,l}}\cup\h_{a_{t,r}}\cup\h_{a_{b,l}}\cup\h_{a_{b,r}}$$ If $\r'(\s)\cap s_i =s_i$ and $\r'(\s)\cap c_j =c_j$ we set, for $a_{i,j} = \tilde s_i \cap \tilde c_j$: $\bar \h _{a_{i,j}} = a_{i,j}$ otherwise we set $\bar \h _{a_{i,j}}=\h _{a_{i,j}}$. Finally we define $$\r(\s)= \r'(\s)\cup\bar \h_{a_{t,l}}\cup \bar \h_{a_{t,r}}\cup \bar\h_{a_{b,l}}\cup \bar\h_{a_{b,r}}$$ \eop \bigskip {\bf CASE 2} The rectangular envelope ${R}(\s)$ begins and ends on rows in ${\cal L}_2$ {\leftskip =1 cm $\bullet$ If $\s\cap \tilde c_i$ contains only one site that belongs to ${\cal L}_1$ then we set $\h_{{c_i}} =\s\cap{c_i}$, otherwise $\h_{{c_i}}={c_i}$. \par $\bullet$ For each corner $a$ we set: $\h_a=\s\cap a$. We define $$\r(\s)={\cal H}(R)\cup\h_{{c}_l}\cup \h_{{c}_r}\cup (\s\cap({s}_t\cup {s}_b))\cup\h_{a_{t,l}} \cup\h_{a_{t,r}}\cup\h_{a_{b,l}}\cup\h_{a_{b,r}} \Eq (4.7)$$} \par {\bf CASE 3} The rectangular envelope starts on a row in ${\cal L}_1$ and ends on a row in ${\cal L}_2$ (or vice-versa); then on the row that belongs to ${\cal L}_1$ we define the strip, the corner and the configuration $\h$ as we did in case 1. On the row that belongs to ${\cal L}_2$ the definitions are the same as in case 2.\par\bigskip We call the above constructed $\r(\s)$ the {\it quasi-rectangular envelope} of the cluster $\s$.\par \bigskip We call {\it core } of $\s$ and denote by ${\cal N}(\s)$ the biggest stable rectangle which is contained in $\r(\s)$. \bigskip {\bf 4.1 Proposition } \par {\it Among all clusters $\s$ that have the same quasi-rectangular envelope $\r$ the one with minimal energy is $\s = \r(\s)$. \par} \bigskip {\it Proof.}\par The proof immediately follows from lemma 3.3 \eop \par \bigskip Now we want to introduce some new critical lengths. They will come out by a comparison between typical times of two different classes of competing events, respectively related to contraction and coalescence. Consider two stable rectangles $R_1,R_2$ at a distance one in the vertical direction; by this we mean that there exists a site $x \in {\cal L}_2$ such that the unit square $q(x)$ centered at $x$ has two horizontal sides in common with the boundaries of $R_1,R_2$, respectively.\par The energy necessary to flip the minus spin at $x$ and, in this way, induce the coalescence of the two rectangles $R_1,R_2$ is: $$\D{ H}=h_2\Eq (4.6)$$ Let us denote by $\D H_s, \; \D H_c$ the energy barriers necessary to contract a rectangle by removing a horizontal strip of width 2 or a column of width 1, respectively.\par By Proposition 3.4 we know that the expressions of these quantities depend on the region of parameters and that in region I we have: $$\D H_s =\e(l_1-2)+h_1\Eq (4.7')$$ $$\D H_c ={\e\over 2}(l_2-3)+h_1\Eq (4.8),$$ whereas in region II we have: $$\D H_s =\e(l_1-2)+\m\Eq (4.9)$$ $$\D H_c ={\e\over 2}(l_2-3)+\m\Eq (4.10)$$ We define $l_1^*, l_2^* \;$ as the minimal horizontal and vertical lengths such that $$ \D H_s \; > \; \D H, \;\;\;\;\;\; \D H_c \; > \; \D H , \Eq (4.11) $$ respectively. We suppose that ${h_2 - \m \over \e}$ is not integer. We get: \par\noindent In region I: $$(l_1^*, l_2^*)\;\;\; = \;\;\; (2,3). $$ In region II: $$l_1^*=\Bigg[ {h_2-\m \over \e} +3 \Bigg] \Eq (4.12)$$ and $l_2^*$ is odd and depends on the fractional part $\{ {h_2-\m \over \e} \}$ of ${h_2-\m \over \e}$ ( for $x \in {\bf R}^+$ we set $\{x\} := x - [x]$). $$\hbox{If}\quad {h_2-\m\overwithdelims \{\} \e} \geq {1\over 2} \quad\Longrightarrow\quad l_2^*= \Bigg[ {2(h_2-\m) \over\e} +4 \Bigg],\Eq (4.10')$$ $$\hbox{if}\quad {h_2-\m\overwithdelims \{\} \e} < {1\over 2}\quad\Longrightarrow\quad l_2^*=\Bigg[ {2(h_2-\m) \over \e} +5 \Bigg].\Eq(4.13)$$ In any case we have: $$l_2^* = 2 l_1^* -1\Eq (4.14)$$ namely $R(l_1^*,l_2^*)$ has the standard shape.\par We notice from \equ (4.12), \equ (4.13) also in region II, if $h_2 < \m$ we have $(l_1^*, l_2^*)\; = \; (2,3). $ \bigskip \par We say that a cluster $\s$ is {\it ephemere} if its core ${\cal N}(\s)$ does not contain a recangle R$(l_1^*,l_2^*)$.\par Two clusters $\s_1$, $\s_2$ are said to be {\it interacting} if they verify one of the following conditions: \item{1)} their rectangular envelope R$(\s_1)$ and R$(\s_2)$ intersect \item{2)} there exists a site $x$ in ${\cal L}_1$ such that $q(x)\cap (R (\s_1)\cup R(\s_2))$ is given by two vertical unit segments \item{3)} there exists a site $x \in {\cal L}_1$ such that $q(x)\cap (R (\s_1)\cup R(\s_2))$ is given by two horizontal unit segments \item{4)} there exists a site $x \in {\cal L}_2$ such that $q(x)\cap (R (\s_1)\cup R(\s_2))$ is given by two horizontal unit segments; moreover, supposing that $R(\s_1)$ lies over $R(\s_2)$ we have: $$ \r(\s_1) \cap s_b (R(\s_1)) = s_b ( R(\s_1)) \hbox { and } \r(\s_2) \cap s_t (R(\s_2)) = s_t ( R(\s_2))$$ with both $R(\s_1)$ and $R(\s_2)$ non-ephemere.\par \bigskip A family of quasi-rectangles $ \r_1,\ldots, \r_n$ is said to form a {\it chain} ${\cal C}$ if for every pair $i,j\>\in\>\{1,\ldots,n\}$ there exists a sequence $(i_1,\ldots,i_l) $ such that $\r_{i_k}$ and $\r_{i_{k+1}}$ are interacting and $\r_{i_1}=\r_i\qquad \r_{i_l}=\r_j.$\par To construct ${\cal G}$ for our $h_1,h_2$ model, first of all we define a map $F : \O^*\longrightarrow\;\O^*$ where $\O^*=\{$ acceptable configurations $\}\;$. We use the notation: $F(\s)=\hat\s$. $F$ is given in the following steps:\par \noindent 1) starting from $\s$ that consist of some clusters $\s_1,\ldots,\s_n$ we construct $\r(\s_1),\ldots,\r(\s_n)$\par \noindent 2) We define {\it chains of first generation} ${\cal C}_1^{(1)},\ldots,{\cal C}_{k_1}^{(1)}$ the maximal connected chains in which we can decompose the set $\r(\s_1),\ldots,\r(\s_n)$. Then for any ${\cal C}_j^{(1)}$ we define $$\r\bigl({\cal C}_j^{(1)}\bigr)=\bigcup\limits_{\r(\s_i)\>\in\>{\cal C}_j^{(1)}}\r(\s_i)\; \;\; \cup\;\;\; {R}\;\Bigl( \bigcup\limits_{\r(\s_i)\in{\cal C}_j^{(1)}} {\cal N}(\s_i)\Bigr)\Eq (4.17) $$ \noindent 3) Having defined the chain of r-th generation ${\cal C}_1^{(r)},\ldots,{\cal C}_{k_r}^{(r)}$ we consider $\forall \;j\,\in \,(1,\ldots,k_r)\;\;\;\r\bigl({\cal C}_j^{(r)}\bigr)$ and we construct ${\cal C}_1^{(r+1)},\ldots,{\cal C}_{k_{r+1}}^{(r+1)}.$\par We continue in this way up to a finite maximal order f such that the chains of the f-th generation are non-interacting clusters ${\cal C}_1^{(f)},\ldots,{\cal C}_{k_f}^{(f)} \equiv \bar\r_1^{(\s)},\ldots,\bar\r_m^{(\s)}$. We call $F(\s)=\hat\s =\bar\r_1^{(\s)},\ldots,\bar\r_m^{(\s)}$ these clusters.\par We observe that F satisfies the following properties: \par \noindent \item{1)} $\s\;\prec \;\hat\s$\par \item {2)} $ {H}(\hat\s)\leq {H}(\s)$\par \item {3)} It is monotone in the sense that $\s\;\prec\;\h \Longrightarrow \hat\s\;\prec\;\hat\h$ \par\medskip A cluster $\s$ is called {\it subcritical} if ${\cal N}(\r(\s))$ does not contains a rectangle ${R}^*={R}(l_b^*,l_h^*).$ \par Now we are ready to define our set ${\cal G}$. \medskip $${\cal G}=\{ \s\;\in \>\O^*\;\hbox{such that }\hat\s =\{\bar\r_1^{(\s)},\ldots,\bar\r_m^{(\s)}\} \;\forall\>j\>\in \>\{ 1,\ldots,m\} \qquad \bar\r_j^{(\s)}\;\hbox{is subcritical }\}\Eq (4.18)$$ It easily follows from Proposition 3.4 that properties ${\cal K}$ 4,5 are satisfied. Property ${\cal K}$ 6 follows from Proposition 3.4 and from the observation that for any cycle $A$ not containing $\{-1,+1\}$ we have $ H(U(A)) - H(F(A)) < 2J -h_1 + h_2$.\par We have to now prove the fundamental point namely property ${\cal K}$ 2. \bigskip {\bf 4.2 Proposition } \par $$\min\limits_{\s\in \partial{\cal G}}{H}(\s)={H}({\cal P})\Eq (4.19)$$ {\it Proof}\par We know that, given $\z \in \partial {\cal G}$, there exists $\s \in {\cal G}$ such that: $ \s^{(x)}=\z \qquad \s_x=-1\;\; $. We have:\par\noindent 1) $x\>\not\in\> \bar\r_j^{(\s)}\qquad \forall\>j= \{1,\ldots,m\}$ otherwise $\hat\s$ would be equal to $\hat\z$ but we know that $\z \notin {\cal G}$.\par\noindent 2) In $\hat\z$ we must have $\bar\r_j^{(\z)}$ such that\par {\leftskip =0.7 cm $\bullet$ $\; {\cal N}(\bar\r_j^{(\z)})$ is supercritical; the other $\bar\r_k^{(\z)}$ belong to $\hat\s$ so they are subcritical .\par $\bullet$ Let $\tilde\z = \bar\r_j^{(\z)}$, then ${H}(\tilde\z) \leq {H}(\hat\z)$\par $\bullet$ $\;\tilde\z=\bar\r_j^{(\z)}$ contains $q(x)$ and some $\bar\r_1^{(\s)},\ldots,\bar\r_m^{(\s)}$ that belong to $\hat\s$. \par}\noindent We denote by ${C}^{(0)}$ the union of $q(x)$ with the clusters $\bar\r_1^{(\s)},\ldots, \bar\r_m^{(\s)}$ which intersect $q(x)$ in some one of its sides. These clusters can be one or two; moreover ${\cal N}(\r({C}^{(0)}))$ can be subcritical or supercritical.\par In what follows, starting from a generic configuration $\z \in \partial {\cal G} $ we will often modify it (remaining in $\partial {\cal G}$) by decreasing the energy. This will be useful since we are looking for the minimum of the energy on $\partial {\cal G}$.\par \bigskip {\bf 1. ${\cal N}(\r(\hbox{C}^{(0)}))$ is supercritical}\par\bigskip In this hypothesis the energy decreases if we spin-flip all the (internal) sites that belong to $\bar\r_1^{(\s)},\ldots,\bar\r_l^{(\s)}$ and that do not take part in the costruction of ${C}^{(0)}$ because they are subcritical. ${C}^{(0)}$ is supercritical, so it must exist a rectangle ${R}^*={R}(l_b^*,l_h^*)$ that is contained in ${\cal N}(\r({C}^{(0)}))$.\par $\bullet$ Let ${C}^{(0)}$ consist of $q(x)$ and of two quasi-rectangles $\r, \r'$. We know that $\r, \r'$ are not interacting but they become interacting after the spin-flip at $x$; moreover we know that $q(x)$ must intersect both of the rectangular envelopes on two sides. Consider the circumscribed rectangles $R = R(\r)$, $R' = R(\r')$. Certainly we can choose $R^*$ with non-empty intersections both with $R$ and $R'$.\par There are two cases, in which two clusters are not interacting and at a distance 1:\par \noindent 1) there exists a unique site $x$ such that $q(x)$ intersects the two rectangles on two vertical sides; $x \in {\cal L}_2$. \par \noindent 2) $x$ belongs to ${\cal L}_2$ and $q(x)$ intersects the two rectangles on two horizontal sides, but one of these rectangles is ephemere.\par Consider case 1); the rectangles $R=R (\r) $ and $ R'=R(\r')$ must start and end in rows belonging to ${\cal L}_2$, or they must have one row in common belonging to ${\cal L}_2$ and the others belonging to ${\cal L}_1$. Since $R$ and $R'$ are subcritical we further decrease the energy by removing their portions lying outside $R^*$ After the intersection with ${R}^*$ the two cases coincide; see Fig. (4.2 (a) ). \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.4truecm,0.4truecm> \setplotarea x from 0 to 23, y from 0 to 17 \plot 4 7 5 7 / \plot 4 8 5 8 / \putrectangle corners at 0 15 and 8 0 \putrectangle corners at 0 15 and 4 7 \putrectangle corners at 5 8 and 8 0 \put {$x$} at 4.5 7.5 \put {$l_1$} at 3 14 \put {$l_2$} at 1 11.5 \put {$l_2'$} at 6 4.5 \put {$l_1'$} at 6.5 7 \plot 15 0 15 15 / \plot 15 0 23 0 / \plot 23 0 23 15 / \plot 15 15 23 15 / \plot 18 7 20 7 / \plot 21 7 23 7 / \plot 19 7 19 8 / \plot 20 7 20 8 / \plot 21 7 23 7 / \plot 19 8 21 8 / \plot 15 8 18 8 / \plot 18 7 18 8 / \plot 19 8 19 15 / \plot 20 0 20 7 / \plot 21 7 21 8 / \setdashes \plot 15 7 18 7 / \plot 21 8 23 8 / %\putrectangle corners at 1 5 and 9 2 \put {$x$} at 19.5 7.5 \put {$y$} at 18.5 7.5 \put {$z$} at 20.5 7.5 \put {$l_1$} at 18 14.5 \put {$l_2$} at 16 11.5 \put {$l_2'$} at 20.5 4.5 \put {$l_1'$} at 21.5 6 \put {${\cal L}_1$} at 28 14.5 \put {${\cal L}_1$} at 28 0.5 \put {${\cal L}_2$} at 28 7.5 \put {\smbfb \quad Fig. 4.2 } at 13 19 \put{(a)} at 4 17 \put{(b)} at 19 17 \endpicture \hss\egroup \endinsert Let $l_1,l_2$ be the sides of $R \cap R^*$, $l'_1,l'_2$ the ones of $R' \cap R^*$ and suppose that $l_1 \geq l'_1$. We have: $$l_1\geq l_1'\qquad 1\leq l_1\leq l_b^*-2\qquad 2\leq l_2 \leq l_h^*-1 =2\,(l_b^*-1)$$ Let $$ \D H' := H( {\cal P}_{ {\rm I}, a} ) - H (R^*) = h_1 + \e ( l^*_b -2), $$ $$ \D H'' := H( {\cal P}_{ {\rm II}, a} ) - H (R^*) = \m + \e ( l^*_b -2), $$ $$ \D H^* := H( {\cal P}) - H (R^*) = \min \{ \D H',\D H''\} $$ and let $$\D{H} ={H}({C}^{(0)})-{H}({R}^*).$$ This quantity is minimal if there exists a unique site $y$ belonging to ${\cal L}_2 \cap R \cap R^*$ in the same row as $x$ and a unique site $z$ belonging to ${\cal L}_2 \cap {R}' \cap R^*$ in the same row as $x$ (see Fig. 4.2 (b)) \par Thus we have: $$\D{H}\geq 4\,h_1+\e(l_b^* -3)+{\e \over 2} (l_2 -2) (l_b^*-l_1)+ {\e \over 2} (l_1+1) (l_h^*-(l_2+1))\Eq (4.20)$$ $$\D{H}-\D{H}'\geq 3 h_1 -\e +{\e \over 2}(l_2 -2) (l_b^*-l_1)+ {\e \over 2} (l_1+1) (l_h^*-(l_2+1))\geq 0 \qquad \hbox{always.}$$ Consider now case 2); either both rectangles $R$ and $ R'$ start and end in rows belonging to ${\cal L}_1$, or they must have one row that intersects $q(x)$ belonging to ${\cal L}_1$ and the other belonging to ${\cal L}_2$. Also in this case, as before, after the intersection with ${R}^*$, the two cases coincide; they are as shown in Fig. 4.3 . In this case the situation with minimal energy corresponds to $\r\cap R^* = R\cap R^*, \; \r'\cap R^* = R'\cap R^*$ that we will then assume as hypothesis.\par $l_1, l'_1,l_2,l'_2$ are defined as in case 1.\par Let $m_2=l_b^*-l_1\qquad m_1=l_b^*-l_1'\qquad l=l_1+l_1'-l_b^*$, we denote by $L$ the height of the rectangle that has the smaller horizontal side; therefore, since $l_1 \geq l_2$ we have $L=l_2'$ and $m_1\geq m_2$ (see Fig. 4.3). \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.4truecm,0.4truecm> \setplotarea x from 0 to 8, y from 0 to 15 \plot 5 5 5 6 / \plot 6 5 6 6 / \putrectangle corners at 0 15 and 8 0 \putrectangle corners at 0 15 and 6 6 \putrectangle corners at 3 5 and 8 0 %\setdashes %\putrectangle corners at 1 5 and 9 2 \put {$x$} at 5.5 5.5 \put {$l_1$} at 3 14.3 \put {$l_2$} at 1 11.5 \put {$l_1'$} at 5.5 0.5 \put {$l_2'=L$} at 10 2 \put {$m_1$} at 1.5 0.5 \put {$m_2$} at 7.5 15.5 \put {$l$} at 4.5 7 \put {${\cal L}_1$} at 13 14.5 \put {${\cal L}_1$} at 13 0.5 \put {${\cal L}_2$} at 13 5.5 \put {\smbfb \quad Fig. 4.3 } at 17 10 \endpicture \hss\egroup \endinsert $$\D{H} ={H}({C}^{(0)})-{H}({R}^*)= \m(l-1)+{\e \over 2} m_2 (l_h^*-L) +{\e \over 2}m_1(L+1)\Eq (4.22)$$ %$$=\m(l-1) +{\e \over 2}(l_h+1)m_2+{\e \over 2}(L+1)(m_1-m_2)$$ $$\D{H}-\D{H}''\geq\m(l-2)+\e l_b^*(m_2-1)+{\e \over 2}(L+1)(m_1-m_2)+2\e\Eq (4.24)$$ \item{(i)} If $l\geq 2 \quad m_2\geq 1\qquad\qquad\D{H}-\D{H}''>0$ \bigskip \item{(ii)} $ {\rm If}\;l=2 \quad m_2=0 \; \Longrightarrow\quad m_1=l_b^*-2 \quad \D{H}-\D{H}'' \geq -\e l_b^*+\e l_b^*-2\e +2\e =0 \qquad \hbox{because} \;L\geq 1 $ \bigskip \item{(iii)} $ {\rm If}\; l>2 \quad {\rm and}\; m_2=0\;\; \D{H}-\D{H}''=\m(l-2)-\e l_b^* +{\e \over 2}(L+1)m_1+2\e$ $$\hbox{ using }\;\; {\m\over\e}0$$ \bigskip \item{(iv)} $ {\rm If}\; l=1 \quad {\rm and}\; m_2>1 \qquad \D{H}-\D{H}''>-\m+\m +{\e \over 2}(L+1)(m_1-m_2)+2\e>0 $ \bigskip \item{(v)} $ {\rm If}\;m_2=1=l_b^*-l_1 \;{\rm and}\; l=1 \quad\Longrightarrow\;l_1=l_b^*-1 \; {\rm and}\;\;l_1'=2 \; {\rm and}\; m_1=l_b^*-2$ $$\D{H}-\D{H}''=-\m+{\e \over 2}(L+1)(l_b^*-3)+2\e\Eq (4.29)$$ \bigskip \item{(${\rm v}_a$)} $ {\rm If}\; l=1 \; {\rm and}\; m_2=1 \; {\rm and}\; L=1$. This can be seen in Fig. 4.4 (a) \par \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.5truecm,0.5truecm> \setplotarea x from 0 to 23, y from 0 to 11 \putrectangle corners at 0 9 and 5 0 \plot 0 2 3 2 / \plot 4 1 5 1 / \plot 3 0 3 2 / \plot 4 1 4 9 / \put {$x$} at 3.5 1.5 \put {$L=1$} at 6.5 0.5 \put {$m_2=1$} at 4 9.5 %\put {${\cal L}_1$} at 9 8.5 %\put {${\cal L}_1$} at 9 0.5 %\put {${\cal L}_2$} at 9 1.5 \putrectangle corners at 13 9 and 18 0 \plot 17 0 17 4 / \plot 13 4 17 4 / \put {$x$} at 17.5 3.5 \put {$l=1$} at 16 4.5 \put {$m_2=0$} at 17 9.5 \put {${\cal L}_1$} at 22 8.5 \put {${\cal L}_1$} at 22 0.5 \put {${\cal L}_2$} at 22 3.5 \put {\smbfb \quad Fig. 4.4 } at 10 13 \put {(a)} at 2.5 11 \put {(b)} at 16 11 \endpicture \hss\egroup \endinsert This configuration is not supercritical and then it does not belong to $\partial {\cal G}$. We have then to go back to the original configuration that we had before intersecting with $R^*$, taking into account that it was consisting of two subcritical but stable rectangles. The cases of minimal energy are the ones in which the smaller rectangle in Fig. 4.4 is replaced by a $2\times 3$ rectangle. We get a strictly positive value of $\D H-\D H''$ as it easily follows from a direct computation.\par \bigskip \item{(${\rm v}_b$)} ${\rm If}\;l=1 \;{\rm and}\; m_2=1 \;{\rm and}\; L\geq 3$ $$ \D{H}-\D{H}''\geq -\m+2\e\; (l_b^*-3)+2\e>+\m-4\e\geq 0 \quad\hbox{if}\quad \m\geq 4\e\Eq (4.30)$$ If $l_b^* =4$ and $L = 3$ $ \; \D {H}-\D {H}''=-\m+4\e>0$ if $\m-4\e < 0$ \bigskip \item{(vi)} If $l=1 \;{\rm and}\; m_2=0 \quad\Longrightarrow\quad l_1'=1$. Also this configuration, shown in Fig. 4.4(b), is subcritical. \par \par $\bullet\;\bullet$ If ${C}^{(0)}$ contains $q(x)$ and only one cluster $\r$, let $R=R(\r)$ be its rectangular envelope; there are three possibilities: \item{1)} $R$ is stable and $q(x)$ belongs to a strip ${s}_a$ or ${s}_b$ of R.\par \item{2)} $R$ is stable and $q(x)$ belongs to a column ${c}_l$ or ${c}_r$ of R.\par \item{3)} $R$ has one row in ${\cal L}_1$ and the other in ${\cal L}_2$.\par $\r$ is subcritical, but after a spin-flip at $x$ it gets out of $G$.\par In case 1) ${R}(\r)$ must coincide with ${R}^*$; if for example $x$ belongs to ${s}_t \cap {\cal L}_1$, then $\r^{(x)}$ is what we called ${\cal P}_{I,b}$ (see Fig. 2.2 (b), 4.5 (a) ) \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.5true cm,0.5truecm> \setplotarea x from 0 to 23, y from 0 to 13 \putrectangle corners at 0 9 and 6 0 \plot 5 9 5 11 / \plot 5 11 4 11 / \plot 4 11 4 9 / \plot 4 9 0 9 / \putrectangle corners at 3 10 and 4 9 \putrectangle corners at 15 9 and 21 0 \plot 20 9 20 11 / \plot 20 11 19 11 / \plot 19 11 19 9 / \plot 19 9 15 9 / \putrectangle corners at 18 11 and 19 10 \setdashes \plot 0 9 0 11 / \plot 0 11 6 11 / \plot 6 9 6 11 / \plot 15 9 15 11 / \plot 15 11 21 11 / \plot 21 9 21 11 / \put {$x$} at 3.5 9.5 \put {${\cal L}_1$} at 23 0.5 \put {${\cal L}_1$} at 23 10.5 \put {$x$} at 18.5 10.5 \put {\smbfb \quad Fig. 4.5 } at 10 15 \put {(a)} at 3 13 \put {(b)} at 18 13 \endpicture \hss\egroup \endinsert if $x\>\in\>{\cal L}_2 \qquad \Longrightarrow\quad \r^{(x)}={\cal P}_{II,b}$ (see Fig. 2.3 (b) 4.5 (b) ). \par In case 2), ${R}(\r)$ can coincide with ${R}^*$; then, if $x\>\in\>{\cal L}_1$, we obtain $\r^{(x)}= {\cal P}_{II,a}$. (see Fig. 2.3 (a), 4.6 (a) ) On the other hand, if $x \in {\cal L}_2$, we obtain $\r^{(x)}={\cal P}_{I,a}$ (see Fig. 2.2 (a) ). If, instead, ${R}(\r)={R}(l_b^*-1,l_h^*)$ $x$ must belong to ${\cal L}_2$ (otherwise $\r^{(x)}$ would not be supercritical), we have a configuration in $\partial G$ with energy larger than $H({\cal P}_{I,a})$ and so it can be disregarded. (see Fig. 4.6 (b) ).\par \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.5true cm,0.5truecm> \setplotarea x from 0 to 32, y from 0 to 13 \plot 0 0 6 0 / \plot 0 0 0 11 / \plot 6 0 6 1 / \plot 6 1 5 1 / \plot 5 1 5 11 / \plot 5 11 0 11 / \putrectangle corners at 5 3 and 6 2 \putrectangle corners at 12 11 and 17 0 \putrectangle corners at 17 2 and 18 1 \plot 24 0 24 11 / \plot 24 0 30 0 / \plot 30 0 30 9 / \plot 30 9 29 9 / \plot 29 9 29 10 / \plot 29 10 27 10 / \plot 27 10 27 9 / \plot 27 9 24 9 / \putrectangle corners at 28 11 and 29 10 \setdashes \putrectangle corners at 0 11 and 6 0 \putrectangle corners at 12 11 and 18 0 \putrectangle corners at 24 11 and 30 0 \put {$x$} at 5.5 2.5 \put {$x$} at 17.5 1.5 \put {${\cal L}_1$} at 31.5 0.5 \put {${\cal L}_1$} at 31.5 10.5 \put {$x$} at 28.5 10.5 \put {\smbfb \quad Fig. 4.6 } at 15 15 \put {(a)} at 4 13 \put {(b)} at 15 13 \put {(c)} at 27 13 \endpicture \hss\egroup \endinsert $$\D{H}={H}(\r^{(x)})-{H}({R}^*)=\e\>(l_b^*-2)+2h_1>\D{H}'$$ In case 3), ${R}(\r)$ must coincide with ${R}(l_b^*,l_h^*-1)$ and $\r$ must contain a $2\times 1$ rectangular protuberance in $s_t$; the minimal energy, in this case is reached when $\r^{(x)}={\cal P}_{I,b}$. Moreover $x$ must belong to ${\cal L}_1$, so we obtain a configuration as the one shown in Fig. 4.6 (c). \par \bigskip {\bf 2. ${\cal N}(\r({C}^{(0)}))$is subcritical} \par Let $\bar\r_1^{(\s)},\ldots,\bar\r_l^{(\s)}$ be the clusters not involved in the construction of ${C}^{(0)}$. From ${C}^{(0)},\;\bar\r_1^{(\s)},\ldots,\bar\r_l^{(\s)}$ we contruct by iteration the set of ${\cal C}_j^{(r)}$ of $r$-th generation. For every generatione $r$ we get a chain say ${\cal C}_1^{(r)}$ containing $q(x)$, and certain subset of $\bar\r_1^{(\s)},\ldots,\bar\r_l^{(\s)}$. The other chains ${\cal C}_j^{(r)},\; j>1$ contain each just one quasi-rectangle from those among $\bar\r_1^{(\s)},\ldots,\bar\r_l^{(\s)}$ that have not appeared in ${\cal C}_1^{(p)},\; p\leq r$ in the preceding steps. Clearly at the final step we have ${\cal C}_1^{(f)}= \bar\r_j^{(\z)}=\tilde\z\;$ namely the unique supercritical quasi-rectangle in $\tilde\z$. Let $p$ be the order such that $\r({\cal C}_1^{(p)})$ is subcritical but $\r({\cal C}_1^{(p+1)})$ is supercritical. \par Now, starting from $ {\cal C}_1^{(p)}$, we construct $ {\cal C}_1^{(p+1)}$ using a different procedure. Let $\x_1,\ldots,\x_q$ be the quasi-rectangles that we unite to $\r\bigl( {\cal C}_1^{(p)}\bigr)$ to obtain $ {\cal C}_1^{(p+1)}$; we join them in the lexicografic order of the top left corner. We consider $\r\Bigl(\r\bigl( {\cal C}_1^{(p)}\bigr)\cup\x_1\Bigr)$; if this is subcritical we continue this procedure, otherwise we stop it. However there exists an index $j$ for which the procedure ends i.e. such that $$\r\Bigl(\r\bigl( {\cal C}_1^{(p)}\bigr)\cup\x_1 \cup \ldots\cup\x_j\Bigr)\qquad \hbox{is subcritical, but}$$ $$\r\Bigl(\r\bigl( {\cal C}_1^{(p)}\bigr)\cup\x_1 \cup \ldots\cup\x_{j+1}\Bigr)\qquad \hbox{is supercritical.}$$ We call $\tilde\x_1=\r\Bigl(\r\bigl( {\cal C}_1^{(p)}\bigr)\cup \x_1 \cup\ldots\cup\x_j\Bigr)$ and $\tilde\x_2=\x_{j+1}$, therefore ${\cal N}(\r(\tilde\x_1\cup\tilde\x_2))$ is supercritical and so it must contain a critical rectangle ${R}^*$. This ${R}^*$ can be chosen so that if we set: $$\cases{\r_1=\tilde\x_1\cap {R}^*\cr \r_2=\tilde\x_2\cap {R}^* \cr} \qquad {\rm we }\;{\rm have} \qquad \r(\r_1 \cup \r_2)= {R}^* . \Eq (4.30')$$ Since the $\tilde \x_i$'s are subcritical we certaily decrease the energy by substituting the $\r_i$'s to the $\tilde \x_i$'s. If $\r_1$ and $\r_2$ are still interacting rectangles we can forget about the portion of $\tilde \x_i$ lying outside $R^*$ and replace $\tilde \x_i$ with $\r_i$ still remaining in $\partial {\cal G}$.\par We know that $\tilde\x_1$ and $\tilde\x_2$ are two interacting clusters; so one of the following four situations can take place: \item{1)} the rectangular envelopes intersect each other. \par \item{2)} There exists $y$ belonging to ${\cal L}_1$ such that $q(y)$ intersects the rectangles $R(\tilde \x_1)$ and $R(\tilde \x_2)$ on two vertical sides.\par \item{3)} There exists $y$ in ${\cal L}_1$ such that $q(y)\cap \big( R(\tilde \x_1) \cup R(\tilde \x_2) \big)$ is given by two horizontal sides. \item{4)} There exists $y$ in ${\cal L}_2$ such that $q(y)\cap \big( R(\tilde \x_1) \cup R(\tilde \x_2) \big)$is given by two horizontal segments; moreover supposing that $R(\tilde \x_1)$ lies over $R(\tilde \x_2)$ we have: $$\r(\tilde \x_1)\cap R(\tilde \x_1)=s_b \big( R(\tilde \x_1)\big) \quad{\rm and}\quad \r(\tilde \x_2)\cap R(\tilde \x_2)=s_t \big( R(\tilde \x_2)\big)$$ where both $R(\tilde \x_1)$ and $R(\tilde \x_2)$ cannot be ephemere (and so ${\cal N}(\tilde \x_1)$ and ${\cal N}(\tilde \x_2)$ must contain ${R}(l_1^*, l_2^*)$).\par\medskip If the rectangles have non-empty intersection, (case 1) )we can make odd and even horizontal translations and (only) even vertical translations until they intersect each others, but without having any common site. After the translations we can obtain two different types of clusters, that intersect only along two sides, and this intersection is of length one or two. In both cases we obtain: $$\D{H}={H}(\r_1)+{H}(\r_2)-{H}({R}^*) \geq 2J\geq\D{H}' .\Eq (4.31)$$ It is easily seen that we have only the following two possibilities: \item{i)} For all $R^*$ satisfying \equ (4.30'): $\r_1$ and $\r_2$ start and end in rows in ${\cal L}_1$.\par \item{ii)} For all $R^*$ satisfying \equ (4.30'): $\r_1$ starts on a row in ${\cal L}_1$ and ends on a row in ${\cal L}_2$ and conversely for $\r_2$.\par We will see that the most delicate case is 4), i) where some detailed analysis will be needed; in all the other cases very crude estimates will be sufficient. \par \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.4truecm,0.4truecm> \setplotarea x from 0 to 33, y from 0 to 17 \putrectangle corners at 0 15 and 8 0 \putrectangle corners at 0 15 and 4 6 \putrectangle corners at 5 7 and 8 0 \putrectangle corners at 21 15 and 29 0 \putrectangle corners at 21 15 and 25 7 \putrectangle corners at 26 10 and 29 0 \setdashes \plot 25 0 25 7 / \plot 26 10 26 15 / \plot 4 0 4 6 / \plot 5 7 5 15 / \put {$l_1$} at 2 14.5 \put {$l_2$} at 1 11.5 \put {$l_2'$} at 5.5 4.5 \put {$l_1'$} at 6.5 7.5 \put {${\cal L}_1$} at 12 14.5 \put {${\cal L}_1$} at 12 0.5 \put {${\cal L}_1$} at 12 6.5 \put {$l_1$} at 23 14.5 \put {$l_2$} at 22 11.5 \put {$l_2'$} at 26.5 3.5 \put {$l_1'$} at 27.5 8.5 \put {${\cal L}_1$} at 33 14.5 \put {${\cal L}_1$} at 33 0.5 \put {${\cal L}_1$} at 33 8.5 \put {${\cal L}_2$} at 33 7.5 \put {${\cal L}_2$} at 33 9.5 \put {\smbfb \quad Fig. 4.7 } at 17 19 \put {(a)} at 5 17 \put {(b)} at 25 17 \endpicture \hss\egroup \endinsert In case 2), i) we decrease the energy still remaining in $\partial {\cal G}$ by supposing $\r_1$ and $\r_2$ to be rectangles. Let $l=l_2+l_2'-l_h^*$. The energy is minimal for $l=1$, but in any case the column between $\r_1$ and $\r_2$ is empty (see Fig. 4.7 (a) ). $$\D{H}\geq h_1 +{\e\over 2}(l_h^*-1)=h_1+\e\>(l_b^*-1)> \D{H}'.\Eq (4.32)$$ In case 2), ii) there exists at least one site $y$, belonging to ${\cal L}_1$, such that $q(y)$ intersects both R$(\r_1)$ and ${R}(\r_2)$. So if we define $l=l_2+l_2'-l_h^*$, then $l$ has to be $\geq 3$. If $l=3$ (see Fig. 4.7 (b)) the configuration is of minimal energy. \par In any case the column between the two rectangles is empty. We get: $$\D{H}\geq h_1 +{\e\over 2}(l_h^*-3) +2\m>\; \D{H}'.$$ \par In case 3), ii), since the rectangles are interacting along two strips belonging to ${\cal L}_2$, the energy is minimal if $\r_1 \cap s_b(R(\r_1))$ contains only one site $z_1$ and, similarly $\r_2 \cap s_b(R(\r_2))$ contains only one site $z_2$. So it is enough to consider this last case. (see Fig. 4.8 (a) )\par \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.4truecm,0.4truecm> \setplotarea x from 0 to 33, y from 0 to 17 \putrectangle corners at 0 15 and 8 0 \putrectangle corners at 0 15 and 5 7 \putrectangle corners at 4 6 and 8 0 \putrectangle corners at 21 15 and 29 0 \putrectangle corners at 21 15 and 27 6 \putrectangle corners at 24 5 and 29 0 \setdashes \plot 0 8 4 8 / \plot 5 5 8 5 / \plot 4 7 4 8 / \plot 5 5 5 6 / \put {$l_1$} at 2 14.5 \put {$l_2$} at 1 11.5 \put {$l_1'$} at 6 0.5 \put {$l_2'$} at 4.5 3.5 \put {${\cal L}_1$} at 12 14.5 \put {${\cal L}_1$} at 12 0.5 \put {${\cal L}_1$} at 12 6.5 \put {${\cal L}_2$} at 12 5.5 \put {${\cal L}_2$} at 12 7.5 \put {$l_1$} at 24 14.5 \put {$l_2$} at 22 11.5 \put {$l_1'$} at 26.5 0.5 \put {$l_2'=L$} at 31 3 \put {$m_1$} at 22.5 0.5 \put {$m_2$} at 28.5 16 \put {$l$} at 25.5 7 \put {${\cal L}_1$} at 33 14.5 \put {${\cal L}_1$} at 33 0.5 \put {${\cal L}_2$} at 33 5.5 \put {\smbfb \quad Fig. 4.8 } at 17 19 \put {(a)} at 4 17.5 \put {(b)} at 25 17.5 \endpicture \hss\egroup \endinsert $$\D{H}> h_1 +\e(l_b^*-1) >\; \D{H}'.$$ In case 4),i), we can find an $R^*$ satisfying \equ (4.30') in such a way that the corresponding $\r_1$ and $\r_2$ are interacting if and only if each of them contains a rectangle $R(l_1^*,l_2^*)$ namely: $$2l_2^* +1\leq l_h^* \qquad\iff\qquad 2l_1^*\leq\>l_b^* \Eq (4.33)$$ This condition is indeed a condition on the parameters $h_1,h_2$.\par We say that our model for given values of parameters $h_1,h_2$ is {\it reducible} if for those values of $h_1,h_2$ condition \equ (4.33) (condition of reducibility) is satisfied.\par In any case we further decrease the energy by supposing that $\r_1$ and $\r_2$ are stable rectangles. \par \bigskip Now we are going to partition region I$\cup$II of the space of parameters into several regions mainly using the criterion of reducibility.\par We will write: $$ {\rm I} \cup {\rm II} = {\rm I}^{'} \cup {\rm I}^{''} \cup {\rm I}^{'''} \cup {\rm II}^{'}_a \cup{\rm II}^{''}_a \cup {\rm II}^{'''}_a \cup{\rm II}^{'}_b \cup{\rm II}^{''}_b \cup {\rm II}^{'''}_b \Eq (4.33') $$ The various regions appearing in \equ (4.33') are defined in the sequel.\par $$ {\rm I}^{'} := \m > \e, \;h_2 <\m- \e , \;\;\;\; 2l_1^* \leq l_b^*\; \hbox { namely } l_b^* \geq 4 $$ $$ {\rm I}^{''} := \m > \e, \;h_2 <\m- \e , \;\;\;\; 2l_1^* > l_b^* > l_1^*\; \hbox { namely } l_b^* =3 $$ $$ {\rm I}^{'''} := \m > \e, \;h_2 <\m- \e , \;\;\;\; l_1^* \geq l_b^* \; \hbox { namely } l_b^* =2 $$ $$ {\rm II}^{'}_a := \m > \e, \;\m- \e h_2 < \m, \;\;\;\; 2l_1^* \leq l_b^* \hbox { namely } l_b^* \geq 4 $$ $$ {\rm II}^{''}_a := \m > \e, \;\m- \e h_2 < \m, \;\;\;\; 2l_1^* > l_b^* > l_1^* \hbox { namely } l_b^* =3 $$ $$ {\rm II}^{'''}_a := \m > \e, \;\m- \e h_2 < \m, \;\;\;\; l_1^* \geq l_b^* \hbox { namely } l_b^* =2 $$ $$ {\rm II}^{'}_b := \m > \e, \m < h_2, \;\;\;\; 2l_1^* \leq l_b^* \hbox { namely } h_2\leq{3\over 2}\m-2\e -(r-{a\over 2})\e $$ where $$ a=1- {\m\overwithdelims \{\} \e} \quad {\rm and}\qquad r=1- {h_2-\m\overwithdelims \{\} \e}\Eq (4.34) $$ $$ {\rm II}^{''}_b := \m > \e, \m < h_2, \;\;\;\; 2l_1^* > l_b^*, \; l_1^* < l_b^* \hbox { namely } $$ $$ h_2\geq {3\over 2}\m-{3\over 2}\e-(2r-a){\e\over 2}\Eq (4.48) $$ $$ {\rm II}^{'''}_b := \m > \e, h_2 <\m- \e , \;\;\;\; 2l_1^* > l_b^*, \; l_1^* \geq l_b^* $$ Let $$ \z^* = \r_1 \cup \r_2 $$ and denote by $M^{(1)}_{sub}$ the set of $V_1$-stable subcritical minima (sets of non-interacting subcritical rectangles). Since there exists an almost down-hill path\par from our original configuration $\z$ to $\z^*$ and from $\z$ to $M^{(1)}_{sub}$, we have: $$ H(\z) \geq H(S(\z^*, M^{(1)}_{sub})). $$ On the other hand from Proposition 3.3 we get: $$ H(S(\z^*, M^{(1)}_{sub})) \geq V_2 + H(\z^*). \Eq (4.47') $$ Where $$ V_2 := \min \{ h_1,\m\} $$ So to exclude $\z$ from $U(\partial {\cal G})$ it will suffice to show that $$ H(\z^*) + V_2 > H({\cal P}) \Eq (4.47'') $$ Now we are going to prove that in case 4) i) we always have that condition \equ (4.47'') is satisfied . We will use different methods in different regions of the space of parameters corresponding to the partition given by \equ (4.33').\par We first remark that region ${\rm II}^{'''}_b$ (as well as ${\rm I}^{'''},\; {\rm II}^{'''}_a$) can be neglected. Indeed, there, we have $l_1^* \geq l_b^*$ namely there do not exist subcritical non-ephemere rectangles but this is exactly the kind of pairs of rectangles that we wish to consider in case 4) i).\par It will turn out that in regions ${\rm I}^{'}, {\rm II}^{'}_a$ one can easily show that $H(\z^*) > H({\cal P})$ so that only in regions ${\rm II}^{'}_b$ ,${\rm II}^{''}_b$ we really need the more refined argument leading to the sufficient condition \equ (4.47'') to show that $H(\z) > H({\cal P})$. Finally the only irreducible cases in which condition \equ (4.33) is not satisfied are ${\rm I}^{''},\;{\rm II}^{''}_a \hbox{ and } {\rm II}^{''}_b$ which then requires a different argument w.r.t. all the other cases: 1), 2), 3) and 4) i), (${\rm I}^{'} \cup {\rm II}^{'}_a \cup{\rm II}^{'}_b$).\par \bigskip We first state an easy result useful in our computations:\par \bigskip {\bf 4.3 Proposition }\par {\it Suppose $l_1^* -h_2+\m+2\e (l_b^*-2)>0\Eq (4.41')$$ In region II we have: $$\D{H}_1-\D{H}''=-h_2+\e l_1^* l_b^*+\e l_1^*(l_b^*-2l_1^*+1)-\e(l_b^*-2)\Eq (4.43)$$ \medskip \noindent It becomes in ${\rm II}^{'}_a$ where $l_1^* = 2,\; l_b^*\geq 4 \hbox { and } \m > h_2$ $$ = -h_2+\e l_b^* + 2\e (l_b^* - 2) > - \m + 3\e l_b^* - 4\e > 0.$$ In region ${\rm II}^{'}_b$, using $h_2\leq {3\over 2}\m - {3\over 2}\e $ \equ (4.43) becomes $$\geq - {3\over 2} \m +{3\over 2} \e +\e (l_1^* -1) l_b^* + \e (l_b^* -2l_1^* +1) l_1^* > {1\over 2} \m +\e l_1^* (l_b^* -2l_1^* +1) > 0 $$ because $l_1^*\geq 3$ and $l_b^* \geq 2l_1^*$. \par Let us now start to analyse the irreducible regions ${\rm I}^{''},\;{\rm II}^{''}_a \hbox { and } {\rm II}^{''}_b$ It is immediately seen that, due to subcriticality of the clusters $\tilde {\x}_1 $ and $\tilde {\x}_2 $, we certainly decrease the energy if we pass to the configuration where $\tilde {\x}_1 $, $\tilde {\x}_2$ are replaced by two interacting rectangles $R(l_1^*,l_2^*)$. This configuration is still in $\partial {\cal G}$ so to proceed it will suffice to compare its energy with $H({\cal P})$. Moreover, since the energy does not change if we make odd or even horizontal translation and (only) even vertical translations and since $ l_b^* +1 \leq 2 l_1^*$ we can translate these rectangles to include their bases inside a rectangle $R^*\equiv R(l_b^*,l_h^*)$ in such a way that only one of them is vertically outside $R^*$ as it is shown in Fig. 4.9. \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.3true cm,0.3truecm> \setplotarea x from 0 to 25, y from 0 to 24 \putrectangle corners at 2 24 and 8 13 \putrectangle corners at 6 12 and 12 1 \setdashes \putrectangle corners at 2 20 and 12 1 \put {${\cal L}_1$} at 0 1.5 \put {${\cal L}_1$} at 0 13.5 \put {${\cal L}_1$} at 0 11.5 \put {${\cal L}_1$} at 0 19.5 \put {${\cal L}_1$} at 0 23.5 \put {$l_1^*$} at 9 2 \put {$l_1^*$} at 5 23 \put {$l_2^*$} at 7 18 \put {$l_2^*$} at 7 7 \put {$l_b^*$} at 4 0 \put {$l_h^*$} at 13 16 \put {$2l_1^*-l=l_b^*$} at 23 16 \put {$1\leq l\leq l_b^*-2$} at 23 13 \put {\smbfb \quad Fig. 4.9 } at 23 0.5 \endpicture \hss\egroup \endinsert The difference between the height of the two rectangles ${\rm R}(l_1^*,l_2^*)$ and $\rm R^*$ is $2l$. Indeed knowing that $l_2^*=2l_1^*-1$ and that $l_h^*=2l_b^*-1$ we have: $$2l_2^*+1-l_h^*=2( 2l_1^*-1)+1-2l_b^*+1=2(2 l_1^*-l_b^*)=2l.\Eq (4.49)$$ From this it follows that $$2{\rm H\>(R}\>(l_1^*,l_2^*)\>)-{\rm H \>(R}^*)=4Jl-\e l l_1^*-h_2+ \m(l-1)+\e(l_b^*-l_1^*) (l_2^* +1-l) \Eq (4.50)$$ Using $l_2^*=2l_1^*-1$ we get: $$ \hbox {r.h.s.of \equ (4.50)} = 4Jl-\e l l_1^*+\m l -2J+\e(l_b^*-l_1^*)(2l_1^*-l) \Eq (4.51)$$ So we finally obtain: $${H}(S(\z^*, M^{(1)}_{sub}))-{H}({\rm R}^*)\geq 4Jl-\e l l_1^*+\m l -2J+\e(l_b^*-l_1^*)(2l_1^*-l) + V_2\Eq (4.52)$$ $${H}(S(\z^*, M^{(1)}_{sub}))-{H}({\cal P}_{II})\geq 4Jl-2J-\e l l_1^*+\m l -\e(l_b^*-2)+\e(l_b^*-l_1^* )(2l_1^*-l)\Eq (4.53)$$ Using $l_b^*-l_1^*=l_1^*-l$ we get $$ \hbox {r.h.s.of \equ (4.53)} = 4Jl-2J+\m l +\e(2l_1^{*^2}+l^2-4l_1^*l-l_b^*+2)$$ In regions ${\rm I}^{''}\;$ and $\;{\rm II}_a^{''}$ the expression in r.h.s. of \equ (4.50) becomes particularly simple and in both cases we get $${H}(S(\z^*, M^{(1)}_{sub}))-{H}({\cal P}) > 0 $$ In region ${\rm II}_b^{''}$ $h_2\geq {3\over 2}\m-{5\over 2}\e$ so the function is always growing, then it is enough to make the computation for $l=1 \Longrightarrow \> 2l_1^*=l_b^*+1$: $${H}(S(\z^*, M^{(1)}_{sub}))-{H}({\cal P}_{II})=2J+{\e\over 2}(l_b^*-3)(l_b^*-1) >0$$ \eop \numsec=5\numfor=1 \vskip 1cm {\bf Section 5. The tube of exit.} \par \vskip 1cm In this Section we briefly describe the set of typical paths followed by our process during its first excursion from $\menouno$ to $\piuuno$ . \par In [OS1], in the general context of reversible Markov chains with transition probabilities small in a large parameter $\b$, the authors give a complete description of the typical features of the first excursion outside a generic cycle $A$ (possibly containing many local equilibria) as well as of the first fall to its bottom $F(A)$. These two phenomena are, in an appropriate sense, related by time reversal because of the reversibility of the dynamics. Let us underline that the peculiar characteristic of these phenomena, when the concerned cycle $A$ contains many local minima, is that generally they involve suitable time fluctuations given by stochastic ``resistance times", typically exponentially long in $\b$, in suitable ``permanence sets". In other words, for instance, contrary to the case in which $A$ contains only one local equilibrium coinciding with its bottom $F(A)$ in the general case the first fall to $F(A)$ does not take place along a rapid downhill path but rather an efficient mechanism involves long waiting times inside suitable subcycles of $A$.\par The results in [OS1] about first exit from a cycle and first fall to the bottom of a cycle can be easily combined to give rise to a complete description of our ``tunnelling" between $\menouno$ and $\piuuno$.\par Let us first consider for our stochastic Ising model the first fall to the bottom of a cycle $A \subset {\cal S}_{\L}$. It is shown in [OS1] that, with probability tending to one as $\b$ tends to infinity, the trajectory of our process starting from a point (configuration) $\s_0 \;\in\; A$ during the first excursion to the bottom $F(A)$ of $A$ belongs to one of the possible {\it standard cascades} emerging from $\s_0$ . A standard cascade emerging from $\s_0$ is a set $\o_0,Q_1,\o_1,Q_2, \dots,\o_{n-1},Q_n, \o_n$, where, for $i=1, \dots, n-1$, $\o_i$ are downhill paths emerging from $\h_i$ and ending inside $ Q_{i+1}$. $\h_0=\s_0$ and $\o_0$ is a downhill path emerging from $\s_0$. If $\m_1$ is its ending point, $Q_1$ is the cycle given by the maximal connected set in ${\cal S}_{\L}$ containing $\m_1$ with energy smaller than $H(S(\m_1,F(A))$ whereas $\h_1\; \in \; \partial Q_1 \cap S(\m_1,F(A))$. Similarly $\o_1$ is a downhill path emerging from $\h_1$; if $\m_2$ is its ending point then $Q_2$ is the cycle given by the maximal connected set in ${\cal S}_{\L}$ containing $\m_2$ with energy smaller than $H(S(\m_2,F(A))$ and so on, up to $Q_n$. Finally $\o_n$ is a downhill path ending in $F(A)$.\par Notice that it may (and it will in our present case) happen that $\o_i\cap ({\cal S}_{\L} \setminus Q_{i+1} )\equiv \o_i\cap\partial Q_{i+1} \equiv \h_i$. \par In [OS1] it is shown that given any $\d >0$, with probability approaching one as $\b \to \infty$ during its first fall to the bottom of a cycle $A$ starting from $\s_0 \in A$ the system follows a path belonging to a standard cascade $\o_0,Q_1,\o_1,Q_2, \dots,\o_{n-1},Q_n, \o_n$ emerging from $\s_0$ spending inside each cycle $Q_i$ a (random) time $T_i$ satisfying: $$ \exp ( [H(\h_i) - H(F(Q_i) - \d)] \b ) \leq T_i \leq \exp ( [H(\h_i) - H(F(Q_i) + \d)] \b ) \Eq (5.1) $$ The set of all the above specified paths (belonging to some standard cascade and satisfying \equ (5.1) ) is called the (typical) {\it $\d$-tube of fall} from $\s_0$ to $F(A)$. It is denoted by ${\cal T} ^{f}_{\d,\s_0}$. Moreover it is shown in [FW], [OS1] that, with a probability $\to 1$ as $\b \to \infty$, the typical point of first exit from a cycle $A$ belongs to the set $U(A)$. Then, using reversibility it is shown that the first excursion from the bottom $F(A)$ of a cycle $A$ to $\partial A$ belongs to the (typical) $\d$-tube of escape ${\cal T} ^{e}_{\d}$; where a path $\o = \s_1, \dots \s_m$ in ${\cal T} ^{e}_{\d}$ is the time reversal of a typical path of fall from $\partial A$ to $F(A)$. More precisely let ${\cal R}$ be the time-reversal operator acting on paths : $$ \tilde \o = \tilde \s_1, \dots \tilde \s_m = {\cal R} \o \Leftrightarrow \ \tilde \s _i = \s_{m-i} $$ we have $\o = \s_1, \dots \s_m \in {\cal T} ^{e}_{\d}$ iff $ \o= {\cal R}\tilde \o$ and $\tilde \s _1 = \h^*, \tilde \s_2 = \s^*,\; (\tilde \s _2, \dots, \tilde \s _m) \in {\cal T} ^{f}_{\d,\s^*}$ with $\h^* \in \partial A$, $\h^*$ downhill connected to $\s^* \in A$.\par Now let $\bar {\cal G}$ be the cycle given by the maximal connected set of configurations containing $\menouno$ with energy smaller than $H({\cal P})$ and let $\widetilde {\cal G}$ be the cycle given by the maximal connected set containing $\piuuno$ with energy smaller than $H({\cal P})$. With a probability approaching one as $\b \to \infty$, the first excursion from $\menouno$ to $\piuuno$ follows an ``up-down" path consisting in an `` ascent path" from $\menouno $ to a configuration $\h$ from ${\cal P}$ and a ``descent path" going from $\h$ to $\piuuno$. These ascent and descent paths are, respectively typical (in the above specified sense) for the first excursion outside $\bar {\cal G}$ and first fall to the bottom of $\widetilde {\cal G}$ given by $F(\widetilde {\cal G}) \equiv \menouno$. The above statement has been given in a precise way for the first time in [S1] for the standard Ising model and in [CO] (see Appendix A therein) in a more general setup. All the arguments developed in [CO] can be applied to our present case as well. We refer the reader to [CO] for more details.\par Consider now $h_1, h_2$ belonging to region I. We want first to concentrate our attention to the description of the ascent path from $\menouno$ to ${\cal P}$. It is clear from the above discussion that all we need is to solve the sequence of variational problems consisting in finding the sequence of saddles $\h_1, \h_2, \dots $ characterizing a generic standard cascade emerging from a generic $\s^* \in \bar {\cal G}$ to which ${\cal P}$ is downhill connected. >From the arguments developed in Section 3 we easily deduce the result. Given a stable rectangle $R(l_1,l_2)$ let $$ {\cal Q} _{l_1,l_2} = {\cal B} (R(l_1,l_2) )\Eq (5.2) $$ (see notation introduced after \equ (3.12'') ). \par Consider the ``fundamental graph" ${\cal V}$ depicted in Fig. 5.1\par \midinsert \line\bgroup\hss \beginpicture \setcoordinatesystem units <0.5true cm,0.5truecm> \setplotarea x from 0 to 30, y from 0 to 14 %\axis bottom / %\axis left / \plot 1 8 9 13 / \plot 14 13 22 8 / \plot 23 8 29 13 / \plot 23 6 29 1 / \plot 1 6 10 1 / \plot 12 1 22 6 / %\putrectangle corners at 3 10 and 4 9 %\setdashes %\putrectangle corners at 0 11 and 6 0 \put {${\cal Q}_{l_b^*-1,\>l_h^*}$} at 11.5 14 \put {${\cal Q}_{l_b^*-1,\>l_h^*-2}$} at 23 7 \put {${\cal Q}_{l_b^*-1,\>l_h^*-2}$} at 11 0.5 \put {$\s_3(l_b^*,l_h^*)$} at 3 11 \put {$\s_4(l_b^*,l_h^*)$} at 3 3 \put {$\s_4(l_b^*-1,l_h^*)$} at 17 11 \put {$\s_3(l_b^*,l_h^*-2)$} at 17 3 \put {$\s_3(l_b^*-1,l_h^*-2)$} at 27 11 \put {$\s_4(l_b^*-1,l_h^*-2)$} at 27 3 \put {\smbfb \quad Fig. 5.1 } at 23 14 \endpicture \hss\egroup \endinsert where $\s_3(l_1,l_2)$, $\s_4(l_1,l_2)$ are depicted in Fig. 3.1\par It is not difficult to deduce from the arguments of proof in Section 3 that the configurations in $\bar {\cal G}$ to which ${\cal P}$ is downhill connected are $\s_3(l_b^*,l_h^*)$, $\s_4(l_b^*,l_h^*)$; moreover a generic standard cascade emerging from $\s_3(l_b^*,l_h^*)$ ($\s_4(l_b^*,l_h^*)$) is given by a one-dimensional oriented graph (chain), obtained as a subgraph of the fundamental graph ${\cal V}$, starting from $\s_3(l_b^*,l_h^*)$ ($\s_4(l_b^*,l_h^*)$), passing through $R(2,3)$ and then following a downhill path made of six steps up to $\menouno$. For instance a possible path is: $$ \s_3(l_b^*,l_h^*),{\cal Q} _{l_b^* -1,l_h^*},\s_4(l_b^*-1,l_h^*), {\cal Q} _{l_b^* -1,l_h^*-2}, \dots, R(2,3), \dots ,\menouno \Eq (5.3) $$ Notice that the possible paths follow canonical or almost canonical shapes : $ l_2 = 2 l_1 -1$. If $h_1,h_2 \in {\rm II}$ we get a very similar result. It suffices to replace $\bar \s _3, \bar \s _4$ to $\s_3, \s _4$ (see Fif. 3.2).\par It also follows from the arguments of Section 3 that the supecritical growth is described by the generalized standard cascade: $$ \prot, \;{\cal Q}_{l_b^*,l_h^*},\;\s_1(l_b^*,l_h^*),\; {\cal Q}_{l_b^*+1,l_h^*},\; \s_1(l_b^*+1,l_h^*), \dots,{\cal Q}_{N ,l_h^*},\; \s_2(N, l_h^*),\;{\cal Q}_{N ,l_h^*+2},\dots$$ $$\dots,\s_2(N,N-2),\piuuno \Eq (5.4).$$ where the part from $\s_1(l_b^*,l_h^*)$ up to $\piuuno$ in \equ (5.4) is nothing but a standard cascade which is typical of the first fall to the bottom $\piuuno$ of $\widetilde {\cal G}$ starting from $\s_1(l_b^*,l_h^*) \in \widetilde {\cal G}$. This mechanism of supercritical growth is very similar to the one which has been found for the anisotropic Ising model (see [KO1]). \numsec=6\numfor=1 \vskip 1cm {\bf Section 6. The other regions of the $h_1,h_2$ plane.} \par \vskip 1cm In this section we want to rapidly discuss the other regions of parameters namely III, IV and V ( see Fig. 2.1).\par First of all we remark that in V $\menouno$ is no more a local minimum so it is only of interest to analyse the transition from $\piumeno$ to $\piuuno$; this will be done also for regions IV, V at the end of this Section. \par It is not difficult to realize that, in regions III, IV, to describe the first excursion from $\menouno$ to $\piuuno$ it is sufficient to observe that: $$ \hbox {in III } \;\;\;\;\;\;V_1 = h_2 \; \leq \; 4J - h_1 \Eq (6.1) $$ whereas $$ \hbox {in IV } \;\;\;\;\;\;V_1 = 4J - h_1 \; \leq \; h_2 \Eq (6.2) $$ In both regions the protocritical droplet for the transition from $\menouno$ to $\piuuno$ is just a unit square $(l_b^* = l_h^* =1)$ belonging to ${\cal L}_1$ for which it is still true that $l_h^* = 2l_b^*-1$ namely it is still of `` canonical shape". We then have, in regions III, IV a result similar to the statement of Theorem 1; but now the global saddle ${\cal P}$ is just a unit square on ${\cal L}_1$ and $H({\cal P})- H(\menouno) = 4J - h_1$. We deduce from \equ (6.1), \equ (6.2) that in region IV during the transition from $\menouno$ to $\piuuno$ we typically visit the configuration $\piumeno$ (we fill the whole ${\cal L}_1$ of pluses before we see any plus in ${\cal L}_2$) whereas in region III we typically do not visit $\piumeno$ before $\piuuno$ (a minus spin in ${\cal L}_2$ with two plus spins in its n.n. sites in ${\cal L}_1$ is likely to flip before an isolated minus in ${\cal L}_1$ flips). We get: $$ \hbox {in III }\;\;\;\;\; {1\over \b} \log \t_{\piuuno} \; \sim \; 4J - h_1, $$ $$ \hbox {in IV }\;\;\;\;\; {1\over \b} \log \t_{\piuuno} \; \sim \; h_2 $$ It also follows from the previous discussion that in regions III, IV and V we have: $$ S(\piumeno,\piuuno) \; \equiv \widetilde {\cal P} $$ where $\widetilde {\cal P}$ is the configuration obtained from $\piumeno$ by flipping a minus spin in ${\cal L}_2$. In other words the critical droplet is just a unit square in ${\cal L}_2$ (microscopic size) and the tipical value for the first hitting time to $\piuuno$ is independent of $\e = h_1 -h_2$ and is given by $$ {1\over \b} \log \t_{\piuuno} \; \sim \; h_2 $$ This corresponds to ``absence of metastability" in the sense that the lifetime of the metastable equilibrium does not diverge as we approach the coexistence line. This is the dynamical counterpart of the expected fact that the concerned coexistence line disappears at positive temperature.\par We want to notice that from the above discussion and from the results of previous Sections it follows that a very peculiar behaviour takes place in the vicinities of the triple point $\widetilde P$. Now it is clear what we announced in the introduction. Given a halfline $r_{\a}$ emerging from $\widetilde P$ lying in the interior of II$\cup$III$\cup$IV forming an angle $\a$ with the horizontal line $ h_2 = 2J$ let $\l$ be the distance from $\widetilde P$ of the generic point $P$ of the line $r_{\a}$. We have that in the whole region III$\cup$IV the protocritical droplet for the transition from $\menouno$ to $\piuuno$ is a unit square in ${\cal L}_1$; given a line $r_{\a}$ in region III ($ 0 < \a < {\p \over 2}$) the protocritical droplet depends only on $\a$ and not on $\l$. Its horizontal size $l_b^*$ runs from $2$ to $\infty$ as $\a$ runs from ${\p \over 2}$ to ${3 \over 4} \p$ (corresponding to the line $h_1 = h_2$) and stays always independent of $\l$. Correspondingly the typical value of ${ 1 \over \b} \log \t_{\piuuno}$ runs from $\min \{ 4J-h_1 , h_2\}$ to $\infty$.\par \bigskip {\bf Aknowledgements} \vskip 1 truecm \par\noindent We want to aknowledge L. Chayes, R.Koteck\'y, E. Scoppola, M. Zahradn\'ik for interesting discussions and in particular J. Fruttero for his contribution to the early stage of this work.\par This work has been partially supported by the grant CHRX-CT93-0411 and CIPA-CT92-4016 of the Commission at European Communities. \vfill\eject \centerline {\bf References.} \vskip 1 truecm \par\noindent \item{[C]} O. Catoni, `` Sharp large deviation estimates for simulated annealing.", Ann. Inst. Henri Poincar\'e, {\bf 27},291,384, (1991) \item{[CGOV]} M.Cassandro, A.Galves, E.Olivieri, M.E.Vares, `` Metastable behaviour of stochastic dynamics: A pathwise approach'', Journ.Stat.Phys. {\bf 35}, 603-634 (1984) \item{[CO]} E. Cirillo, E.Olivieri ``Metastability and nucleation for the Blume-Capel model : different mechanisms of transition ", CARR Preprint,1995, in press on Journ. Stat. Phys. \item{[FW]} M. I. Freidlin, A. D. Wentzell, "Random Perturbations of Dynamical Systems", Springer-Verlag (1984). \item{ [KO1]} R. Kotecky, E. Olivieri, ``Droplet dynamics for asymmetric Ising model'', Journ. Stat. Phys. {\bf 70}, 1121-1148 (1993). \item{ [KO2]} R. Kotecky, E. Olivieri, ``Shapes of growing droplets - a model of escape from a matastable phase'', Journ. Stat. Phys. {\bf 75}, 409-507 (1994). \item{[MOS]} F. Martinelli, E. Olivieri, E. Scoppola, ``Metastability and exponential approach to equilibrium for low temperature stochastic Ising models'', Journ. Stat. Phys. {\bf 61}, N. 5/6 1105 (1990). \item{[N]} F.R. Nardi, ``Laurea" thesis, Math. Dept. II University of Rome, (1995) \item{[NS1]} E. J. Neves, R. H. Schonmann, ``Critical Droplets and Metastability for a Glauber Dynamics at Very Low Temperatures", Comm. Math. Phys. {\bf 137}, 209 (1991). \item{[NS2]} E. J. Neves, R. H. Schonmann, ``Behaviour of droplets for a class of Glauber dynamics at very low temperatures'', Prob. Theor. Rel. Fields {\bf 91}, 331 (1992). \item{[OS1]} E. Olivieri, E. Scoppola, ``Markov chains with exponentially small transition probabilities: First exit problem from a general domain - I. The reversible case'',Journ. Stat. Phys.{\bf 79}, 613-647 (1995) \item{[OS2]} E. Olivieri, E. Scoppola, ``Markov chains with exponentially small transition probabilities: First exit problem from a general domain - II. The general case''. CARR. Preprint, Roma, mp-arc n. 95-423,(1995) \item {[PL1]} O. Penrose, J. L. Lebowitz, "Towards a rigorous molecular theory of metastability." In Fluctuation Phenomena (second edition). E. W. Montroll, J. L. Lebowitz, editors. North-Holland Physics Publishing, (1987). \item {[PL2]} O. Penrose, J. L. Lebowitz, "Molecular theory of metastability: an update." Appendix to the reprinted edition of the article "Towards a rigorous molecular theory of metastability"; by the same authors. In Fluctuation Phenomena (second edition). E. W. Montroll, J. L. Lebowitz, editors. North-Holland Physics Publishing, (1987). \item{[S]} R. H. Schonmann, ``The pattern of escape from metastability of a stochastic Ising model'', Comm. Math. Phys. {\bf 147}, 231-240 (1992). \end