{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} {\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f4\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times;} {\f5\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Helvetica;}{\f6\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}Courier;}{\f7\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Geneva;} {\f8\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Tms Rmn;}{\f9\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Helv;}{\f10\froman\fcharset0\fprq2{\*\panose 00000000000000000000}MS Serif;} {\f11\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}MS Sans Serif;}{\f12\froman\fcharset0\fprq2{\*\panose 00000000000000000000}New York;}{\f13\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}System;} {\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f15\froman\fcharset128\fprq1{\*\panose 00000000000000000000}Mincho{\*\falt ??};}{\f16\fnil\fcharset129\fprq1{\*\panose 00000000000000000000}Batang{\*\falt ??};} {\f17\fnil\fcharset134\fprq2{\*\panose 00000000000000000000}SimSun{\*\falt ??};}{\f18\fnil\fcharset136\fprq2{\*\panose 00000000000000000000}PMingLiU{\*\falt ????};}{\f19\fmodern\fcharset128\fprq1{\*\panose 00000000000000000000}Gothic{\*\falt ?????};} {\f20\fmodern\fcharset129\fprq1{\*\panose 00000000000000000000}Dotum{\*\falt ??};}{\f21\fmodern\fcharset134\fprq1{\*\panose 00000000000000000000}SimHei{\*\falt ??};}{\f22\fmodern\fcharset136\fprq1{\*\panose 00000000000000000000}MingLiU{\*\falt ???};} {\f23\froman\fcharset128\fprq1{\*\panose 00000000000000000000}MS Mincho{\*\falt MS ??};}{\f24\froman\fcharset129\fprq1{\*\panose 00000000000000000000}Gulim{\*\falt ??};} {\f25\fmodern\fcharset128\fprq1{\*\panose 00000000000000000000}MS Gothic{\*\falt MS ????};}{\f26\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Century;}{\f27\fswiss\fcharset0\fprq3{\*\panose 00000000000000000000}Tahoma;} {\f28\froman\fcharset238\fprq2 Times New Roman CE;}{\f29\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31\froman\fcharset161\fprq2 Times New Roman Greek;}{\f32\froman\fcharset162\fprq2 Times New Roman Tur;} {\f33\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f34\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f35\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f36\fswiss\fcharset238\fprq2 Arial CE;}{\f37\fswiss\fcharset204\fprq2 Arial Cyr;} {\f39\fswiss\fcharset161\fprq2 Arial Greek;}{\f40\fswiss\fcharset162\fprq2 Arial Tur;}{\f41\fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f42\fswiss\fcharset178\fprq2 Arial (Arabic);}{\f43\fswiss\fcharset186\fprq2 Arial Baltic;} {\f44\fmodern\fcharset238\fprq1 Courier New CE;}{\f45\fmodern\fcharset204\fprq1 Courier New Cyr;}{\f47\fmodern\fcharset161\fprq1 Courier New Greek;}{\f48\fmodern\fcharset162\fprq1 Courier New Tur;}{\f49\fmodern\fcharset177\fprq1 Courier New (Hebrew);} {\f50\fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f51\fmodern\fcharset186\fprq1 Courier New Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0; \red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red255\green255\blue255; }{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\s1\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 1;}{\s2\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 2;}{ \s3\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 3;}{\s4\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 4;}{\s5\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 5;}{\s6\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 6;}{\s7\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 7;}{ \s8\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 8;}{\s9\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}}{\*\revtbl {Unknown;}}{\info{\title Users' Guide to NetSolve V1}{\author laura susan blackford}{\operator laura susan blackford}{\creatim\yr2001\mo7\dy27\hr14\min53} {\revtim\yr2001\mo7\dy27\hr14\min53}{\version2}{\edmins1}{\nofpages152}{\nofwords32992}{\nofchars188060}{\*\company UT}{\nofcharsws230950}{\vern8269}}\margl1440\margr1440\margb1920 \facingp\widowctrl\ftnbj\aenddoc\notabind\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\hyphauto1\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\nolnhtadjtbl \fet0\sectd \linex0\headery0\footery0\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}} {\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8 \pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \ql \li0\ri0\sl20\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \par }\pard \qc \li0\ri0\sb448\sl776\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\b\f1\fs59\lang1024\langfe1024\noproof Users' Guide to NetSolve V1.4 \par }\pard \qc \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\b\f1\fs49\lang1024\langfe1024\noproof (http://icl.cs.utk.edu/netsolve/) \par }\pard \ql \li0\ri0\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\lang1024\langfe1024\noproof \~ \par }\pard \qc \li0\ri0\sb2389\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\b\f1\fs41\lang1024\langfe1024\noproof Dorian Arnold \par }\pard \qc \li0\ri0\sb259\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\b\f1\fs41\lang1024\langfe1024\noproof Sudesh Agrawal \par Susan Blackford \par Jack Dongarra \par Michelle Miller \par Kiran Sagi \par Zhiao Shi \par Sathish Vadhiyar \par }\pard \qc \li0\ri0\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\b\f1\fs28\lang1024\langfe1024\noproof Innovative Computing Laboratory, Department of Computer Science, University of Tennessee \par }\pard \qc \li0\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\b\f1\fs28\lang1024\langfe1024\noproof Knoxville, TN 37996-3450 \par \sect }\sectd \linex0\headery0\footery0\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}\pard\plain \ql \li0\ri0\sl20\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \par }\pard \ql \li0\ri0\sl-240\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\b\f1\fs20\lang1024\langfe1024\noproof Users' Guide to NetSolve V1.4: (http://icl.cs.utk.edu/netsolve/) \par }\pard \ql \li0\ri0\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\fs20\lang1024\langfe1024\noproof by\~Dorian Arnold, Sudesh Agrawal, Susan Blackford, Jack Dongarra, Michelle Miller, Kiran Sagi, Zhiao Shi, and Sathish Vadhiyar \par }\pard \ql \li0\ri0\sb312\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\fs20\lang1024\langfe1024\noproof version 1.4\~Edition \par }\pard \ql \li0\ri0\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\fs20\lang1024\langfe1024\noproof Copyright\~\'a9\~1995-2001 by The NetSolve Project, University of Tennessee \par }\pard \ql \li0\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\b\fs20\lang1024\langfe1024\noproof Legal Restrictions \par }\pard \ql \li0\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\b\f1\fs20\lang1024\langfe1024\noproof Allowed Usage:}{\fs20\lang1024\langfe1024\noproof Users may use NetSolve in any capacity they wish. We only ask that proper credit and citations be used when the NetSolve system is being leveraged in other software systems. \par }{\b\f1\fs20\lang1024\langfe1024\noproof Redistribution:}{\fs20\lang1024\langfe1024\noproof Users are allowed to freely distribute the NetSolve system in unmod ified form. At no time is a user to accept monetary or other compensation for redistributing parts or all of the NetSolve system. \par }{\b\f1\fs20\lang1024\langfe1024\noproof Modification of Code:}{\fs20\lang1024\langfe1024\noproof Users are free to make whatever changes they wish to the NetSolve system to suit their personal needs. We mandate, however, that you clearly highlight which portions are of the original system and which are a result of the third-party modification. \par }{\b\f1\fs20\lang1024\langfe1024\noproof Warranty Disclaimer:}{\fs20\lang1024\langfe1024\noproof USER ACKNOWLEDGES AND AGREES THAT: (A) NEITHER THE NetSolve TEAM NOR THE BOARD OF REGENTS OF THE UNIVERSITY OF TENNESSEE SYSTEM (REGENTS) MAKE ANY REPRESENTATIONS OR WARRANTIES WHATSOEVER ABOUT THE SUITABILITY OF NetSolve FOR ANY PURPOSE; (B) NetSolve IS PROVIDED ON AN "AS IS, WITH ALL DEFECTS" BASIS WITHOUT EXPRESS OR IMPLIED WARRANTIES, INCLUD I NG WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT; (C) NEITHER THE NetSolve TEAM NOR THE REGENTS SHALL BE LIABLE FOR ANY DAMAGE OR LOSS OF ANY KIND ARISING OUT OF OR RESULTING FROM USER'S POSSESSION OR USE OF NetSolv e (INCLUDING DATA LOSS OR CORRUPTION), REGARDLESS OF WHETHER SUCH LIABILITY IS BASED IN TORT, CONTRACT, OR OTHERWISE; AND (D) NEITHER THE NetSolve TEAM NOR THE REGENTS HAVE AN OBLIGATION TO PROVIDE DEBUGGING, MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS EXCEPT WHERE EXPLICIT WRITTEN ARRANGEMENTS HAVE BEEN PRE-ARRANGED. \par }{\b\f1\fs20\lang1024\langfe1024\noproof Damages Disclaimer:}{\fs20\lang1024\langfe1024\noproof USER ACKNOWLEDGES AND AGREES THAT IN NO EVENT WILL THE NetSolve TEAM OR THE REGENTS BE LIABLE TO USER FOR ANY SPECIAL, CONSEQUENTIAL, INDIRECT OR SIMILAR DA MAGES, INCLUDING ANY LOST PROFITS OR LOST DATA ARISING OUT OF THE USE OR INABILITY TO USE NetSolve EVEN IF THE NetSolve TEAM OR THE REGENTS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. \par }{\b\f1\fs20\lang1024\langfe1024\noproof Attribution Requirement:}{\fs20\lang1024\langfe1024\noproof User agrees that any reports, publica tions, or other disclosure of results obtained with NetSolve will attribute its use by an appropriate citation. The appropriate reference for NetSolve is "The NetSolve Software Program (NetSolve) was developed by the NetSolve Team at the Computer Science Department of the University of Tennessee, Knoxville. All rights, title, and interest in NetSolve are owned by the NetSolve Team." \par }{\b\f1\fs20\lang1024\langfe1024\noproof Compliance with Applicable Laws:}{\fs20\lang1024\langfe1024\noproof User agrees to abide by copyright law and all other applicable laws of the United States including, but not limited to, export control laws. \par \sect }\sectd \pgnrestart\pgnlcrm\linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof Table of Contents \par }\pard\plain \ql \fi-480\li1440\ri0\sb249\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1440\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\field{\*\fldinst {\b\f1\fs49\lang1024\langfe1024\noproof HYPERLINK \\l _61 } {\b\f1\fs49\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000040000005f00360031000000}}}{\fldrslt {\b\lang1024\langfe1024\noproof Preface}}}{\b\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \b\lang1024\langfe1024\noproof HYPERLINK \\l _61 }{\b\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000040000005f00360031000000}}}{\fldrslt {\field{\*\fldinst {\b\lang1024\langfe1024\noproof PAGEREF _61} }{\fldrslt {\b\lang1024\langfe1024\noproof i}}}}}{\b\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sb48\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\b\lang1024\langfe1024\noproof HYPERLINK \\l ID_WHO}{\b\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000008000000490044005f00570048004f0023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 1. Who Should Read This Document}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l ID_WHO}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000008000000490044005f00570048004f0023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_WHO}}{\fldrslt {\lang1024\langfe1024\noproof i}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ORGANIZATION}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000011000000490044005f004f005200470041004e0049005a004100540049004f004e0023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 2. Organization of This Document}}}{\lang1024\langfe1024\noproof \tab } {\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ORGANIZATION}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000011000000490044005f004f005200470041004e0049005a004100540049004f004e0023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_ORGANIZATION}}{\fldrslt {\lang1024\langfe1024\noproof i} }}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CONVENTIONS}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f0043004f004e00560045004e00540049004f004e00530023000000}} }{\fldrslt {\lang1024\langfe1024\noproof 3. Document Conventions}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CONVENTIONS}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f0043004f004e00560045004e00540049004f004e00530023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_CONVENTIONS}}{\fldrslt {\lang1024\langfe1024\noproof ii}}}}} {\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_REQUEST}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f00520045005100550045005300540023000000}}}{\fldrslt { \lang1024\langfe1024\noproof 4. Request for Comments}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_REQUEST}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f00520045005100550045005300540023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_REQUEST}}{\fldrslt {\lang1024\langfe1024\noproof iii}}}}}{ \lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1440\ri0\sb48\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1440\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _185 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003100380035000000}}}{\fldrslt {\b\lang1024\langfe1024\noproof I. Introduction}}}{\b\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\b\lang1024\langfe1024\noproof HYPERLINK \\ l _185 }{\b\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003100380035000000}}}{\fldrslt {\field{\*\fldinst {\b\lang1024\langfe1024\noproof PAGEREF _185}}{\fldrslt {\b\lang1024\langfe1024\noproof 4} }}}}{\b\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sb48\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\b\lang1024\langfe1024\noproof HYPERLINK \\l ID_NETSOLVE}{\b\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d000000490044005f004e004500540053004f004c005600450023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 1. A NetSolve Overview}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l ID_NETSOLVE}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d000000490044005f004e004500540053004f004c005600450023000000}}}{\fldrslt {\field{\*\fldinst { \lang1024\langfe1024\noproof PAGEREF ID_NETSOLVE}}{\fldrslt {\lang1024\langfe1024\noproof 1}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _189 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003100380039000000}}}{\fldrslt {\lang1024\langfe1024\noproof 1.1. An Introduction to Distributed Computing}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l _189 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003100380039000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _189} }{\fldrslt {\lang1024\langfe1024\noproof 1}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _193 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003100390033000000}}}{\fldrslt {\lang1024\langfe1024\noproof 1.2. What is NetSolve?}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _193 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003100390033000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _193}}{\fldrslt {\lang1024\langfe1024\noproof 1}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2880\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2880\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _198 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003100390038000000}}}{\fldrslt {\lang1024\langfe1024\noproof 1.2.1. Background}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1 98 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003100390038000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _198}}{\fldrslt {\lang1024\langfe1024\noproof 1}}}}}{ \lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _208 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003200300038000000}}}{\fldrslt {\lang1024\langfe1024\noproof 1.2.2. Overview and Architecture}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _208 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003200300038000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _208}}{\fldrslt {\lang1024\langfe1024\noproof 2}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _247 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003200340037000000}}}{\fldrslt {\lang1024\langfe1024\noproof 1.3. Who is the NetSolve User?}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _247 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003200340037000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _247}}{\fldrslt { \lang1024\langfe1024\noproof 3}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _253 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003200350033000000}}}{\fldrslt {\lang1024\langfe1024\noproof 1.4. The Status of NetSolve}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _253 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003200350033000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _253}}{\fldrslt {\lang1024\langfe1024\noproof 4}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_RELATED}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f00520045004c00410054004500440023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 2. Related Projects and Systems}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l ID_RELATED}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f00520045004c00410054004500440023000000}}}{\fldrslt {\field{\*\fldinst { \lang1024\langfe1024\noproof PAGEREF ID_RELATED}}{\fldrslt {\lang1024\langfe1024\noproof 5}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1440\ri0\sb48\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1440\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _310 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003300310030000000}}}{\fldrslt {\b\lang1024\langfe1024\noproof II. The User's Manual}}}{\b\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\b\lang1024\langfe1024\noproof HYPERLINK \\l _310 }{\b\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003300310030000000}}}{\fldrslt {\field{\*\fldinst {\b\lang1024\langfe1024\noproof PAGEREF _310}}{\fldrslt { \b\lang1024\langfe1024\noproof 7}}}}}{\b\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sb48\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\b\lang1024\langfe1024\noproof HYPERLINK \\l ID_CLIENT_45_INSTALL}{\b\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000016000000490044005f0043004c00490045004e0054005f00340035005f0049004e005300540041004c004c0023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 3. Downloading, Installing, and Testing the Client}}}{ \lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CLIENT_45_INSTALL}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000016000000490044005f0043004c00490045004e0054005f00340035005f0049004e005300540041004c004c0023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_CLIENT_45_INSTALL}}{\fldrslt { \lang1024\langfe1024\noproof 8}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_DOWNLOADING}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f0044004f0057004e004c004f004100440049004e00470023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 3.1. Installation on Unix Systems}}}{\lang1024\langfe1024\noproof \tab } {\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_DOWNLOADING}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f0044004f0057004e004c004f004100440049004e00470023000000 }}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_DOWNLOADING}}{\fldrslt {\lang1024\langfe1024\noproof 8}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CLIENT_45_TESTING}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000016000000490044005f0043004c00490045004e0054005f00340035005f00540045005300540049004e00470023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 3.2. Testing the Unix installation}}}{ \lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CLIENT_45_TESTING}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000016000000490044005f0043004c00490045004e0054005f00340035005f00540045005300540049004e00470023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_CLIENT_45_TESTING}}{\fldrslt { \lang1024\langfe1024\noproof 12}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CLIENT_45_WIN32}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000014000000490044005f0043004c00490045004e0054005f00340035005f00570049004e003300320023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 3.3. Installation on Windows systems}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CLIENT_45_WIN32}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000014000000490044005f0043004c00490045004e0054005f00340035005f00570049004e003300320023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_CLIENT_45_WIN32}}{\fldrslt { \lang1024\langfe1024\noproof 12}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _444 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003400340034000000}}}{\fldrslt {\lang1024\langfe1024\noproof 3.4. Testing the Windows installation}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _444 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003400340034000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _444}}{\fldrslt {\lang1024\langfe1024\noproof 13}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2880\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2880\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _473 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003400370033000000}}}{\fldrslt {\lang1024\langfe1024\noproof 3.4.1. Using NetSolve from Windows Matlab}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l _473 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003400370033000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _473} }{\fldrslt {\lang1024\langfe1024\noproof 14}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _507 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003500300037000000}}}{\fldrslt {\lang1024\langfe1024\noproof 3.4.2. Using the NetSolve Management Tools in Windows}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _507 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003500300037000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _507}}{\fldrslt {\lang1024\langfe1024\noproof 14}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CLIENT_45_INTRO}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000014000000490044005f0043004c00490045004e0054005f00340035005f0049004e00540052004f0023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 4. Introduction to the NetSolve Client}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CLIENT_45_INTRO}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000014000000490044005f0043004c00490045004e0054005f00340035005f0049004e00540052004f0023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_CLIENT_45_INTRO}}{\fldrslt { \lang1024\langfe1024\noproof 16}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_PROBLEMSPECIFICATION}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000019000000490044005f00500052004f0042004c0045004d00530050004500430049004600490043004100540049004f004e0023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 4.1. NetSolve Problem Specification}}}{ \lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_PROBLEMSPECIFICATION}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000019000000490044005f00500052004f0042004c0045004d00530050004500430049004600490043004100540049004f004e0023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_PROBLEMSPECIFICATION} }{\fldrslt {\lang1024\langfe1024\noproof 16}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_INTERFACES}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f0049004e005400450052004600410043004500530023000000}} }{\fldrslt {\lang1024\langfe1024\noproof 4.2. Available Client Interfaces}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_INTERFACES}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f0049004e005400450052004600410043004500530023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_INTERFACES}}{\fldrslt {\lang1024\langfe1024\noproof 16}}}}}{ \lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_AVAILABLE}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f0041005600410049004c00410042004c00450023000000}}}{\fldrslt { \lang1024\langfe1024\noproof 4.3. Problems that can be solved with NetSolve}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_AVAILABLE}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f0041005600410049004c00410042004c00450023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_AVAILABLE}}{\fldrslt {\lang1024\langfe1024\noproof 17}}}}}{ \lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _588 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003500380038000000}}}{\fldrslt {\lang1024\langfe1024\noproof 4.4. Naming Scheme for a NetSolve problem}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _588 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003500380038000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _588}}{\fldrslt {\lang1024\langfe1024\noproof 17}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CFORTRAN}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d000000490044005f00430046004f0052005400520041004e0023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 5. C and Fortran77 Interfaces}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l ID_CFORTRAN}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d000000490044005f00430046004f0052005400520041004e0023000000}}}{\fldrslt {\field{\*\fldinst { \lang1024\langfe1024\noproof PAGEREF ID_CFORTRAN}}{\fldrslt {\lang1024\langfe1024\noproof 19}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _606 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003600300036000000}}}{\fldrslt {\lang1024\langfe1024\noproof 5.1. Introduction}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\ l _606 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003600300036000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _606}}{\fldrslt {\lang1024\langfe1024\noproof 19}}}}}{ \lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_WHATCALLINGSEQ}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000013000000490044005f005700480041005400430041004c004c0049004e00470053004500510023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 5.2. What is the Calling Sequence?}}}{\lang1024\langfe1024\noproof \tab } {\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_WHATCALLINGSEQ}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000013000000490044005f005700480041005400430041004c004c0049004e00470053004500510023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_WHATCALLINGSEQ}}{\fldrslt { \lang1024\langfe1024\noproof 20}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _663 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003600360033000000}}}{\fldrslt {\lang1024\langfe1024\noproof 5.3. Blocking Call}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _663 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003600360033000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _663}}{\fldrslt {\lang1024\langfe1024\noproof 22}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _685 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003600380035000000}}}{\fldrslt {\lang1024\langfe1024\noproof 5.4. Nonblocking Call}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _685 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003600380035000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _685}}{\fldrslt {\lang1024\langfe1024\noproof 23}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _715 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003700310035000000}}}{\fldrslt {\lang1024\langfe1024\noproof 5.5. Ca tching errors}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _715 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003700310035000000} }}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _715}}{\fldrslt {\lang1024\langfe1024\noproof 24}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _721 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003700320031000000}}}{\fldrslt {\lang1024\langfe1024\noproof 5.6. Row- or column-major}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _721 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003700320031000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _721}}{\fldrslt {\lang1024\langfe1024\noproof 25}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _729 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003700320039000000}}}{\fldrslt {\lang1024\langfe1024\noproof 5.7. Limitations of the Fortran77 interface}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _729 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003700320039000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _729}}{\fldrslt {\lang1024\langfe1024\noproof 25}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _735 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003700330035000000}}}{\fldrslt {\lang1024\langfe1024\noproof 5.8. Built-in examples}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _735 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003700330035000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _735}}{\fldrslt {\lang1024\langfe1024\noproof 25}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_MATLAB}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f004d00410054004c004100420023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 6. Matlab Interface}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l ID_MATLAB}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f004d00410054004c004100420023000000}}}{\fldrslt {\field{\*\fldinst { \lang1024\langfe1024\noproof PAGEREF ID_MATLAB}}{\fldrslt {\lang1024\langfe1024\noproof 26}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _744 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003700340034000000}}}{\fldrslt {\lang1024\langfe1024\noproof 6.1. Introduction}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\ l _744 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003700340034000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _744}}{\fldrslt {\lang1024\langfe1024\noproof 26}}}}}{ \lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_FIRST}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f004600490052005300540023000000}}}{\fldrslt { \lang1024\langfe1024\noproof 6.2. What to Do First}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_FIRST}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f004600490052005300540023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_FIRST}}{\fldrslt {\lang1024\langfe1024\noproof 26}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_BLOCKING}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d000000490044005f0042004c004f0043004b0049004e00470023000000}}}{\fldrslt { \lang1024\langfe1024\noproof 6.3. Calling }{\f2\fs21\lang1024\langfe1024\noproof netsolve()}{\lang1024\langfe1024\noproof to perform computation}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_BLOCKING}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d000000490044005f0042004c004f0043004b0049004e00470023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_BLOCKING} }{\fldrslt {\lang1024\langfe1024\noproof 29}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_NONBLOCKING}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f004e004f004e0042004c004f0043004b0049004e00470023000000}} }{\fldrslt {\lang1024\langfe1024\noproof 6.4. Calling }{\f2\fs21\lang1024\langfe1024\noproof netsolve_nb()}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_NONBLOCKING}{ \lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f004e004f004e0042004c004f0043004b0049004e00470023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_NONBLOCKING} }{\fldrslt {\lang1024\langfe1024\noproof 30}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _875 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003800370035000000}}}{\fldrslt {\lang1024\langfe1024\noproof 6.5. What Can Go Wrong?}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _875 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003800370035000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _875}}{\fldrslt {\lang1024\langfe1024\noproof 33}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _880 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003800380030000000}}}{\fldrslt {\lang1024\langfe1024\noproof 6.6. Catching NetSolve errors}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _880 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003800380030000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _880}}{\fldrslt {\lang1024\langfe1024\noproof 34}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _890 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003800390030000000}}}{\fldrslt {\lang1024\langfe1024\noproof 6.7. Demo}}}{ \lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _890 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003800390030000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _890}}{\fldrslt {\lang1024\langfe1024\noproof 34}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _896 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003800390036000000}}}{\fldrslt {\lang1024\langfe1024\noproof 6.8. Optional: Testing the NetSolve BLAS interfaces}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _896 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003800390036000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _896}}{\fldrslt {\lang1024\langfe1024\noproof 35}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _905 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003900300035000000}}}{\fldrslt {\lang1024\langfe1024\noproof 6.9. Optional: Testing the NetSolve LAPACK interfaces}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _905 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003900300035000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _905}}{\fldrslt {\lang1024\langfe1024\noproof 35}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _914 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003900310034000000}}}{\fldrslt {\lang1024\langfe1024\noproof 6.10. Optional: Testing the NetSolve ScaLAPACK interfaces}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _914 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003900310034000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _914}}{\fldrslt {\lang1024\langfe1024\noproof 36}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _923 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003900320033000000}}}{\fldrslt {\lang1024\langfe1024\noproof 6.11. Optional: Testing the NetSolve 'sparse_iterative_solve' interface}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _923 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003900320033000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _923}}{\fldrslt {\lang1024\langfe1024\noproof 36}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _950 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003900350030000000}}}{\fldrslt {\lang1024\langfe1024\noproof 6.12. Optional: Testing the NetSolve 'sparse_direct_solve' interface}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _950 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003900350030000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _950}}{\fldrslt {\lang1024\langfe1024\noproof 37}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_MATHEMATICA}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f004d0041005400480045004d004100540049004300410023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 7. Mathematica Interface}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_MATHEMATICA}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f004d0041005400480045004d004100540049004300410023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_MATHEMATICA}}{\fldrslt {\lang1024\langfe1024\noproof 39}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _979 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003900370039000000}}}{\fldrslt {\lang1024\langfe1024\noproof 7.1. Introduction}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\ l _979 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000050000005f003900370039000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _979}}{\fldrslt {\lang1024\langfe1024\noproof 39}}}}}{ \lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_GETSTARTED}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f00470045005400530054004100520054004500440023000000}} }{\fldrslt {\lang1024\langfe1024\noproof 7.2. What to do first}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_GETSTARTED}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f00470045005400530054004100520054004500440023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_GETSTARTED}}{\fldrslt {\lang1024\langfe1024\noproof 39}}}}}{ \lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1065 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003000360035000000}}}{\fldrslt {\lang1024\langfe1024\noproof 7.3. Blocking call to NetSolve}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1065 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003000360035000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1065}}{\fldrslt {\lang1024\langfe1024\noproof 43}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1084 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003000380034000000}}}{\fldrslt {\lang1024\langfe1024\noproof 7.4. Nonblocking Call to NetSolve}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1084 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003000380034000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1084}}{\fldrslt {\lang1024\langfe1024\noproof 45}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ERRORHANDLING}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000012000000490044005f004500520052004f005200480041004e0044004c0049004e00470023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 7.5. Catching Errors}}}{\lang1024\langfe1024\noproof \tab } {\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ERRORHANDLING}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000012000000490044005f004500520052004f005200480041004e0044004c0049004e00470023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_ERRORHANDLING}}{\fldrslt { \lang1024\langfe1024\noproof 46}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1111 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003100310031000000}}}{\fldrslt {\lang1024\langfe1024\noproof 7.6. Demo}}} {\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1111 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003100310031000000}} }{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1111}}{\fldrslt {\lang1024\langfe1024\noproof 46}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1117 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003100310037000000}}}{\fldrslt {\lang1024\langfe1024\noproof 7.7. Optional: Testing the NetSolve BLAS interfaces}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1117 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003100310037000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1117}}{\fldrslt {\lang1024\langfe1024\noproof 46}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1126 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003100320036000000}}}{\fldrslt {\lang1024\langfe1024\noproof 7.8. Optional: Testing the NetSolve LAPACK interfaces}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1126 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003100320036000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1126}}{\fldrslt {\lang1024\langfe1024\noproof 47}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_FARMING}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f004600410052004d0049004e00470023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 8. NetSolve Request Farming}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l ID_FARMING}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f004600410052004d0049004e00470023000000}}}{\fldrslt {\field{\*\fldinst { \lang1024\langfe1024\noproof PAGEREF ID_FARMING}}{\fldrslt {\lang1024\langfe1024\noproof 48}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1142 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003100340032000000}}}{\fldrslt {\lang1024\langfe1024\noproof 8.1. How to call farming}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1142 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003100340032000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1142}}{\fldrslt { \lang1024\langfe1024\noproof 48}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1204 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003200300034000000}}}{\fldrslt {\lang1024\langfe1024\noproof 8.2. An example}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1204 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003200300034000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1204}}{\fldrslt {\lang1024\langfe1024\noproof 49}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1229 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003200320039000000}}}{\fldrslt {\lang1024\langfe1024\noproof 8.3. Catching errors}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1229 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003200320039000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1229}}{\fldrslt {\lang1024\langfe1024\noproof 51}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1234 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003200330034000000}}}{\fldrslt {\lang1024\langfe1024\noproof 8.4. Current Implementation and Future Improvements}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1234 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003200330034000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1234}}{\fldrslt {\lang1024\langfe1024\noproof 51}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_SEQUENCING}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f00530045005100550045004e00430049004e00470023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 9. NetSolve Request Sequencing}}}{\lang1024\langfe1024\noproof \tab } {\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_SEQUENCING}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f00530045005100550045004e00430049004e00470023000000}} }{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_SEQUENCING}}{\fldrslt {\lang1024\langfe1024\noproof 52}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1240 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003200340030000000}}}{\fldrslt {\lang1024\langfe1024\noproof 9.1. Goals and Methodologies}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1240 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003200340030000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1240}}{\fldrslt { \lang1024\langfe1024\noproof 52}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1245 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003200340035000000}}}{\fldrslt {\lang1024\langfe1024\noproof 9.2. The Application Programming Interface}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1245 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003200340035000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1245}}{\fldrslt {\lang1024\langfe1024\noproof 52}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1283 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003200380033000000}}}{\fldrslt {\lang1024\langfe1024\noproof 9.3. Execution Scheduling at the Server}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1283 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003200380033000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1283}}{\fldrslt {\lang1024\langfe1024\noproof 54}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CLIENT_45_SECURITY}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000017000000490044005f0043004c00490045004e0054005f00340035005f005300450043005500520049005400590023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 10. Security in NetSolve Client}}}{ \lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CLIENT_45_SECURITY}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000017000000490044005f0043004c00490045004e0054005f00340035005f005300450043005500520049005400590023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_CLIENT_45_SECURITY}}{\fldrslt { \lang1024\langfe1024\noproof 55}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1290 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003200390030000000}}}{\fldrslt {\lang1024\langfe1024\noproof 10.1. Introduction}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\ l _1290 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003200390030000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1290}}{\fldrslt {\lang1024\langfe1024\noproof 55} }}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1301 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300300031000000}}}{\fldrslt {\lang1024\langfe1024\noproof 10.2. Compiling a Kerberized Server}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1301 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300300031000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1301}}{\fldrslt {\lang1024\langfe1024\noproof 56}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1310 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300310030000000}}}{\fldrslt {\lang1024\langfe1024\noproof 10.3. Running a Kerberized NetSolve Client}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1310 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300310030000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1310}}{\fldrslt {\lang1024\langfe1024\noproof 56}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_UPF}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000008000000490044005f0055005000460023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 11. The User-Supplied Function Feature}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l ID_UPF}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000008000000490044005f0055005000460023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_UPF}}{\fldrslt {\lang1024\langfe1024\noproof 57}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1323 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300320033000000}}}{\fldrslt {\lang1024\langfe1024\noproof 11.1. Motivation}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\ l _1323 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300320033000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1323}}{\fldrslt {\lang1024\langfe1024\noproof 57} }}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1328 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300320038000000}}}{\fldrslt {\lang1024\langfe1024\noproof 11.2. Solution}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1328 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300320038000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1328}}{\fldrslt {\lang1024\langfe1024\noproof 57}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1334 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300330034000000}}}{\fldrslt {\lang1024\langfe1024\noproof 11.3. For the Client}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1334 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300330034000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1334}}{\fldrslt {\lang1024\langfe1024\noproof 58}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2880\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2880\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1337 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300330037000000}}}{\fldrslt {\lang1024\langfe1024\noproof 11.3.1. Determining the Format of the Function to Supply}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l _1337 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300330037000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1337} }{\fldrslt {\lang1024\langfe1024\noproof 58}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1341 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300340031000000}}}{\fldrslt {\lang1024\langfe1024\noproof 11.3.2. From Matlab, Mathematica, C and Fortran}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1341 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300340031000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1341}}{\fldrslt {\lang1024\langfe1024\noproof 58}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1344 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300340034000000}}}{\fldrslt {\lang1024\langfe1024\noproof 11.3.3. From the NetSolve Java API}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1344 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300340034000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1344}}{\fldrslt {\lang1024\langfe1024\noproof 58}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1349 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300340039000000}}}{\fldrslt {\lang1024\langfe1024\noproof 11.3.4. From the Java GUI}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1349 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300340039000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1349}}{\fldrslt {\lang1024\langfe1024\noproof 58}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1356 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300350036000000}}}{\fldrslt {\lang1024\langfe1024\noproof 11.4. For the Server}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1356 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300350036000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1356}}{\fldrslt {\lang1024\langfe1024\noproof 59}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1364 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300360034000000}}}{\fldrslt {\lang1024\langfe1024\noproof 11.5. Conclusion}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1364 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003300360034000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1364}}{\fldrslt {\lang1024\langfe1024\noproof 59}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_FAQ}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000008000000490044005f0046004100510023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 12. Troubleshooting}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_FAQ}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000008000000490044005f0046004100510023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_FAQ}}{\fldrslt { \lang1024\langfe1024\noproof 60}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CONF_45_DEF}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f0043004f004e0046005f00340035005f0044004500460023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 12.1. Details of the Makefile.NETSOLVE_ARCH.inc File}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CONF_45_DEF}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f0043004f004e0046005f00340035005f0044004500460023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_CONF_45_DEF}}{\fldrslt {\lang1024\langfe1024\noproof 60}}}}} {\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1440\ri0\sb48\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1440\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1419 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003400310039000000}}}{\fldrslt {\b\lang1024\langfe1024\noproof III. The Administrator's Manual}}}{\b\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \b\lang1024\langfe1024\noproof HYPERLINK \\l _1419 }{\b\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003400310039000000}}}{\fldrslt {\field{\*\fldinst {\b\lang1024\langfe1024\noproof PAGEREF _1419}}{\fldrslt {\b\lang1024\langfe1024\noproof 68}}}}}{\b\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sb48\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\b\lang1024\langfe1024\noproof HYPERLINK \\l ID_ADMIN_45_INSTALL}{\b\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000015000000490044005f00410044004d0049004e005f00340035005f0049004e005300540041004c004c0023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 13. Downloading, Installing, and Testing the Agent and Server}}}{ \lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ADMIN_45_INSTALL}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000015000000490044005f00410044004d0049004e005f00340035005f0049004e005300540041004c004c0023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_ADMIN_45_INSTALL}}{\fldrslt { \lang1024\langfe1024\noproof 69}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ADMIN_45_DOWNLOAD}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000016000000490044005f00410044004d0049004e005f00340035005f0044004f0057004e004c004f004100440023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 13.1. Installation on Unix Systems}}}{ \lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ADMIN_45_DOWNLOAD}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000016000000490044005f00410044004d0049004e005f00340035005f0044004f0057004e004c004f004100440023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_ADMIN_45_DOWNLOAD}}{\fldrslt { \lang1024\langfe1024\noproof 69}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_TESTING}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f00540045005300540049004e00470023000000}}}{\fldrslt { \lang1024\langfe1024\noproof 13.2. Testing the Software}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_TESTING}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f00540045005300540049004e00470023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_TESTING}}{\fldrslt {\lang1024\langfe1024\noproof 72}}}}}{ \lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2880\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2880\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ADMIN_45_TEST}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000012000000490044005f00410044004d0049004e005f00340035005f00540045005300540023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 13.2.1. Agent-Server-Client Test}}}{\lang1024\langfe1024\noproof \tab } {\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ADMIN_45_TEST}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000012000000490044005f00410044004d0049004e005f00340035005f00540045005300540023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_ADMIN_45_TEST}}{\fldrslt { \lang1024\langfe1024\noproof 72}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_EXPANDING_45_SERVER}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000018000000490044005f0045005800500041004e00440049004e0047005f00340035005f0053004500520056004500520023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 13.3. Expanding the Server Capabilities}}}{ \lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_EXPANDING_45_SERVER}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000018000000490044005f0045005800500041004e00440049004e0047005f00340035005f0053004500520056004500520023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_EXPANDING_45_SERVER} }{\fldrslt {\lang1024\langfe1024\noproof 73}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2880\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2880\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ENABLING_45_LAPACK}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000017000000490044005f0045004e00410042004c0049004e0047005f00340035005f004c0041005000410043004b0023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 13.3.1. Enabling the LAPACK library}}}{ \lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ENABLING_45_LAPACK}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000017000000490044005f0045004e00410042004c0049004e0047005f00340035005f004c0041005000410043004b0023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_ENABLING_45_LAPACK}}{\fldrslt { \lang1024\langfe1024\noproof 74}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ENABLING_45_SCALAPACK}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000001a000000490044005f0045004e00410042004c0049004e0047005f00340035005f005300430041004c0041005000410043004b0023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 13.3.2. Enabling the ScaLAPACK library}}}{ \lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ENABLING_45_SCALAPACK}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000001a000000490044005f0045004e00410042004c0049004e0047005f00340035005f005300430041004c0041005000410043004b0023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_ENABLING_45_SCALAPACK}}{\fldrslt {\lang1024\langfe1024\noproof 75}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ENABLING_45_ITERATIVE}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000001a000000490044005f0045004e00410042004c0049004e0047005f00340035005f0049005400450052004100540049005600450023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 13.3.3. Enabling Sparse Iterative Solvers (PETSc, Aztec, and ITPACK)}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ENABLING_45_ITERATIVE}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000001a000000490044005f0045004e00410042004c0049004e0047005f00340035005f0049005400450052004100540049005600450023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_ENABLING_45_ITERATIVE}}{\fldrslt {\lang1024\langfe1024\noproof 76}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ENABLING_45_DIRECT}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000017000000490044005f0045004e00410042004c0049004e0047005f00340035005f0044004900520045004300540023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 13.3.4. Enabling Sparse Direct Solvers (SuperLU and MA28)}}}{ \lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ENABLING_45_DIRECT}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000017000000490044005f0045004e00410042004c0049004e0047005f00340035005f0044004900520045004300540023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_ENABLING_45_DIRECT}}{\fldrslt { \lang1024\langfe1024\noproof 77}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_AGENT}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f004100470045004e00540023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 14. Running the NetSolve Agent}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l ID_AGENT}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f004100470045004e00540023000000}}}{\fldrslt {\field{\*\fldinst { \lang1024\langfe1024\noproof PAGEREF ID_AGENT}}{\fldrslt {\lang1024\langfe1024\noproof 79}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_SERVER}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f0053004500520056004500520023000000}}}{\fldrslt { \lang1024\langfe1024\noproof 15. Running the NetSolve Server}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_SERVER}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f0053004500520056004500520023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_SERVER}}{\fldrslt {\lang1024\langfe1024\noproof 81}}}}}{ \lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1688 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003600380038000000}}}{\fldrslt {\lang1024\langfe1024\noproof 15.1. Starting a Server}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1688 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003600380038000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1688}}{\fldrslt { \lang1024\langfe1024\noproof 81}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CONFIG_45_FILE}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000013000000490044005f0043004f004e004600490047005f00340035005f00460049004c00450023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 15.2. The Server Configuration File}}}{\lang1024\langfe1024\noproof \tab } {\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CONFIG_45_FILE}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000013000000490044005f0043004f004e004600490047005f00340035005f00460049004c00450023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_CONFIG_45_FILE}}{\fldrslt { \lang1024\langfe1024\noproof 82}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_TOOLS}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f0054004f004f004c00530023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 16. NetSolve Management Tools for Administrators}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_TOOLS}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f0054004f004f004c00530023000000}}}{\fldrslt {\field{\*\fldinst { \lang1024\langfe1024\noproof PAGEREF ID_TOOLS}}{\fldrslt {\lang1024\langfe1024\noproof 85}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1784 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003700380034000000}}}{\fldrslt {\lang1024\langfe1024\noproof 16.1. }{\b\lang1024\langfe1024\noproof NS_conf}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l _1784 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003700380034000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1784} }{\fldrslt {\lang1024\langfe1024\noproof 85}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1791 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003700390031000000}}}{\fldrslt {\lang1024\langfe1024\noproof 16.2. }{ \b\lang1024\langfe1024\noproof NS_problems}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1791 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003700390031000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1791}}{\fldrslt {\lang1024\langfe1024\noproof 85}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1796 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003700390036000000}}}{\fldrslt {\lang1024\langfe1024\noproof 16.3. }{ \b\lang1024\langfe1024\noproof NS_probdesc}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1796 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003700390036000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1796}}{\fldrslt {\lang1024\langfe1024\noproof 86}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1801 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003800300031000000}}}{\fldrslt {\lang1024\langfe1024\noproof 16.4. }{ \b\lang1024\langfe1024\noproof NS_killagent}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1801 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003800300031000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1801}}{\fldrslt {\lang1024\langfe1024\noproof 87}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1806 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003800300036000000}}}{\fldrslt {\lang1024\langfe1024\noproof 16.5. }{ \b\lang1024\langfe1024\noproof NS_killserver}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1806 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003800300036000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1806}}{\fldrslt {\lang1024\langfe1024\noproof 87}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1811 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003800310031000000}}}{\fldrslt {\lang1024\langfe1024\noproof 16.6. }{ \b\lang1024\langfe1024\noproof NS_killall}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _1811 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0031003800310031000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _1811}}{\fldrslt {\lang1024\langfe1024\noproof 87}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_PDF}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000008000000490044005f0050004400460023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 17. The Problem Description File}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l ID_PDF}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000008000000490044005f0050004400460023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_PDF}}{\fldrslt {\lang1024\langfe1024\noproof 88}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CONTENTSPDF}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f0043004f004e00540045004e005400530050004400460023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 17.1. Contents of a Problem Description File}}}{\lang1024\langfe1024\noproof \tab } {\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CONTENTSPDF}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f0043004f004e00540045004e005400530050004400460023000000 }}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_CONTENTSPDF}}{\fldrslt {\lang1024\langfe1024\noproof 88}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2880\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2880\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_OBJECTS}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f004f0042004a00450043005400530023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 17.1.1. NetSolve Objects}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l ID_OBJECTS}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f004f0042004a00450043005400530023000000}}}{\fldrslt {\field{\*\fldinst { \lang1024\langfe1024\noproof PAGEREF ID_OBJECTS}}{\fldrslt {\lang1024\langfe1024\noproof 88}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li3360\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin3360\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_SPARSEMATRICES}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000013000000490044005f005300500041005200530045004d00410054005200490043004500530023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 17.1.1.1. Sparse Matrix Representation in NetSolve}}}{ \lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_SPARSEMATRICES}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000013000000490044005f005300500041005200530045004d00410054005200490043004500530023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_SPARSEMATRICES}}{\fldrslt { \lang1024\langfe1024\noproof 90}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2880\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2880\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_MNEMONICS}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f004d004e0045004d004f004e0049004300530023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 17.1.2. Mnemonics}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l ID_MNEMONICS}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f004d004e0045004d004f004e0049004300530023000000}}}{\fldrslt {\field{\*\fldinst { \lang1024\langfe1024\noproof PAGEREF ID_MNEMONICS}}{\fldrslt {\lang1024\langfe1024\noproof 91}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2005 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003000300035000000}}}{\fldrslt {\lang1024\langfe1024\noproof 17.1.3. Sections of a Problem Description}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2005 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003000300035000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2005}}{\fldrslt {\lang1024\langfe1024\noproof 92}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li3360\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin3360\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_STUFF1}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f0053005400550046004600310023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 17.1.3.1. Problem ID and General Information}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_STUFF1}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f0053005400550046004600310023000000}}}{\fldrslt {\field{\*\fldinst { \lang1024\langfe1024\noproof PAGEREF ID_STUFF1}}{\fldrslt {\lang1024\langfe1024\noproof 92}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_INPUTSPEC}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f0049004e00500055005400530050004500430023000000}}}{\fldrslt { \lang1024\langfe1024\noproof 17.1.3.2. Input Specification}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_INPUTSPEC}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f0049004e00500055005400530050004500430023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_INPUTSPEC}}{\fldrslt {\lang1024\langfe1024\noproof 93}}}}}{ \lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2101 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003100300031000000}}}{\fldrslt {\lang1024\langfe1024\noproof 1 7.1.3.3. Output Specification}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2101 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003100300031000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2101}}{\fldrslt {\lang1024\langfe1024\noproof 94}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2113 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003100310033000000}}}{\fldrslt {\lang1024\langfe1024\noproof 17.1.3.4. Additional Information}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2113 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003100310033000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2113}}{\fldrslt {\lang1024\langfe1024\noproof 94}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2880\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2880\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_SECCALLINGSEQUENCE}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000017000000490044005f00530045004300430041004c004c0049004e004700530045005100550045004e004300450023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 17.1.4. Calling Sequence}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_SECCALLINGSEQUENCE}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000017000000490044005f00530045004300430041004c004c0049004e004700530045005100550045004e004300450023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_SECCALLINGSEQUENCE}}{\fldrslt { \lang1024\langfe1024\noproof 94}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li3360\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin3360\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2176 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003100370036000000}}}{\fldrslt {\lang1024\langfe1024\noproof 17.1.4.1. Pseudo-Code}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2176 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003100370036000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2176}}{\fldrslt {\lang1024\langfe1024\noproof 96}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2880\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2880\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_SIMPLEEXAMPLE}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000012000000490044005f00530049004d0050004c0045004500580041004d0050004c00450023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 17.1.5. A Simple Example}}}{\lang1024\langfe1024\noproof \tab } {\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_SIMPLEEXAMPLE}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000012000000490044005f00530049004d0050004c0045004500580041004d0050004c00450023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_SIMPLEEXAMPLE}}{\fldrslt { \lang1024\langfe1024\noproof 98}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_PDGUI}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f005000440047005500490023000000}}}{\fldrslt { \lang1024\langfe1024\noproof 17.1.6. PDF Generator}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_PDGUI}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f005000440047005500490023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_PDGUI}}{\fldrslt {\lang1024\langfe1024\noproof 99}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ADDITIONS}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f004100440044004900540049004f004e00530023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 18. Security in NetSolve}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l ID_ADDITIONS}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f004100440044004900540049004f004e00530023000000}}}{\fldrslt {\field{\*\fldinst { \lang1024\langfe1024\noproof PAGEREF ID_ADDITIONS}}{\fldrslt {\lang1024\langfe1024\noproof 101}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2244 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003200340034000000}}}{\fldrslt {\lang1024\langfe1024\noproof 18.1. Introduction}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\ l _2244 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003200340034000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2244}}{\fldrslt {\lang1024\langfe1024\noproof 101 }}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2255 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003200350035000000}}}{\fldrslt {\lang1024\langfe1024\noproof 18.2 . Compiling a Kerberized Server}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2255 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003200350035000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2255}}{\fldrslt {\lang1024\langfe1024\noproof 102}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2263 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003200360033000000}}}{\fldrslt {\lang1024\langfe1024\noproof 18.3. Installing a Kerberized Server}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2263 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003200360033000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2263}}{\fldrslt {\lang1024\langfe1024\noproof 102}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2301 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300300031000000}}}{\fldrslt {\lang1024\langfe1024\noproof 18.4. Runni ng a Kerberized Server}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2301 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300300031000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2301}}{\fldrslt {\lang1024\langfe1024\noproof 103}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1440\ri0\sb48\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1440\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2317 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300310037000000}}}{\fldrslt {\b\lang1024\langfe1024\noproof IV. Miscellaneous Features}}}{\b\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\b\lang1024\langfe1024\noproof HYPERLINK \\l _2317 }{\b\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300310037000000}}}{\fldrslt {\field{\*\fldinst {\b\lang1024\langfe1024\noproof PAGEREF _2317}}{\fldrslt { \b\lang1024\langfe1024\noproof 105}}}}}{\b\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sb48\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\b\lang1024\langfe1024\noproof HYPERLINK \\l ID_NWS}{\b\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000008000000490044005f004e005700530023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 19. Using the Network Weather Service}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l ID_NWS}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000008000000490044005f004e005700530023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_NWS}}{\fldrslt {\lang1024\langfe1024\noproof 106}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2322 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300320032000000}}}{\fldrslt {\lang1024\langfe1024\noproof 19.1. Introduction}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\ l _2322 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300320032000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2322}}{\fldrslt {\lang1024\langfe1024\noproof 106 }}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2326 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300320036000000}}}{\fldrslt {\lang1024\langfe1024\noproof 19.2. To Use NWS:}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2326 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300320036000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2326}}{\fldrslt {\lang1024\langfe1024\noproof 106}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2333 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300330033000000}}}{\fldrslt {\lang1024\langfe1024\noproof 19.3. NWS Components utilized in NetSolve}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2333 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300330033000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2333}}{\fldrslt {\lang1024\langfe1024\noproof 107}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2361 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300360031000000}}}{\fldrslt {\lang1024\langfe1024\noproof 19.4. NetSolve agent and the NWS nameserver, memory and forecast}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2361 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300360031000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2361}}{\fldrslt {\lang1024\langfe1024\noproof 108}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2365 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300360035000000}}}{\fldrslt {\lang1024\langfe1024\noproof 19.5. NetSolve server and the NWS sensor}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2365 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300360035000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2365}}{\fldrslt {\lang1024\langfe1024\noproof 108}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_DSI}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000008000000490044005f0044005300490023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 20. Distributed Storage Infrastructure (DSI) in NetSolve}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_DSI}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000008000000490044005f0044005300490023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_DSI}}{\fldrslt {\lang1024\langfe1024\noproof 110}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li2400\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin2400\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2371 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300370031000000}}}{\fldrslt {\lang1024\langfe1024\noproof 20.1. Introduction}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\ l _2371 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300370031000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2371}}{\fldrslt {\lang1024\langfe1024\noproof 110 }}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2374 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300370034000000}}}{\fldrslt {\lang1024\langfe1024\noproof 20.2. To Use DSI:}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2374 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300370034000000}} }{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2374}}{\fldrslt {\lang1024\langfe1024\noproof 110}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2381 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300380031000000}}}{\fldrslt {\lang1024\langfe1024\noproof 20.3. DSI APIs:}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2381 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003300380031000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2381}}{\fldrslt {\lang1024\langfe1024\noproof 110}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2612 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003600310032000000}}}{\fldrslt {\lang1024\langfe1024\noproof 20.4. Example}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2612 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003600310032000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF _2612}}{\fldrslt {\lang1024\langfe1024\noproof 114}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1440\ri0\sb48\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1440\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _2621 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003600320031000000}}}{\fldrslt {\b\lang1024\langfe1024\noproof V. References}}}{\b\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\b\lang1024\langfe1024\noproof HYPERLINK \\ l _2621 }{\b\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0032003600320031000000}}}{\fldrslt {\field{\*\fldinst {\b\lang1024\langfe1024\noproof PAGEREF _2621}}{\fldrslt { \b\lang1024\langfe1024\noproof 116}}}}}{\b\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sb48\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\b\lang1024\langfe1024\noproof HYPERLINK \\l ID_APPMATLAB}{\b\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f004100500050004d00410054004c004100420023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 21. Matlab Reference Manual}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l ID_APPMATLAB}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f004100500050004d00410054004c004100420023000000}}}{\fldrslt {\field{\*\fldinst { \lang1024\langfe1024\noproof PAGEREF ID_APPMATLAB}}{\fldrslt {\lang1024\langfe1024\noproof 117}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CREF}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000009000000490044005f00430052004500460023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 22. C Reference Manual}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CREF}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000009000000490044005f00430052004500460023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_CREF}}{\fldrslt { \lang1024\langfe1024\noproof 119}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_FORTRANREF}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f0046004f0052005400520041004e0052004500460023000000}} }{\fldrslt {\lang1024\langfe1024\noproof 23. Fortran Reference Manual}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_FORTRANREF}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f0046004f0052005400520041004e0052004500460023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_FORTRANREF}}{\fldrslt {\lang1024\langfe1024\noproof 121}}}}}{ \lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ERRORCODES}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f004500520052004f00520043004f0044004500530023000000}} }{\fldrslt {\lang1024\langfe1024\noproof 24. Error Handling in NetSolve}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_ERRORCODES}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f004500520052004f00520043004f0044004500530023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_ERRORCODES}}{\fldrslt {\lang1024\langfe1024\noproof 123}}}}}{ \lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1440\ri0\sb48\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1440\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _3034 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0033003000330034000000}}}{\fldrslt {\b\lang1024\langfe1024\noproof VI. Appendices}}}{\b\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\b\lang1024\langfe1024\noproof HYPERLINK \\l _3034 }{\b\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0033003000330034000000}}}{\fldrslt {\field{\*\fldinst {\b\lang1024\langfe1024\noproof PAGEREF _3034}}{\fldrslt { \b\lang1024\langfe1024\noproof 126}}}}}{\b\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sb48\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\b\lang1024\langfe1024\noproof HYPERLINK \\l ID_FULLEXAMPLEC}{\b\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000011000000490044005f00460055004c004c004500580041004d0050004c004500430023000000}}}{\fldrslt {\lang1024\langfe1024\noproof A. Complete C Example}}}{\lang1024\langfe1024\noproof \tab } {\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_FULLEXAMPLEC}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000011000000490044005f00460055004c004c004500580041004d0050004c004500430023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_FULLEXAMPLEC}}{\fldrslt {\lang1024\langfe1024\noproof 127}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1920\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1920\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_FULLEXAMPLEFORTRAN}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000017000000490044005f00460055004c004c004500580041004d0050004c00450046004f0052005400520041004e0023000000}}}{\fldrslt {\lang1024\langfe1024\noproof B. Complete Fortran77 Example}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_FULLEXAMPLEFORTRAN}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000017000000490044005f00460055004c004c004500580041004d0050004c00450046004f0052005400520041004e0023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_FULLEXAMPLEFORTRAN}}{\fldrslt { \lang1024\langfe1024\noproof 133}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1440\ri0\sb48\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1440\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l _3044 }{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0033003000340034000000}}}{\fldrslt {\b\lang1024\langfe1024\noproof Bibliography}}}{\b\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\b\lang1024\langfe1024\noproof HYPERLINK \\ l _3044 }{\b\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b0200000008000000060000005f0033003000340034000000}}}{\fldrslt {\field{\*\fldinst {\b\lang1024\langfe1024\noproof PAGEREF _3044}}{\fldrslt { \b\lang1024\langfe1024\noproof 138}}}}}{\b\lang1024\langfe1024\noproof \par \sect }\sectd \pgnlcrm\linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof List of Tables \par }\pard\plain \ql \fi-480\li1440\ri0\sb249\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1440\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\field{\*\fldinst {\b\f1\fs49\lang1024\langfe1024\noproof HYPERLINK \\ l ID_TABLE1}{\b\f1\fs49\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f005400410042004c004500310023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 17-1. Available data types}}}{ \lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_TABLE1}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f005400410042004c004500310023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_TABLE1}}{\fldrslt {\lang1024\langfe1024\noproof 89}}}}}{ \lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1440\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1440\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_TABLE1A}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f005400410042004c0045003100410023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 17-2. Available object types}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst { \lang1024\langfe1024\noproof HYPERLINK \\l ID_TABLE1A}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f005400410042004c0045003100410023000000}}}{\fldrslt {\field{\*\fldinst { \lang1024\langfe1024\noproof PAGEREF ID_TABLE1A}}{\fldrslt {\lang1024\langfe1024\noproof 89}}}}}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1440\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\faauto\rin0\lin1440\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CODES}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f0043004f0044004500530023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 24-1. Error Codes}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_CODES}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f0043004f0044004500530023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_CODES} }{\fldrslt {\lang1024\langfe1024\noproof 123}}}}}{\lang1024\langfe1024\noproof \sect }\sectd \pgnlcrm\linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar \tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof List of Figures \par }\pard\plain \ql \fi-480\li1440\ri0\sb249\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1440\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\field{\*\fldinst {\b\f1\fs49\lang1024\langfe1024\noproof HYPERLINK \\ l ID_SYSTEM}{\b\f1\fs49\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f00530059005300540045004d0023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 1-1. The NetSolve System}}}{ \lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_SYSTEM}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f00530059005300540045004d0023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_SYSTEM}}{\fldrslt {\lang1024\langfe1024\noproof 2}}}}}{ \lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1440\ri0\sl312\slmult0\widctlpar\tqr\tldot\tx9360\hyphpar0\faauto\rin0\lin1440\itap0 {\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_SEQUENCEEXAMPLE}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000014000000490044005f00530045005100550045004e00430045004500580041004d0050004c00450023000000}}}{\fldrslt {\lang1024\langfe1024\noproof 9-1. Sample C Code Using Request Sequencing Constructs}}}{ \lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_SEQUENCEEXAMPLE}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000014000000490044005f00530045005100550045004e00430045004500580041004d0050004c00450023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_SEQUENCEEXAMPLE}}{\fldrslt { \lang1024\langfe1024\noproof 53}}}}}{\lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_EXAMPLE1}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d000000490044005f004500580041004d0050004c004500310023000000}}}{\fldrslt { \lang1024\langfe1024\noproof 20-1. Example 1 (without using DSI)}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_EXAMPLE1}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d000000490044005f004500580041004d0050004c004500310023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_EXAMPLE1}}{\fldrslt {\lang1024\langfe1024\noproof 114}}}}}{ \lang1024\langfe1024\noproof \par }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_EXAMPLE2}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d000000490044005f004500580041004d0050004c004500320023000000}}}{\fldrslt { \lang1024\langfe1024\noproof 20-2. Example 2 (using DSI)}}}{\lang1024\langfe1024\noproof \tab }{\field\fldedit{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_EXAMPLE2}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d000000490044005f004500580041004d0050004c004500320023000000}}}{\fldrslt {\field{\*\fldinst {\lang1024\langfe1024\noproof PAGEREF ID_EXAMPLE2}}{\fldrslt {\lang1024\langfe1024\noproof 114}}}}}{ \lang1024\langfe1024\noproof \par \sect }\sectd \pgnrestart\pgnlcrm\linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Preface}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Preface}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart _61}{\*\bkmkend _61}Preface \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_WHO}{\*\bkmkend ID_WHO} 1. Who Should Read This Document \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { This Document is intended to provide the reader with a discussion of how to use the different components of the NetSolve System and to serve as a reference manual for the commands and functions made available by NetSolve. Although we offer a brief discuss ion of the NetSolve System, this document is not necessarily intended to provide details about the NetSolve components. The reader should refer to the NetSolve documents in the reference list and refer to the }{\i Documentation}{ section of the NetSolve homepage (http://icl.cs.utk.edu/netsolve/) for more appropriate discussion of the NetSolve system. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The reader is expected to have some level of familiarity with programming and at least one prog ramming languages, preferably the C language. Rudimentary knowledge of the UNIX\'99 operating system environment and the }{\b make}{ utility will prove handy if installing and configuring NetSolve for the UNIX environment. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_ORGANIZATION} {\*\bkmkend ID_ORGANIZATION}2. Organization of This Document \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {This users' guide is divided into six parts. These }{\i parts}{ are aimed at the needs of different types of users. Therefore, it is not necessary for a user to read all chapters of this users' guide. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\i Part I: Introduction \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab This part of the users' guide provides a general overview of the NetSolve system, as well as a discussion of related projects. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\i Part II: The User's Manual \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab These chapters are aimed at the average user of NetSolve who is only interested in utilizing the client interfaces. They provide installation instructions for the client software, a discussion of the available client interfaces and how to utilize specific features of the NetSolve system such as request farming, security, and user-supplied functions, and a troubleshooti ng section to explain error-handling within the NetSolve system. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\i Part III: The Administrator's Manual \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab These chapters are aimed at the user who will be installing and customizing a stand-alone NetSolve system. They give installation instructions for the a gent and server software and the management tools, explanations of how to enable new software into the NetSolve system, and a thorough explanation of the design of features in the NetSolve system such as request farming, security, and the user-supplied fu nction. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\i Part IV: Miscellaneous Features \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab These chapters provide detailed information on miscellaneous features of the NetSolve system such as the Network Weather Service (NWS). \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\i Part V: Reference \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab These sections provide reference manuals for the client interfaces, as well as a listing of error-handling messages within the NetSolve system. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\i Part VI: Appendices \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab These appendices provides example programs calling the Fortran77 and C NetSolve interfaces. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_CONVENTIONS} {\*\bkmkend ID_CONVENTIONS}3. Document Conventions \par }\pard\plain \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2\fs21\lang1024\langfe1024\noproof Program Output \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab Text that is output from a program. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof UNIX> \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab The UNIX prompt at which commands can be entered. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\lang1024\langfe1024\noproof User Input}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab Data to be entered by the user. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\i\f2\lang1024\langfe1024\noproof Replaceable}{\lang1024\langfe1024\noproof \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab Content that may or must be replaced by the user. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\lang1024\langfe1024\noproof Action \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab A response to a user event. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof Constant \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab A program or system constant. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof Function \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab The name of a function or subroutine. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\i\f2\lang1024\langfe1024\noproof Parameter \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab A value or symbolic reference to a value. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\lang1024\langfe1024\noproof Type \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab The classification of a value. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof Variable \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab The name of a variable. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\lang1024\langfe1024\noproof Application \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab The name of a software program. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\lang1024\langfe1024\noproof Command \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab The name of an executable program or other software command. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\lang1024\langfe1024\noproof ENVAR \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab A software environment variable. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof Filename \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab The name of a file. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_REQUEST}{\*\bkmkend ID_REQUEST} 4. Request for Comments \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { Please help us improve future editions of this document by reporting any errors, inaccuracies, bugs, misleading or confusing statements, and typographical errors that you find. Email your bug reports and comments to us at netsolve@cs.utk.edu. (mailto:nets olve@cs.utk.edu) Your help is greatly appreciated. \par \sect }\sectd \linex0\headery0\footery0\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}\pard\plain \ql \li0\ri0\sl20\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof {\*\bkmkstart _185}{\*\bkmkend _185} \par }\pard \qc \li0\ri0\sb448\sl776\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\b\f1\fs59\lang1024\langfe1024\noproof I. Introduction \par \sect }\sectd \pgnrestart\linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 1. A NetSolve Overview}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 1. A NetSolve Overview}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_NETSOLVE} {\*\bkmkend ID_NETSOLVE}Chapter 1. A NetSolve Overview \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _189}{\*\bkmkend _189} 1.1. An Introduction to Distributed Computing \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { The efficient solution of large problems is an ongoing thread of research in scientific computing. An increasingly popular method of solving these types of problems is to harness disparate computationa l resources and use their aggregate power as if it were contained in a single machine. This mode of using computers that may be distributed in geography, as well as ownership, has been termed }{\i Distributed Computing}{ . Some of the major issues concerned with D istributed Computing are resource discovery, resource allocation and resource management, fault-tolerance, security and access control, scalability, flexibility and performance. Various organizations have developed mechanisms that attempt to address these issues, each with their own perspectives of how to resolve them. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _193}{\*\bkmkend _193} 1.2. What is NetSolve? \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { NetSolve (http://icl.cs.utk.edu/netsolve/) is an example of a Distributed Computing system that hopes to present functionalities and features that a wide variety of scientists will find highly useful and helpful. \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart _198}{\*\bkmkend _198} 1.2.1. Background \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { Various mechanisms have been developed to perform computations across diverse platforms. The most common mechanism involves software libraries. Unfortunately, the use of such li braries presents several difficulties. Some software libraries are highly optimized for only certain platforms and do not provide a convenient interface to other computer systems. Other libraries demand considerable programming effort from the user. While several tools have been developed to alleviate these difficulties, such tools themselves are usually available on only a limited number of computer systems and are rarely freely distributed. Matlab [matlab] and Mathematica [mathematica] are examples of su ch tools. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {These considerations motivated the establishment of the NetSolve project. }{\i NetSolve}{ (http://icl.cs.utk.edu/netsolve) project. The basic philosophy of NetSolve is to provide a uniform, portable and efficient way to access computational resources over a network. \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart _208}{\*\bkmkend _208} 1.2.2. Overview and Architecture \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { The NetSolve project is being developed at the University of Tennessee's Computer Science Department. It provides remote access to computational resources, both hardware and software. Built upon standar d Internet protocols, like TCP/IP sockets, it is available for all popular variants of the UNIX\'99 operating system, and parts of the system are available for the Microsoft Windows 95\'99, Windows 98\'99, Windows NT\'99, and Windows 2000\'99 platforms. Testing has not yet been conducted on the Windows ME\'99 operating system. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The NetSolve system is comprised of a set of loosely connected machines. By }{\i loosely}{ connected, we mean that these machines are on the same local, wide or global area network, and may be administrated by different institutions and organizations. Moreover, the NetSolve system is able to support these interactions in a }{\i heterogeneous}{ environment, i.e. machines of different architectures, operating systems and internal data representations can participate in the system at the same time. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\lang1024\langfe1024\noproof {\*\bkmkstart ID_SYSTEM}{\*\bkmkend ID_SYSTEM}Figure 1-1. The NetSolve System \par }\pard \qc \li960\ri0\sb240\widctlpar\faauto\rin0\lin960\itap0 {\field{\*\fldinst {\b\lang1024\langfe1024\noproof INCLUDEPICTURE "figs/netsolve.eps" }}{\fldrslt {\b\lang1024\langfe1024\noproof {\pict{\*\picprop\shplid1031{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn pibName}{\sv figs/netsolve.eps}}{\sp{\sn pibFlags}{\sv 2}}{\sp{\sn pictureGray}{\sv 0}}{\sp{\sn pictureBiLevel}{\sv 0}} {\sp{\sn fFilled}{\sv 0}}{\sp{\sn fHitTestFill}{\sv 1}}{\sp{\sn fillShape}{\sv 1}}{\sp{\sn fillUseRect}{\sv 0}}{\sp{\sn fNoFillHitTest}{\sv 0}}{\sp{\sn fLine}{\sv 0}} {\sp{\sn fReallyHidden}{\sv 0}}{\sp{\sn fScriptAnchor}{\sv 0}}{\sp{\sn fFakeMaster}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 \picw11677\pich7161\picwgoal6620\pichgoal4060\wmetafile8\bliptag568460267\blipupi72{\*\blipuid 21e203eb10bdb39b081cfcb1d55d453e} 0100090000033f1000000400f60700000000050000000b0200000000050000000c02cb004b01060000002606260002000100050000000b020000000005000000 0b020000000007000000fc020000ffffff000000040000002d01000008000000fa0200000000000000000000040000002d010100070000001b04cb004b010000 00001c000000fb02f8ff00000000000000000000000000000000417269616c00f577400000009a050a168f49f5779849f5770100000000003000040000002d01 02000500000002010100000009000000210506005469746c653a050005000f000000210512006e6574736f6c76655f736d616c6c2e6570730f0005000a000000 2105080043726561746f723a190005001900000021052600666967326465762056657273696f6e20332e322050617463686c6576656c20302d62657461332300 05000a00000021050800507265766965773a2d0005001500000021051e005468697320455053207069637475726520776173206e6f7420736176656437000500 1500000021051e00776974682061207072657669657720696e636c7564656420696e2069742e410005000a00000021050800436f6d6d656e743a4b0005001600 000021052000546869732045505320706963747572652077696c6c207072696e7420746f2061550005001500000021051e00506f737453637269707420707269 6e7465722c20627574206e6f7420746f5f00050012000000210518006f74686572207479706573206f66207072696e746572732e690005000500000002010100 0000060000002606260002000000fd00000026062500f001ee01254d5345505320507265616d626c65205b536f6674656b2076332e365d0d0a2f70705f736176 65207361766520646566202f73686f7770616765207b7d206465660d0a2f735f726562656b6f20363620646963742064656620735f726562656b6f2062656769 6e0d0a2f706963745f626f785f7831203020646566202f706963745f626f785f79312030206465660d0a2f706963745f626f785f78322033333120646566202f 706963745f626f785f79322032303320646566202f7363616c655f7468655f706963747572652066616c7365206465660d0a2f70705f636c69702066616c7365 206465660d0a2f4342207b207b202f70705f6379206578636820646566202f70705f63782065786368206465660d0a2f70705f63687420657863682064656620 2f70705f637764206578636820646566207d0d0a73746f70706564206e6f74207b202f70705f636c6970207472756520646566207d206966207d206465660d0a 2f42207b207b202f706963745f7931206578636820646566202f706963745f7831206578636820646566202f706963745f7932206578636820646566202f7069 63745f7832206578636820646566207d0d0a73746f70706564206e6f74207b202f7363616c655f7468655f70696374757265207472756520646566207d206966 207d206465660d0a07000000fc020100000000000000040000002d010300040000002d0101000500000004010b000000070000001b04cb004b01000000000500 000004010d000000fc00000026062500ed01eb0170705f636c69700d0a7b2070705f63782070705f6379206d6f7665746f2070705f637764203020726c696e65 746f20302070705f63687420726c696e65746f0d0a70705f637764206e6567203020726c696e65746f20636c6970206e657770617468207d2069660d0a736361 6c655f7468655f70696374757265200d0a7b202f706963745f793220706963745f793220706963745f79312061646420646566202f706963745f783220706963 745f783220706963745f783120616464206465660d0a20202f7363616c655f7820706963745f783220706963745f78312073756220706963745f626f785f7832 20706963745f626f785f78312073756220646976206465660d0a20202f7363616c655f7920706963745f793220706963745f79312073756220706963745f626f 785f793120706963745f626f785f79322073756220646976206465660d0a20202f706963745f6b7820706963745f7831207363616c655f7820706963745f626f 785f7831206d756c2073756220646566202f706963745f6b7920706963745f7931207363616c655f7920706963745f626f785f7932206d756c20737562206465 660d0a706963745f6b7820706963745f6b79207472616e736c617465207363616c655f78207363616c655f79207363616c65200d0a7d20696620656e640d0a66 f607000026062500e20fe00f252150532d41646f62652d322e3020455053462d322e300a25255469746c653a206e6574736f6c76655f736d616c6c2e6570730a 252543726561746f723a20666967326465762056657273696f6e20332e322050617463686c6576656c20302d62657461330a25254372656174696f6e44617465 3a20547565204a616e2032352031373a34343a323420323030300a2525466f723a206461726e6f6c6440636574757332642028446f7269616e2041726e6f6c64 290a25254f7269656e746174696f6e3a20506f7274726169740a2525426f756e64696e67426f783a2030203020333331203230330a252550616765733a20300a 2525426567696e53657475700a2525456e6453657475700a25254d61676e696669636174696f6e3a20312e303030300a2525456e64436f6d6d656e74730a2f24 4632707344696374203230302064696374206465660a24463270734469637420626567696e0a244632707344696374202f6d747278206d617472697820707574 0a2f636f6c2d31207b3020736574677261797d2062696e64206465660a2f636f6c30207b302e30303020302e30303020302e30303020737267627d2062696e64 206465660a2f636f6c31207b302e30303020302e30303020312e30303020737267627d2062696e64206465660a2f636f6c32207b302e30303020312e30303020 302e30303020737267627d2062696e64206465660a2f636f6c33207b302e30303020312e30303020312e30303020737267627d2062696e64206465660a2f636f 6c34207b312e30303020302e30303020302e30303020737267627d2062696e64206465660a2f636f6c35207b312e30303020302e30303020312e303030207372 67627d2062696e64206465660a2f636f6c36207b312e30303020312e30303020302e30303020737267627d2062696e64206465660a2f636f6c37207b312e3030 3020312e30303020312e30303020737267627d2062696e64206465660a2f636f6c38207b302e30303020302e30303020302e35363020737267627d2062696e64 206465660a2f636f6c39207b302e30303020302e30303020302e36393020737267627d2062696e64206465660a2f636f6c3130207b302e30303020302e303030 20302e38323020737267627d2062696e64206465660a2f636f6c3131207b302e35333020302e38313020312e30303020737267627d2062696e64206465660a2f 636f6c3132207b302e30303020302e35363020302e30303020737267627d2062696e64206465660a2f636f6c3133207b302e30303020302e36393020302e3030 3020737267627d2062696e64206465660a2f636f6c3134207b302e30303020302e38323020302e30303020737267627d2062696e64206465660a2f636f6c3135 207b302e30303020302e35363020302e35363020737267627d2062696e64206465660a2f636f6c3136207b302e30303020302e36393020302e36393020737267 627d2062696e64206465660a2f636f6c3137207b302e30303020302e38323020302e38323020737267627d2062696e64206465660a2f636f6c3138207b302e35 363020302e30303020302e30303020737267627d2062696e64206465660a2f636f6c3139207b302e36393020302e30303020302e30303020737267627d206269 6e64206465660a2f636f6c3230207b302e38323020302e30303020302e30303020737267627d2062696e64206465660a2f636f6c3231207b302e35363020302e 30303020302e35363020737267627d2062696e64206465660a2f636f6c3232207b302e36393020302e30303020302e36393020737267627d2062696e64206465 660a2f636f6c3233207b302e38323020302e30303020302e38323020737267627d2062696e64206465660a2f636f6c3234207b302e35303020302e3139302030 2e30303020737267627d2062696e64206465660a2f636f6c3235207b302e36333020302e32353020302e30303020737267627d2062696e64206465660a2f636f 6c3236207b302e37353020302e33383020302e30303020737267627d2062696e64206465660a2f636f6c3237207b312e30303020302e35303020302e35303020 737267627d2062696e64206465660a2f636f6c3238207b312e30303020302e36333020302e36333020737267627d2062696e64206465660a2f636f6c3239207b 312e30303020302e37353020302e37353020737267627d2062696e64206465660a2f636f6c3330207b312e30303020302e38383020302e38383020737267627d 2062696e64206465660a2f636f6c3331207b312e30303020302e38343020302e30303020737267627d2062696e64206465660a0a656e640a736176650a2d3236 2e30203234372e30207472616e736c6174650a31202d31207363616c650a0a2f6370207b636c6f7365706174687d2062696e64206465660a2f6566207b656f66 696c6c7d2062696e64206465660a2f6772207b67726573746f72657d2062696e64206465660a2f6773207b67736176657d2062696e64206465660a2f7361207b 736176657d2062696e64206465660a2f7273207b726573746f72657d2062696e64206465660a2f6c207b6c696e65746f7d2062696e64206465660a2f6d207b6d 6f7665746f7d2062696e64206465660a2f726d207b726d6f7665746f7d2062696e64206465660a2f6e207b6e6577706174687d2062696e64206465660a2f7320 7b7374726f6b657d2062696e64206465660a2f7368207b73686f777d2062696e64206465660a2f736c63207b7365746c696e656361707d2062696e6420646566 0a2f736c6a207b7365746c696e656a6f696e7d2062696e64206465660a2f736c77207b7365746c696e6577696474687d2062696e64206465660a2f7372676220 7b736574726762636f6c6f727d2062696e64206465660a2f726f74207b726f746174657d2062696e64206465660a2f7363207b7363616c657d2062696e642064 65660a2f7364207b736574646173687d2062696e64206465660a2f6666207b66696e64666f6e747d2062696e64206465660a2f7366207b736574666f6e747d20 62696e64206465660a2f736366207b7363616c65666f6e747d2062696e64206465660a2f7377207b737472696e6777696474687d2062696e64206465660a2f74 72207b7472616e736c6174657d2062696e64206465660a2f746e74207b647570206475702063757272656e74726762636f6c6f720a202034202d3220726f6c6c 2064757020312065786368207375622033202d3120726f6c6c206d756c206164640a202034202d3220726f6c6c2064757020312065786368207375622033202d 3120726f6c6c206d756c206164640a202034202d3220726f6c6c2064757020312065786368207375622033202d3120726f6c6c206d756c206164642073726762 7d0a202062696e64206465660a2f736864207b647570206475702063757272656e74726762636f6c6f722034202d3220726f6c6c206d756c2034202d3220726f 6c6c206d756c0a202034202d3220726f6c6c206d756c20737267627d2062696e64206465660a202f44726177456c6c69707365207b0a092f656e64616e676c65 2065786368206465660a092f7374617274616e676c652065786368206465660a092f797261642065786368206465660a092f787261642065786368206465660a 092f792065786368206465660a092f782065786368206465660a092f736176656d6174726978206d7472782063757272656e746d6174726978206465660a0978 207920747220787261642079726164207363203020302031207374617274616e676c6520656e64616e676c65206172630a09636c6f7365706174680a09736176 656d6174726978207365746d61747269780a097d206465660a0a2f2446327073426567696e207b24463270734469637420626567696e202f2446327073456e74 6572656453746174652073617665206465667d206465660a2f2446327073456e64207b2446327073456e7465726564537461746520726573746f726520656e64 7d206465660a2525456e6450726f6c6f670a0a2446327073426567696e0a3130207365746d697465726c696d69740a6e202d313030302035313131206d202d31 303030202d31303030206c2036393437202d31303030206c20363934372035313131206c20637020636c69700a20302e303630303020302e3036303030207363 0a372e35303020736c770a2520456c6c697073650a6e2033313135203336393520363531203430392030203336302044726177456c6c6970736520677320636f 6c3020732067720a0a2520506f6c796c696e650a6e20323932362033353739206d20333236332033353739206c20333236332033383331206c20323932362033 383331206c20637020677320636f6c302073206772200a25204172630a6773206e20353034352e3020333734322e33203137342e32203133302e392034392e31 206172636e0a677320636f6c3020732067720a2067720a0a2520456c6c697073650a6e2035303538203335373920313237203432203020333630204472617745 6c6c6970736520677320636f6c3020732067720a0a2520506f6c796c696e650a6e20343933312033353739206d20343933312033383734206c20677320636f6c 302073206772200a2520506f6c796c696e650a6e20353138342033353739206d20353138342033383734206c20677320636f6c302073206772200a2520417263 0a6773206e20353530362e3520333734332e38203137322e37203133312e312034382e39206172636e0a677320636f6c3020732067720a2067720a0a2520456c 6c697073650a6e20353532302033353739203132372034322030203336302044726177456c6c6970736520677320636f6c3020732067720a0a2520506f6c796c 696e650a6e20353339332033353739206d20353339332033383734206c20677320636f6c302073206772200a2520506f6c796c696e650a6e2035363435203335 3739206d20353634352033383734206c20677320636f6c302073206772200a2520456c6c697073650a6e20353238382033363935203635312034303920302033 36302044726177456c6c6970736520677320636f6c3020732067720a0a2520506f6c796c696e650a6e203836392033393931206d203836392033383232206c20 313033372033383232206c20313033372033393931206c20637020677320636f6c302073206772200a2520506f6c796c696e650a6e2031313634203338323220 6d20313333312033383232206c20313333312033393931206c20313136342033393931206c20637020677320636f6c302073206772200a2520506f6c796c696e 650a6e20313136342033353238206d20313333312033353238206c20313333312033363937206c20313136342033363937206c20637020677320636f6c302073 206772200a2520506f6c796c696e650a6e203836392033353238206d20313033372033353238206c20313033372033363937206c203836392033363937206c20 637020677320636f6c302073206772200a2520506f6c796c696e650a6e20313033372033393036206d203131e604000026062500c109bf093634203339303620 6c20677320636f6c302073206772200a2520506f6c796c696e650a6e20313033372033363133206d20313136342033363133206c20677320636f6c3020732067 72200a2520506f6c796c696e650a6e203935342033363937206d203935342033383232206c20677320636f6c302073206772200a2520506f6c796c696e650a6e 20313234372033363937206d20313234372033383232206c20677320636f6c302073206772200a2520456c6c697073650a6e2033303036203130313320373431 203236332030203336302044726177456c6c6970736520677320302e3830207365746772617920656620677220677320636f6c3020732067720a0a2520456c6c 697073650a6e2031313031203336393520363531203430392030203336302044726177456c6c6970736520677320636f6c3020732067720a0a2520506f6c796c 696e650a31352e30303020736c770a6e20323830302031323936206d20323432332031363733206c20677320636f6c302073206772200a2520506f6c796c696e 650a6e20333137382031323936206d20333535352031363733206c20677320636f6c302073206772200a2520506f6c796c696e650a6e20333035312032363831 206d20333035312033313834206c20677320636f6c302073206772200a2520506f6c796c696e650a6e20343035392032363831206d2035313932203331383420 6c20677320636f6c302073206772200a2520506f6c796c696e650a6e20323137302032363831206d20313038302033313834206c20677320636f6c3020732067 72200a2520506f6c796c696e650a372e35303020736c770a6e2036363020373530206d203630302037353020363030203132313520363020617263746f203420 7b706f707d207265706561740a202036303020313237352035343930203132373520363020617263746f2034207b706f707d207265706561740a202035353530 203132373520353535302038313020363020617263746f2034207b706f707d207265706561740a20203535353020373530203636302037353020363020617263 746f2034207b706f707d207265706561740a20637020677320636f6c302073206772200a2520506f6c796c696e650a6e203838382031363733206d2038323820 3136373320383238203236323120363020617263746f2034207b706f707d207265706561740a2020383238203236383120353231372032363831203630206172 63746f2034207b706f707d207265706561740a20203532373720323638312035323737203137333320363020617263746f2034207b706f707d20726570656174 0a202035323737203136373320383838203136373320363020617263746f2034207b706f707d207265706561740a20637020677320302e383020736574677261 7920656620677220677320636f6c302073206772200a2520506f6c796c696e650a6e20323830302033313834206d20333432392033313834206c203334323920 33343738206c20323830302033343738206c20637020677320302e3830207365746772617920656620677220677320636f6c302073206772200a2520506f6c79 6c696e650a6e20343839392033313834206d20353532382033313834206c20353532382033343738206c20343839392033343738206c20637020677320302e38 30207365746772617920656620677220677320636f6c302073206772200a2520506f6c796c696e650a6e203738362033313834206d2031343135203331383420 6c20313431352033343738206c203738362033343738206c20637020677320302e3830207365746772617920656620677220677320636f6c302073206772200a 2f54696d65732d526f6d616e206666203330302e3030207363662073660a343339342031303733206d0a67732031202d31207363202855736572732920636f6c 302073682067720a2f54696d65732d526f6d616e206666203330302e3030207363662073660a3637352031313235206d0a67732031202d312073632028417070 6c69636174696f6e732920636f6c302073682067720a2f54696d65732d526f6d616e206666203237302e3030207363662073660a333330302032353530206d0a 67732031202d3120736320284661756c7420546f6c6572616e63652920636f6c302073682067720a2f54696d65732d526f6d616e206666203237302e30302073 63662073660a333435302032313735206d0a67732031202d3120736320284c6f61642042616c616e63696e672920636f6c302073682067720a2f54696d65732d 526f6d616e206666203138302e3030207363662073660a323932362033343336206d0a67732031202d3120736320285365727665722920636f6c302073682067 720a2f54696d65732d526f6d616e206666203138302e3030207363662073660a333031302033333039206d0a67732031202d3120736320284e532920636f6c30 2073682067720a2f54696d65732d526f6d616e206666203138302e3030207363662073660a353032352033343336206d0a67732031202d312073632028536572 7665722920636f6c302073682067720a2f54696d65732d526f6d616e206666203138302e3030207363662073660a353130392033333039206d0a67732031202d 3120736320284e532920636f6c302073682067720a2f54696d65732d526f6d616e206666203234302e3030207363662073660a323335382031313533206d0a67 732031202d312073632028436c69656e74204c6962726172792920636f6c302073682067720a2f54696d65732d526f6d616e206666203234302e303020736366 2073660a3238323020393531206d0a67732031202d3120736320284e532920636f6c302073682067720a2f54696d65732d526f6d616e206666203138302e3030 207363662073660a3931322033343336206d0a67732031202d3120736320285365727665722920636f6c302073682067720a2f54696d65732d526f6d616e2066 66203138302e3030207363662073660a3939362033333039206d0a67732031202d3120736320284e532920636f6c302073682067720a2f54696d65732d526f6d 616e206666203237302e3030207363662073660a3930302032343735206d0a67732031202d3120736320285265736f7572636520416c6c6f636174696f6e2920 636f6c302073682067720a2f54696d65732d526f6d616e206666203237302e3030207363662073660a313132352032313735206d0a67732031202d3120736320 285265736f7572636520446973636f766572792920636f6c302073682067720a2f54696d65732d526f6d616e206666203234302e3030207363662073660a3235 35302031383935206d0a67732031202d3120736320284e53204167656e742920636f6c302073682067720a2446327073456e640a72730a661000000026062500150013000d0a70705f7361766520726573746f72650d0a2e06000000260626000200010006000000260626000200000004000000f0010000030000000000}} }}{\b\lang1024\langfe1024\noproof \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\field{\*\fldinst {\b\lang1024\langfe1024\noproof HYPERLINK \\l ID_SYSTEM}{\b\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f00530059005300540045004d0023000000}}}{\fldrslt {Figure 1-1}}}{ shows the global conceptual picture of the NetSolve system. In this figure, we can see the three major components of the system: \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19\lang1024\langfe1024\noproof \bullet \tab }{\lang1024\langfe1024\noproof The NetSolve client, \par }{\fs19\lang1024\langfe1024\noproof \bullet \tab }{\lang1024\langfe1024\noproof The NetSolve agent, \par }{\fs19\lang1024\langfe1024\noproof \bullet \tab }{\lang1024\langfe1024\noproof The NetSolve computational resources (or servers). \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { The figure also shows the relation NetSolve has to the applications that use it. NetSolve and systems like it are often referred to as Grid Middleware; this figure helps to make the reason for this terminology clearer. The shaded parts of the figure represent the NetSolve system. It can be seen that NetSolve acts as a glue layer that brings the application or user together with the hardware and/or software it needs to complete useful tasks. \par At the top tier, the NetSolve client library is linked in with the user's application. The application then makes calls to NetSolve's application programming interface (API) for specific services. Through the API, NetSolve client-users gain access to aggregate resources without the users needing to know anyt hing about computer networking or distributed computing. In fact, the user does not even have to know remote resources are involved. \par The NetSolve agent maintains a database of NetSolve servers along with their capabilities (hardware performance and allocate d software) and dynamic usage statistics. It uses this information to allocate server resources for client requests. The agent finds servers that will service requests the quickest, balances the load amongst its servers and keeps track of failed ones. \par The NetSolve server is a daemon process that awaits client requests. The server can run on single workstations, clusters of workstations, symmetric multi-processors or machines with massively parallel processors. A key component of the NetSolve server is a so u rce code generator which parses a NetSolve problem description file (PDF). This PDF contains information that allows the NetSolve system to create new modules and incorporate new functionalities. In essence, the PDF defines a wrapper that NetSolve uses to call functions being incorporated. \par The (hidden) semantics of a NetSolve request are: \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\tab }{\lang1024\langfe1024\noproof i.\tab Client contacts the agent for a list of capable servers. \par \tab ii.\tab Client contacts server and sends input parameters. \par \tab iii.\tab Server runs appropriate service. \par \tab iv.\tab Server returns output parameters or error status to client. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {No root/superuser privileges are needed to install or use any component of the NetSolve system. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _247}{\*\bkmkend _247} 1.3. Who is the NetSolve User? \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { There are two types of NetSolve users. The first type of user is one who installs and accesses only the client interface(s) and utilizes existing pools of resources (agent(s) and server(s)). The second type of NetSolve user installs and administrates his o wn NetSolve system (client, agent(s), server(s)), and potentially enables his software to be used by NetSolve. This Users' Guide addresses the needs of both types of users. If the user wishes to only install the client interface(s), he should follow instr uctions in }{\i Part II. The User's Manual}{. However, if the users wishes to install client, agent(s), and server(s), he should follow the instructions in }{\i Part III. The Administrator's Manual}{. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Note that the term "administrates" or "administrator" here simply refe rs to the person setting up and maintaining the NetSolve agent and server components -- NO ROOT PRIVILEGES ARE NEEDED TO INSTALL OR USE ANY COMPONENT OF THE NetSolve SYSTEM. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _253}{\*\bkmkend _253} 1.4. The Status of NetSolve \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {The official release of NetSolve-1.4 is July, 2001. Features implemented in this release include a new Java GUI to aid in the creation of PDFs, IBP-enabled clients and servers, and more server modules for sparse matrix computations. The Java interface and the Globus proxy are currently being updated and are not available for this release. A Microsoft Excel interface is also under development. NetSolve has been recognized as a significant effort in research and development, and was named in }{\i R & D Magazine's top 100 list for 1999}{. \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 2. Related Projects and Systems}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 2. Related Projects and Systems}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_RELATED}{\*\bkmkend ID_RELATED }Chapter 2. Related Projects and Systems \par }\pard\plain \ql \li960\ri0\sb249\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {There are a variety of related projects. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {CONDOR \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab }{\i Condor (http://www.cs.wisc.edu/condor/ )is a software system that runs on a cluster of workstations to harness wasted CPU cycles. A Condor pool consists of any number of machines, of possibly different architectures and operating systems, that are connected by a network. \par }\pard \ql \li1440\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1440\itap0 {NetSolve currently has the ability to access CONDOR pools as its computational resource. With little effort, the server can be configured to submit the client's request to an existing CONDOR pool, collect the results, and send them to the client. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Globus \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab }{\i The Globus project (htt p://www.globus.org/) is developing the fundamental technology that is needed to build computational grids, execution environments that enable an application to integrate geographically-distributed instruments, displays, and computational and information r esources. Such computations may link tens of hundreds of these resources. \par }\pard \ql \li1440\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1440\itap0 { In its testing phase is a new NetSolve client which implements a Globus proxy to allow the client to utilize the Globus grid infrastructure if available. If not, the client resorts to its present behavior. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {IBP (Internet Backplane Protocol) \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab IBP (http://icl.cs.utk.edu/ibp/) is a storage management system which serves up writable storage as a wide-area network resource, allows for the remote direction of storage activities, and decouples the notion of user identification from storage. \par }\pard \ql \li1440\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1440\itap0 { Currently available in NetSolve are IBP-enabled clients and servers that allow NetSolve to allocate and schedule storage resources as part of its resource brokering. This leads to much improved performance and fault-tolerance when resources fail. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Legion \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Legion (http://legion.virginia.edu/) has been incorporated in such a way to allow the client-user to program using the NetSolve interface while leveraging the Legion meta-computing resources. The NetSolve c lient side uses Legion data-flow graphs to keep track of data dependencies. This effort has been extended only to the FORTRAN interfaces and was done by the Legion group at the University of Virginia. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {metaNEOS \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab }{\i The metaNEOS project (http://www-unix.mcs.an l.gov/metaneos/) integrates fundamental algorithmic research in optimization with research and infrastructure tool development in distributed systems management. Algorithms that can exploit the powerful but heterogeneous, high-latency and possibly failure -prone virtual hardware platform typical of metacomputing platforms have been developed in such areas as global optimization, integer linear optimization, integer nonlinear optimization, combinatorial optimization, and stochastic optimization. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Ninf \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Ninf (http://ninf.etl.go.jp) and NetSolve are remote computing systems which are oriented to provide numerical computations. These two systems are very similar to each other in their design and motivation. Adapters have been implemented to enable each sys tem to use numerical routines installed on the other. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {NWS (Network Weather Service) \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab NWS (http://www.nws.npaci.edu/NWS/) is a system that uses sensor processes on workstations to monitor the cpu and network connection. It constantly collects statistics on these entities and has the ability to incorporate statistical models to run on the collected data to generate a forecast of future behavior. \par }\pard \ql \li1440\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1440\itap0 {NetSolve has integrated NWS into its agent to help its efforts of determining which computational servers would yield results to the client most efficiently. \par \sect }\sectd \linex0\headery0\footery0\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}\pard\plain \ql \li0\ri0\sl20\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof {\*\bkmkstart _310}{\*\bkmkend _310} \par }\pard \qc \li0\ri0\sb448\sl776\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\b\f1\fs59\lang1024\langfe1024\noproof II. The User's Manual \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The user has two choices when installing NetSolve. He can install only the client software and use existing pools of resources (agent(s) and server(s)), or he can install his own stand-alone NetSolve system (client, agent(s) and server(s)). If the user wishes to only install the client interface(s), he should follow instructions in }{\i Part II. The User's Manual}{ . However, if the users wishes to install client, agent(s), and server(s), he should follow the instructions in }{\i Part III. The Administrator's Manual}{. \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 3. Downloading, Installing, and Testing the Client}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 3. Downloading, Installing, and Testing the Client}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_CLIENT_45_INSTALL} {\*\bkmkend ID_CLIENT_45_INSTALL}Chapter 3. Downloading, Installing, and Testing the Client \par }\pard\plain \ql \li960\ri0\sb249\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { The NetSolve client software is available for UNIX/UNIX-like operating systems and Windows environments. All of the client, agent, and server software is bun dled into one tar-gzipped file. There is a separate distribution tar file for Unix and Windows installations. No root/superuser privileges are needed to install or use any component of the NetSolve system. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_DOWNLOADING} {\*\bkmkend ID_DOWNLOADING}3.1. Installation on Unix Systems \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { The NetSolve distribution tar file is available from the NetSolve homepage. (http://icl.cs.utk.edu/netsolve/download/NetSolve-1.4.tgz) Once the file has been downloaded, the following UNIX commands will create the }{\f2\fs21 NetSolve}{ directory: \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b gunzip -c NetSolve-1.4.tgz | tar xvf - \par }{From this point forward, we assume that the UNIX SHELL is from the }{\b csh}{ family. \par The installation of NetSolve is configured for a given architecture using the GNU tool }{\b\f2 configure}{. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> cd NetSolve \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> ./configure \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {For a list of all options that can be specified to configure, type \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> ./configure --help \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 Usage: configure [--with-cc=C_COMPILER] [--with-cnooptflags=C_NOOPT_FLAGS] \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 [--with-coptflags=C_OPT_FLAGS] [--with-fc=F77_COMPILER] \par [--with-fnooptflags=F77_NOOPT_FLAGS] \par [--with-foptflags=F77_OPT_FLAGS] \par [--with-ldflags=LOADER_FLAGS] \par [--with-nws=NWSDIR] \par [--with-ibp=IBPDIR] \par [--with-kerberos] \par [--with-proxy=PROXY_TYPE] \par [--with-outputlevel=OUTPUT_LEVEL] \par [--enable-infoserver=INFOSERVER] \par [--with-mpi=MPI_DIR] \par [--with-petsc=PETSCDIR] \par [--with-aztec=AZTEC_DIR] \par [--with-azteclib=AZTEC_LIB] \par [--with-superlu=SUPERLU_DIR] \par [--with-superlulib=SUPERLU_LIB] \par [--with-scalapacklib=SCALAPACK_LIB] \par [--with-blacslib=BLACS_LIB] \par [--with-lapacklib=LAPACK_LIB] \par [--with-blaslib=BLAS_LIB] \par [--with-mldk=MLDK_PATH] \par \par where \par C_COMPILER = default is to use gcc \par C_NOOPT_FLAGS = C compiler flags to be used on files that \par must be compiled without optimization \par C_OPT_FLAGS = C compiler optimization flags (e.g., -O) \par F77_COMPILER = default is to use g77 \par F77_NOOPT_FLAGS = Fortran77 compiler flags to be used on files that \par must be compiled without optimization \par F77_OPT_FLAGS = Fortran77 compiler optimization flags (e.g., -O) \par LOADER_FLAGS = Flags to be passed only to the loader \par NWSDIR = directory where NWS is installed (o}{\f2\fs21 p}{\f2\fs21 tional) \par IBPDIR = directory where IBP is installed (o}{\f2\fs21 p}{\f2\fs21 tional) \par PROXY_TYPE = currently supported values are netsolve \par and globus (default is netsolve) \par OUTPUT_LEVEL = currently supported values are debug, view, \par and none (default is view) \par INFOSERVER = currently supported values are alone and \par nothing specified (default is not alone, \par where nothing is specified). \par MPI_DIR = location of the MPI directory (optional, \par assumes MPICH directory structure) \par (default is /usr/local/mpich-1.2.1). \par PETSCDIR = location of PETSc installation directory (optional) \par AZTEC_DIR = location of Aztec installation directory (optional) \par AZTEC_LIB = Aztec link line (optional) \par SUPERLU_DIR = location of SuperLU installation directory (optional) \par SUPERLU_LIB = SuperLU link line (optional) \par SCALAPACK_LIB = ScaLAPACK link line (optional) \par BLACS_LIB = MPIBLACS link line (optional) \par LAPACK_LIB = LAPACK link line (optional) \par BLAS_LIB = BLAS link line (optional) \par MLDK_PATH = Path to MathLink Development Kit (o}{\f2\fs21 p}{\f2\fs21 tional) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {All arguments are optional. The options particularly pertinent to NetSolve are: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 --with-nws=NWSDIR location of NWS installation dir \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 --with-ibp=IBPDIR location of IBP installation dir \par --with-kerberos use Kerberos5 client authe}{\f2\fs21 n}{\f2\fs21 tication \par --with-proxy which Proxy? (netsolve, globus) \par --with-outputlevel output level (d}{\f2\fs21 e}{\f2\fs21 bug,view,none) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 --enable-infoserver[=alone] use InfoServer [alone] \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The NetSolve service options are: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 --with-petsc=PETSCDIR location of PETSc install}{\f2\fs21 a}{\f2\fs21 tion dir \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 --with-petsclibdir=PETSC_LIB_DIR location of PETSc library \par --with-aztec=AZTEC_DIR location of Aztec install}{\f2\fs21 a}{\f2\fs21 tion dir \par --with-azteclib=AZTEC_LIB Aztec link line \par --with-superlu=SUPERLU_DIR location of SuperLU insta}{\f2\fs21 l}{\f2\fs21 lation dir \par --with-superlulib=SUPERLU_LIB SuperLU link line \par --with-mpi=MPI_DIR location of MPI Root Dire}{\f2\fs21 c}{\f2\fs21 tory \par --with-lapacklib=LAPACK_LIB LAPACK link line \par --with-scalapacklib=SCALAPACK_LIB ScaLAPACK link line \par --with-blacslib=BLACS_LIB MPIBLACS link line \par --with-blaslib=BLAS_LIB BLAS link line \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 --with-mldk=MLDK_PATH Path to MathLink Development Kit \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { The configure script creates two main files, ./conf/Makefile.$NETSOLVE_ARCH.inc and ./conf/Makefile.inc. These files are created from the templates ./conf/Makefile.generic-arch and ./conf/Makefile.inc.in respectively. $N ETSOLVE_ARCH is the string printed by the command ./conf/config.guess, with all '-' and '.' characters converted to '_' characters. The variable $NETSOLVE_ROOT is the complete path name to the installed NetSolve directory and defined in }{\f2\fs21 ./conf/Makefile.inc}{. These *.inc files are included by the Makefiles that build the NetSolve system. Manually editing these configuration files is strongly discouraged. However, if the user prefers to edit this file, details of the }{\f2\fs21 $NETSOLVE_ROOT/conf/Makefile.$NETSOLVE_ARCH.inc}{ file are explained in }{\field{\*\fldinst { HYPERLINK \\l ID_CONF_45_DEF}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f0043004f004e0046005f00340035005f0044004500460023000000}}}{\fldrslt {Section 12.1}}}{. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Typing }{\b\f2 make}{ in the }{\f2\fs21 NetSolve}{ directory will give instructions to complete the compilation. A typical client compilation includes: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> make C Fortran tools test \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {to build the C and Fortran client interfaces, NetSolve management tools (see }{\field{\*\fldinst { HYPERLINK \\l ID_TOOLS}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f0054004f004f004c00530023000000}}}{\fldrslt {Chapter 16}}}{), and NetSolve test suite (see }{\field{\*\fldinst { HYPERLINK \\l ID_TESTING}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f00540045005300540049004e00470023000000}}}{\fldrslt {Section 13.2}}}{). To build the Matlab client interface to NetSolve, type \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> make matlab \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {and to build the Mathematica client interface to NetSolve, type \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> make mathematica \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {As previously stated, the Java client interface is in the process of being updated, and is not available in release 1.4 of NetSolve. After a successful c ompilation process, the appropriate binaries and/or libraries can be found in the }{\f2\fs21 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH}{ and/or }{\f2\fs21 $NETSOLVE_ROOT/lib/$NETSOLVE_ARCH}{ directories respectively. Thus, to execute a NetSolve binary, the user must either execute the command from within the }{\f2\fs21 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH}{ directory, or add this directory name to his UNIX }{\f2\fs21 path}{ variable. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_CLIENT_45_TESTING} {\*\bkmkend ID_CLIENT_45_TESTING}3.2. Testing the Unix installation \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { Testing solely the client software means that a pre-existing NetSolve system will be contacted, possibly the default agent and servers running at the University of Tennessee. That system can be contacted via the host }{\b\f2 netsolve.cs.utk.edu}{ which should always be running an agent. The step-by-step procedure to test your NetSolve client installation is as follows: \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\tab 1.\tab }{\b cd NetSolve \par \tab }{2.\tab }{\b make test \par \tab }{3.\tab }{\b setenv NETSOLVE_AGENT netsolve.cs.utk.edu \par \tab }{4.\tab }{\b Test \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {While the tester is running, it prints messages about its executi on. This test tests only the C and Fortran77 interfaces. Details of this process are explained in the following chapters. For more information on the C and Fortran77 interfaces, see }{\field{\*\fldinst { HYPERLINK \\l ID_CFORTRAN}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d000000490044005f00430046004f0052005400520041004e0023000000}}}{\fldrslt {Chapter 5}}}{. }{\field{\*\fldinst { HYPERLINK \\l ID_MATLAB}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f004d00410054004c004100420023000000}}}{\fldrslt {Chapter 6}}}{ and }{\field{\*\fldinst { HYPERLINK \\l ID_MATHEMATICA}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f004d0041005400480045004d004100540049004300410023000000}}}{\fldrslt {Chapter 7}}}{ detail how to test the Matlab and Mathematica interfaces, respectively. \par If an error is encountered during testing, refer to the Troubleshooting section of the }{\i Errata file}{ (http://icl.cs.utk.edu/netsolve/errata.html) for NetSolve. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_CLIENT_45_WIN32} {\*\bkmkend ID_CLIENT_45_WIN32}3.3. Installation on Windows systems \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { This section describes the installation and testing of the Windows version of the NetSolve client software. At present, the software is distributed in the form of a self-extracting exe file. An }{\i InstallShield}{ setup is being developed to simplify the installation instructions, and this setup will be available soon. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The contents of the self-extracting exe file are as follows, where }{\f2\fs21 NETSOLVE_DIR}{ refers to the directory where you have unzipped the distribution. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 NETSOLVE_DIR\\ \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab This directory contains the readme file and an installation script. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 NETSOLVE_DIR\\lib \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab This directory contains the NetSolve client library. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 NETSOLVE_DIR\\matlab \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab This directory contains the matlab binaries. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 NETSOLVE_DIR\\tools \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab This directory contains various tools for managing NetSolve. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 NETSOLVE_DIR\\testing \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab This directory contains various sample binary test programs that you can run to verify your installation. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The installation process is quite simple. \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\tab a.\tab Run the exe you downloaded from the NetSolve webpage. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {To determine the agent host name, the user can issue the following command: \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\tab a.\tab }{\b cd NETSOLVE_DIR\\tools \par \tab }{b.\tab }{\b getagent \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {To set a new agent host name, the user must issue the following command: \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\tab a.\tab }{\b cd NETSOLVE_DIR\\tools \par \tab }{b.\tab }{\b setagent [agent host name] \par }\pard \ql \li1392\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1392\itap0 {If the agent host name is not specified on the command line, you will be prompted for a host name. You will have the option of specifying a name or accepting the cu rrent agent name set in the registry. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The de-installation process is quite similar. \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\tab a.\tab }{\b cd NETSOLVE_DIR \par \tab }{b.\tab }{\b netsolve_install -uninstall \par }\pard \ql \li1392\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1392\itap0 {The above program removes the keys from the Windows registry. \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\tab c.\tab }{\b\f2 delete NETSOLVE_DIR \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _444}{\*\bkmkend _444}3.4. Testing the Windows installation \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {You can use the various programs in the }{\f2\fs21 NETSOLVE_DIR\\testing}{ directory to test your NetSolve installation. Remember that a valid NetSolve agent and server should already be running, and the required problems should be installed on the servers. Here is a list of test programs and the problems they make use of: \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b c_test \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab chartest, doubletest, inttest, stringlisttest, stringtest, totaltest \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b farming_test \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab doubletest \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b sequence_test \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab mpass, vpass, pass, multipass \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {For example, to perform a sample run of }{\b c_test}{, the user must do the following: \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\tab a.\tab Use }{\b setagent}{ to point to the correct agent host \par \tab b.\tab Run }{\b c_test.exe \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart _473}{\*\bkmkend _473} 3.4.1. Using NetSolve from Windows Matlab \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {A user new to Netsolve will find the Matlab interface very simple. The matlab interface is in }{\f2\fs21 NETSOLVE_DIR\\matlab}{. To access the interface \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\tab a.\tab Start up Matlab \par \tab b.\tab Click on File -> Set Path ... \par \tab c.\tab Add the }{\f2\fs21 NETSOLVE_DIR\\matlab}{ directory to the path \par }\pard \ql \li960\ri0\sb120\sa120\sl312\slmult0\widctlpar\faauto\rin0\lin960\itap0 {The interface consists of 4 NetSolve calls \par }\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\pard \ql \li60\ri60\sl312\slmult0\widctlpar\intbl\faauto\rin60\lin60 {\b\fs20 netsolve.dll\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\b\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\row }\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\pard \ql \li60\ri60\sl312\slmult0\widctlpar\intbl\faauto\rin60\lin60 {\b\fs20 netsolve_nb.dll \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\b\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360 \row }\pard \ql \li60\ri60\sl312\slmult0\widctlpar\intbl\faauto\rin60\lin60 {\b\fs20 netsolve_err.dll\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\b\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\row }\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\pard \ql \li60\ri60\sl312\slmult0\widctlpar\intbl\faauto\rin60\lin60 {\b\fs20 netsolve_errmsg.dll\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\b\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt \brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\row }\pard \ql \li0\ri0\sl-1\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\fs20\lang1024\langfe1024\noproof \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\fs20 Testing NetSolve within Matlab involves the following steps: \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\fs20 netsolve('?') \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\fs20 \~\tab This command prints the agent and servers currently available. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\fs20 netsolve \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\fs20 \~\tab This command prints the list of problems that can be solved. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\fs20 Help on any call can be obtained by typing just the call on the Matlab prompt. \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart _507}{\*\bkmkend _507} 3.4.2. Using the NetSolve Management Tools in Windows \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {There are various tools in the }{\f2\fs21 NETSOLVE_DIR\\tools}{ d irectory that allow the user to explore the NetSolve metacomputing system. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b netsolveconfig.exe [agent_name] \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab provides a list of agents and servers as seen by agent_name \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b netsolveproblems.exe [agent_name] \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab provides a list of problems that can be solved within the NetSolve framework as seen by agent_name \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 4. Introduction to the NetSolve Client}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 4. Introduction to the NetSolve Client}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_CLIENT_45_INTRO} {\*\bkmkend ID_CLIENT_45_INTRO}Chapter 4. Introduction to the NetSolve Client \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_PROBLEMSPECIFICATION} {\*\bkmkend ID_PROBLEMSPECIFICATION}4.1. NetSolve Problem Specification \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Solving a computational problem with NetSolve is a function evaluation: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 = () \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {where \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{\f2\fs21 }{ is a character string containing the name of the problem, \par }{\fs19 \bullet \tab }{\f2\fs21 }{ is a list of input objects, \par }{\fs19 \bullet \tab }{\f2\fs21 }{ is a list of output objects. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {An object is itself described by an }{\i object type}{ and a }{\i data type}{. The types available in the current version of NetSolve are shown in }{\field{\*\fldinst { HYPERLINK \\l ID_TABLE1}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f005400410042004c004500310023000000}}}{\fldrslt {Table 17-1}}}{ and }{\field{\*\fldinst { HYPERLINK \\l ID_TABLE1A}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f005400410042004c0045003100410023000000}}}{\fldrslt {Table 17-2}}}{. Rather than giving examples for each object type, we refer the reader to the programs in: }{\f2\fs21 $NETSOLVE_ROOT/src/Examples}{ and }{\f2\fs21 $NETSOLVE_ROOT/src/Testing}{. The user can also refer to }{\field{\*\fldinst { HYPERLINK \\l ID_MNEMONICS}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f004d004e0045004d004f004e0049004300530023000000}}}{\fldrslt {Section 17.1.2}}}{ for a description of the requirements for each NetSolve }{\i object type}{ as it relates to the problem description file. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_INTERFACES} {\*\bkmkend ID_INTERFACES}4.2. Available Client Interfaces \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {NetSolve provides a variety of client interfaces: \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{\f2\fs21 C, Fortran}{ interfaces are detailed in }{\field{\*\fldinst { HYPERLINK \\l ID_CFORTRAN}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d000000490044005f00430046004f0052005400520041004e0023000000}}}{\fldrslt {Chapter 5}}}{. \par }{\fs19 \bullet \tab }{\f2\fs21 Matlab}{ interface is detailed in }{\field{\*\fldinst { HYPERLINK \\l ID_MATLAB}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f004d00410054004c004100420023000000}}}{\fldrslt {Chapter 6} }}{. \par }{\fs19 \bullet \tab }{\f2\fs21 Mathematica}{ interface is detailed in }{\field{\*\fldinst { HYPERLINK \\l ID_MATHEMATICA}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f004d0041005400480045004d004100540049004300410023000000}}}{\fldrslt {Chapter 7}}}{. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {We are in the process of updating our }{\f2\fs21 Java}{ interface, thus this interface is not available in version 1.4 of NetSolve. We are also developing an }{ \f2\fs21 Excel}{ interface. \par In }{\field{\*\fldinst { HYPERLINK \\l ID_PROBLEMSPECIFICATION}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000019000000490044005f00500052004f0042004c0045004d00530050004500430049004600490043004100540049004f004e0023000000}}}{\fldrslt { Section 4.1}}}{, we described the input and output arguments of a NetSolve problem as lists of }{\i objects}{. The Matlab, Mathematica, and Java interfaces to NetSolve can manipulate objects directly and it is therefore very easy to call NetSolve from their interfaces once problem descriptions are known. From interfaces that are not object-oriented (C and Fortran), it is necessary to use a }{\i calling sequence}{ that describes the objects' features individually. For complete details, the user should refer to }{\field{\*\fldinst { HYPERLINK \\l ID_CFORTRAN}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d000000490044005f00430046004f0052005400520041004e0023000000}}}{\fldrslt {Chapter 5}}}{ and }{\field{\*\fldinst { HYPERLINK \\l ID_SPARSEMATRICES}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000013000000490044005f005300500041005200530045004d00410054005200490043004500530023000000}}}{\fldrslt {Section 17.1.1.1}}}{. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_AVAILABLE} {\*\bkmkend ID_AVAILABLE}4.3. Problems that can be solved with NetSolve \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {In order for a problem to be solved (i.e., a fu nction or library routine to be invoked) using NetSolve, there must exist a problem description file (PDF) corresponding to the problem/routine. A variety of PDFs are included with the NetSolve distribution. A user can also write his own PDF for his funct ion, as described in }{\field{\*\fldinst { HYPERLINK \\l ID_PDF}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000008000000490044005f0050004400460023000000}}}{\fldrslt {Chapter 17}}}{. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { The default NetSolve distribution provides only a limited subset of enabled software to test the various client interfaces. Interfaces have been written for a variety of software libraries (refer to }{\f2\fs21 $NETSOLVE_ROOT/problems/}{ ), but as the libraries themselves are not included in the NetSolve distribution, the library interfaces are not enabled. The user can, therefore, customize his installation to include these existing interfaces and/or new interfaces. Refer to } {\field{\*\fldinst { HYPERLINK \\l ID_ADMIN_45_DOWNLOAD}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000016000000490044005f00410044004d0049004e005f00340035005f0044004f0057004e004c004f004100440023000000}}}{\fldrslt {Section 13.1}}}{ for further details. \par It is possible to query a NetSolve agent to obtain a list and descriptions of the problems that can be solved by its respective servers. There are several ways of sending such queries. \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\tab }{\lang1024\langfe1024\noproof 1.\tab From the NetSolve homepage, it is possible to specify an agent name and run CGI scripts to obtain detailed information about NetSolve problems, including C and Fortran calling sequence specifications. \par \tab 2.\tab Problem lists and descriptions are also directly available from the Matlab interface, the Mathematica interface, and the Java GUI. \par \tab 3.\tab The NetSolve management tools described in }{\field{\*\fldinst {\lang1024\langfe1024\noproof HYPERLINK \\l ID_TOOLS}{\lang1024\langfe1024\noproof {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f0054004f004f004c00530023000000}}}{\fldrslt {\lang1024\langfe1024\noproof Chapter 16}}}{\lang1024\langfe1024\noproof give access to that information from the UNIX prompt. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _588}{\*\bkmkend _588} 4.4. Naming Scheme for a NetSolve problem \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {The full name of a NetSolve problem has two parts: \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\tab }{\lang1024\langfe1024\noproof i.\tab the }{\i\lang1024\langfe1024\noproof path}{\lang1024\langfe1024\noproof , and \par \tab ii.\tab the }{\i\lang1024\langfe1024\noproof nickname}{\lang1024\langfe1024\noproof . \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Let us demonstrate this with an example. The problem nicknamed }{\f2\fs21 ddot}{, which computes the inner product of two double-precision vectors, has the full name }{ \f2\fs21 /BLAS/Level1/ddot}{. This problem can be found in }{\f2\fs21 $NETSOLVE_ROOT/problems/blas}{. This full name has two purposes. First, when we display a list of problems, they are sorted alphabetically by their full name, and the problems are grouped by "directory". Second, by convention, the first element of the full name (e.g., }{\b\f2 BLAS}{ ) is the name of the numerical library containing the operation (problem). This convention has proven to be useful, as seen in }{\field{\*\fldinst { HYPERLINK \\l ID_WHATCALLINGSEQ}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000013000000490044005f005700480041005400430041004c004c0049004e00470053004500510023000000}}}{\fldrslt {Section 5.2}}}{. \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 5. C and Fortran77 Interfaces}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 5. C and Fortran77 Interfaces}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_CFORTRAN} {\*\bkmkend ID_CFORTRAN}Chapter 5. C and Fortran77 Interfaces \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _606}{\*\bkmkend _606} 5.1. Introduction \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {As previously mentioned in }{\field{\*\fldinst { HYPERLINK \\l ID_DOWNLOADING}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f0044004f0057004e004c004f004100440049004e00470023000000}}}{\fldrslt {Section 3.1}}}{, the C/Fortran77 client interfaces for NetSolve are built by typing \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> make C Fortran \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {in the directory }{\f2\fs21 $NETSOLVE_ROOT}{. This compilation produces the following two archive files: \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{\f2\fs21 $NETSOLVE_ROOT/lib/$NETSOLVE_ARCH/libnetsolve.a}{ : the C library \par }{\fs19 \bullet \tab }{\f2\fs21 $NETSOLVE_ROOT/lib/$NETSOLVE_ARCH/libfnetsolve.a}{ : the Fortran77 library \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {where NETSOLVE_ROOT is the full path name to the NetSolve directory and NETSOLVE_ARCH is the architecture name generated by configure. \par Before linking to one of these libraries, the user must include the appropriate header file in his program: \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{\f2\fs21 $NETSOLVE_ROOT/include/netsolve.h}{ in C, \par }{\fs19 \bullet \tab }{\f2\fs21 $NETSOLVE_ROOT/include/fnetsolve.h}{ in Fortran77. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { The Fortran77 include file is not mandatory, but increases the source program readability by allowing calling subroutines to manipulate the NetSolve error codes by variable name rather than by integer value. \par The Fortran77 interface is built on top of the C interface since all of the networking underneath NetSolve is written in C. However, we chose to write the Fortran77 interface with subroutines instead of functions (for reaso ns of compiler compatibilities). The C functions all return a NetSolve }{\i error code}{ equal to }{\b\f2 0}{ if the call was successful or to a negative value in case of error. }{\field{\*\fldinst { HYPERLINK \\l ID_ERRORCODES}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f004500520052004f00520043004f0044004500530023000000}}}{\fldrslt {Chapter 24}}}{ contains the list of all possible error cod es. The Fortran77 subroutines take an extra output integer argument (passed by reference) at the end of the calling sequence that contains the error code after completion of the call. The reference manuals for C and Fortran77 are in }{\field{\*\fldinst { HYPERLINK \\l ID_CREF}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000009000000490044005f00430052004500460023000000}}}{\fldrslt {Chapter 22}}}{ and }{\field{\*\fldinst { HYPERLINK \\l ID_FORTRANREF}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f0046004f0052005400520041004e0052004500460023000000}}}{\fldrslt {Chapter 23}}}{. \par The basic concepts here are the same as the ones we have introduced in }{\field{\*\fldinst { HYPERLINK \\l ID_MATLAB}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f004d00410054004c004100420023000000}}}{\fldrslt { Chapter 6}}}{ for the Matlab interface, especially the ability to call NetSolve in a blocking or nonblocking fashion. \par We describe the C and Fortran77 interfaces by the means of an example. In the following section we start developing the example by demonstrating how a user can obtain information about the calling sequence to a given problem. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_WHATCALLINGSEQ} {\*\bkmkend ID_WHATCALLINGSEQ}5.2. What is the Calling Sequence? \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {As described in }{\field{\*\fldinst { HYPERLINK \\l ID_PROBLEMSPECIFICATION}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000019000000490044005f00500052004f0042004c0045004d00530050004500430049004600490043004100540049004f004e0023000000}}}{\fldrslt {Section 4.1}}}{ , the C and Fortran77 interfaces, as they are not object-capable, need to use specific calling sequences that are more involved than the ones used from Matlab or Mathematica. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { Let us take a very simple example: the user wants to perform a dense linear system solve. The first thing to know, as stated in earlier chapters, is the name or IP address of a host running a NetSolve agent. The default NetSolve agent running at the University of Tennessee is aware of many servers that can perform the computation. In fact, a dense linear system solve is provided with the NetSolve distribution as default numer ical software for the server. The user has now two possible courses of action to find out about the problem. Let us assume that the user chooses to use the UNIX command line management tools (see }{\field{\*\fldinst { HYPERLINK \\l ID_TOOLS}{ {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f0054004f004f004c00530023000000}}}{\fldrslt {Chapter 16}}}{ for a complete description of these tools). The alternative would be to use the CGI scripts on the NetSolve homepage. \par }{\field{\*\fldinst { HYPERLINK \\l ID_EXPANDING_45_SERVER}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000018000000490044005f0045005800500041004e00440049004e0047005f00340035005f0053004500520056004500520023000000}}}{\fldrslt { Section 13.3}}}{ shows how the servers specify the calling sequence to a given problem. It is usual for se rvers to enforce the same calling sequence as the original numerical software and to give a problem the name of the original library function. In the example, }{\f2\fs21 dgesv()}{ is the name of an LAPACK subroutine and the user can therefore expect the calling sequence for the problem }{\f2\fs21 dgesv}{ to match the one of the subroutine. One can see in the problem list returned by }{\b NS_problems}{ a problem called }{\f2\fs21 linsol}{. In this example, }{\f2\fs21 linsol}{ is a simplified version of }{\f2\fs21 dgesv}{ and has a simplified calling sequence chosen by whomever started the first server that provides access to that problem. Since }{\f2\fs21 linsol}{ is not the name of an LAPACK subroutine, its calling sequence can be arbitrary. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> NS_problems netsolve.cs.utk.edu \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 /ImageProcessing/Filters/blur \par /LAPACK/LinearSystems/dgesv \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 /LAPACK/LinearSystems/linsol \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { Next, two situations are possible. First, the user already knows the numerical software (e.g., LAPACK) and may even have code already written in terms of this software. In this case, the }{\i switching}{ to NetSolve is immediate. The second possibility is that the user does not know the software. If this is the case, he needs to pay close attention to the output given by }{\b NS_probdesc}{ . The output from this command first gives the calling sequence as it would be invoked from Matlab, and then gives the calling sequence from C/Fortran. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> NS_probdesc netsolve.cs.utk.edu dgesv \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 -- dgesv -- From LAPACK - \par Compute the solution to a real system of linear equations \par A * X = b \par where A is an N-by-B matrix and X and B are N-by-NRHS matrices. \par Matlab Example : [x y z info ] = netsolve('dgesv',a,b) \par http://www.netlib.org/lapack/index.html \par * 2 objects in INPUT \par - input 0: Matrix Double Precision Real. \par Matrix A \par - input 1: Matrix Double Precision Real. \par Right hand side \par * 4 objects in OUTPUT \par - output 0: Matrix Double Precision Real. \par LU factors ( A = P*L*U) \par - output 1: Vector Integer. \par Vector of pivots (defines the P matrix) \par - output 2: Matrix Double Precision Real. \par Solution \par - output 3: Scalar Integer. \par INFO \par 0 successful \par <0 error on calling ? \par >0 QR algorithm failed \par * Calling sequence from C or Fortran \par 8 arguments \par - Argument #0: \par - number of rows of input object #0 (A) \par - number of columns of input object #0 (A) \par - number of rows of input object #1 (RHS) \par - Argument #1: \par - number of columns of input object #1 (RHS) \par - Argument #2: \par - pointer to input object #0 (A) \par - pointer to output object #0 (LU) \par - pointer to output object #0 (LU) \par - Argument #3: \par - leading dimension of input object #0 (A) \par - Argument #4: \par - pointer to output object #1 (PIVOT) \par - Argument #5: \par - pointer to input object #1 (RHS) \par - pointer to output object #1 (PIVOT) \par - pointer to output object #2 (SOLUTION) \par - Argument #6: \par - leading dimension of input object #1 (RHS) \par - Argument #7: \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 - pointer to output object #3 (INFO) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { This output can appear rather cryptic at first. Let us work through it step by step. First, the number of arguments in the calling sequence is 8. This means that the call from C will look like: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 status = netsl('dgesv()',X0,X1,X2,X3,X4,X5,X6,X7); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {And from Fortran77, the call to NetSolve would be: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 CALL FNETSL('dgesv()',STATUS,X0,X1,X2,X3,X4,X5,X6,X7) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Now, each argument is described in the information returned by }{\b NS_probdesc}{ and this description can be translated into meaningful variable names in the user so urce code. For instance, }{\f2\fs21 X2}{ should be a pointer to the matrix of the linear system, and }{\f2\fs21 X3}{ should be an integer that is the leading dimension of the matrix. We can now move on to the descriptions of the different ways of calling NetSolve from C or Fortran77. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _663}{\*\bkmkend _663} 5.3. Blocking Call \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { The blocking call to NetSolve from C or Fortran77 is the easiest to implement. Specifically, if the main program is in C, one calls the function, }{\f2\fs21 netsl()}{, and if the main program is in Fortran77, one calls the function, }{\f2\fs21 FNETSL()}{ . This C function returns an error code. It takes as arguments the name of a problem and the list of input data. These inputs are listed according to the calling sequence discussed in }{\field{\*\fldinst { HYPERLINK \\l ID_WHATCALLINGSEQ}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000013000000490044005f005700480041005400430041004c004c0049004e00470053004500510023000000}}}{\fldrslt {Section 5.2}}}{. The C prototype of the function is \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 int netsl(char *problem_name, ... < argument list > ...) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {and the Fortran77 prototype is \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 SUBROUTINE FNETSL( PROBLEM_NAME, STATUS, ... \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 & < argument list > ...) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {where }{\f2\fs21 PROBLEM_NAME}{ is a string and }{\f2\fs21 STATUS}{ is the integer status code returned by NetSolve. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Let us resume our example of the call to }{\f2\fs21 dgesv}{. In Fortran77, the direct call to LAPACK looks like \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 CALL DGESV( N, 1, A, LDA, IPIV, B, LDB, INFO ) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The equivalent blocking call to NetSolve is \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 CALL FNETSL('DGESV()', STATUS, N, 1, A, LDA, IPIV, \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 & B, LDB, INFO ) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The call in C is \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 status = netsl('dgesv()',n,1,a,lda,ipiv,b,ldb,&info); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Notice that the name of the problem is }{\i case insensitive}{ and that it is appended by an opening and a clos ing parenthesis. The parentheses are used by NetSolve to handle Fortran/C interoperability on certain platforms. In Fortran77, every identifier represents a pointer, but in C we actually had the choice to use pointers or not. We chose to use integer (int) for the sizes of the matrices/vectors, but pointers for everything else. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { From the user's point of view, the call to NetSolve is exactly equivalent to a call to LAPACK. One detail, however, needs to be mentioned. Most numerical software is written in Fortra n77 and requires users to provide workspace arrays as well as data, since there is no possibility for dynamic memory allocation. Because we preserved the exact calling sequence of the numerical software, we require the user to pass those arrays. But, sinc e the computation is performed remotely, workspace on the client side is meaningless. It will, in fact, be dynamically created on the server side. Therefore, when the numerical software would require workspace, the NetSolve user may provide a one-length ar ray for workspace. \par This is signaled in the output of }{\b NS_probdesc}{ by an argument description such as: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 - Argument #6: \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 - ignored \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _685}{\*\bkmkend _685} 5.4. Nonblocking Call \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { We developed this nonblocking call for the same reason we developed one for Matlab (see } {\field{\*\fldinst { HYPERLINK \\l ID_NONBLOCKING}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f004e004f004e0042004c004f0043004b0049004e00470023000000}}}{\fldrslt {Section 6.4}}}{): to allow the user to have some }{ \i NetSolve-parallelism}{. The nonblocking version of }{\f2\fs21 netsl()}{ is }{\f2\fs21 netslnb()}{. Similarly, the nonblocking version of }{\f2\fs21 FNETSL()}{ is }{\f2\fs21 FNETSLNB()}{. The user calls it exactly as he would call }{\f2\fs21 netsl()}{ or }{\f2\fs21 FNETSL()}{. If the call to }{\f2\fs21 netslnb()}{ or }{\f2\fs21 FNETSLNB()}{ is successful, it returns a request handler in the form of a (positive) integer. If it is not successful, it returns an error code. Continuing with our example: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 CALL FNETSLNB( 'DGESV()', REQUEST, N, 1, A, LDA, IPIV, \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 & B, LDB, INFO ) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {and in C : \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 request = netslnb('dgesv()',n,1,a,max,ipiv,b,max,&info); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {In case of an error, the request handler actually contains the (negative) NetSolve error code. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The next step is to check the status of the request. As in the Matlab interface, the user can choose to probe or to wait for the request. Probing is done by calling }{ \f2\fs21 netslpr()}{ or }{\f2\fs21 FNETSLPR()}{ which returns a NetSolve error code: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 CALL FNETSLPR( REQUEST, INFO ) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {and in C : \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 info = netslpr(request); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Typical error codes returned are }{\f2\fs21 NetSolveNotReady}{ and }{\f2\fs21 NetSolveOK}{ (see }{\field{\*\fldinst { HYPERLINK \\l ID_ERRORCODES}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f004500520052004f00520043004f0044004500530023000000}}}{\fldrslt {Chapter 24}}}{). Waiting is done by using }{\f2\fs21 netslwt()}{ or }{\f2\fs21 FNETSLWT()}{. This function blocks until the computation is complete and the result is available. Here is the Fortran77 call: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 CALL FNETSLWT( REQUEST, INFO ) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {and the C call : \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 info = netslwt(request); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {If the call is successful, the function/subroutine returns the error code }{\f2\fs21 NetSolveOK}{ and the result is in the user memory space. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _715}{\*\bkmkend _715} 5.5. Catching errors \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { Given a NetSolve error code, there is a function in the C and Fortran77 interface that prints explicit error messages to the standard error. The C call is : \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 netslerr(info); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {and in Fortran77 \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 CALL FNETSLERR( INFO ) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The user should refer to }{\field{\*\fldinst { HYPERLINK \\l ID_ERRORCODES}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f004500520052004f00520043004f0044004500530023000000}}}{\fldrslt {Chapter 24}}}{ for a list of all possible error codes. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _721}{\*\bkmkend _721} 5.6. Row- or column-major \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {To allow the NetSolve user to store her/his matrices either in row-wise or column-wise fashion, we also provide the function }{\f2\fs21 netslmajor()}{ in C and }{\f2\fs21 FNETSLMAJOR()}{ in Fortran77. This function can be called at any time in the user's program in C: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 netslmajor("col"); \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 netslmajor("row"); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {or in Fortran77: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 CALL FNETSLMAJOR('col') \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 CALL FNETSLMAJOR('row') \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {All of the subsequent calls to NetSolve will assume the corresponding major. The default values are of course row-wise for C and column-wise for Fortran77. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _729}{\*\bkmkend _729} 5.7. Limitations of the Fortran77 interface \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Due to Fortran77's restr ictions for the use of pointer and its inability to dynamically allocate memory, the Fortran77 interface to NetSolve does not support the PACKEDFILES and STRINGLIST object type. It also does not support output objects of type STRING. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _735}{\*\bkmkend _735} 5.8. Built-in examples \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {C and Fortran77 and Java examples are included in the NetSolve distribution in }{\f2\fs21 $NETSOLVE_ROOT/src/Examples}{. To build them, the user simply types }{\b\f2 make examples}{ in the top directory. The examples use different problems that have been given servers a t the University of Tennessee. They should help the user to understand how the system works. We also have full examples in C and Fortran in }{\field{\*\fldinst { HYPERLINK \\l ID_FULLEXAMPLEC}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000011000000490044005f00460055004c004c004500580041004d0050004c004500430023000000}}}{\fldrslt {Appendix A}}}{ and }{\field{\*\fldinst { HYPERLINK \\l ID_FULLEXAMPLEFORTRAN}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000017000000490044005f00460055004c004c004500580041004d0050004c00450046004f0052005400520041004e0023000000}}}{\fldrslt {Appendix B}}}{. \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 6. Matlab Interface}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 6. Matlab Interface}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_MATLAB}{\*\bkmkend ID_MATLAB} Chapter 6. Matlab Interface \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _744}{\*\bkmkend _744} 6.1. Introduction \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Building the Matlab interface by typing \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> make matlab \par }\pard \ql \li960\ri0\sb240\sa120\sl312\slmult0\widctlpar\faauto\rin0\lin960\itap0 {in the directory }{\f2\fs21 $NETSOLVE_ROOT}{ produces the four following }{\i mex-files}{ : \par }\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\pard \ql \li60\ri60\sl312\slmult0\widctlpar\intbl\faauto\rin60\lin60 {\f2\fs21 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH/netsolve.mex###\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\f2\fs21 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr \brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\row }\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\pard \ql \li60\ri60\sl312\slmult0 \widctlpar\intbl\faauto\rin60\lin60 {\f2\fs21 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH/netsolve_nb.mex###\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\f2\fs21 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\row }\pard \ql \li60\ri60\sl312\slmult0\widctlpar\intbl\faauto\rin60\lin60 {\f2\fs21 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH/netsolve_err.mex###\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\f2\fs21 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\row }\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\pard \ql \li60\ri60\sl312\slmult0\widctlpar\intbl\faauto\rin60\lin60 {\f2\fs21 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH/netsolve_errmsg.mex###\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\f2\fs21 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr \brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\row }\pard \ql \li0\ri0\sl-1\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\fs20\lang1024\langfe1024\noproof \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\fs20 The }{\b\f2\fs20 ###}{\fs20 part of the extension depends on the architecture (for instance, the extension is }{\b\f2\fs20 .mexsol}{\fs20 for the Solaris Operating System). These four files alone are the Matlab interface to NetSolve. To make these four files accessible to Matlab, the user must modify the MATLABPATH environment variable as: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> setenv MATLABPATH $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {It is also possible to use the Matlab command }{\b addpath}{. For more information about mex-files, the user can refer to [matlab]. In the following sections, the user will learn to call four new functions from Matlab: }{\f2\fs21 netsolve()}{, }{\f2\fs21 netsolve_nb()}{, }{\f2\fs21 netsolve_err()}{, and }{\f2\fs21 netsolve_errmsg()}{. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_FIRST}{\*\bkmkend ID_FIRST} 6.2. What to Do First \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Let us assume that the user has compiled the Matlab interface, set an agent name, started a Matlab session and is now ready to use NetSolve. In this section we describe those features of the interface that allow the user to obtain information about the currently available NetSolve syst em. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {As stated briefly in }{\field{\*\fldinst { HYPERLINK \\l ID_AVAILABLE}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f0041005600410049004c00410042004c00450023000000}}}{\fldrslt {Section 4.3}}}{ , it is possible to obtain the list of solvable problems from Matlab, as well as from the homepage CGI scripts or the management tools. In the case of Matlab, this information is obtained by typing the following command \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> netsolve \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 NetSolve - List of available problems - \par /BLAS-wrappers/Level3/dmatmul \par /BLAS-wrappers/Level3/zmatmul \par /BLAS/Level1/daxpy \par /BLAS/Level1/ddot \par /BLAS/Level1/zaxpy \par /BLAS/Level2/dgemv \par /BLAS/Level3/dgemm \par /BLAS/Level3/zgemm \par /LAPACK-wrapper/Simple/Eig_and_Singular/eig \par /LAPACK-wrapper/Simple/Linear_Equations/linsol \par /LAPACK/Simple/Linear_Equations/dgesv \par /LAPACK/Auxiliary/dlacpy \par /Mandelbrot/mandelbrot \par /QuickSort/DoublePrecision/dqsort \par /QuickSort/Integer/iqsort \par /SCALAPACK/LinearSystem/pdgesv \par /SCALAPACK/LinearSystem/pdposv \par /SCALAPACK/LinearSystem/plinsol \par /SuperLU-MA28/sparse_direct_solve \par ----------------------- \par [ output args ] = netsolve(problem name, input args) \par ----------------------- \par Information on a specific problem : netsolve(problem name) \par Information on the servers : netsolve('?') \par ----------------------- \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {where each line contains a full problem name. If the user would like more detailed information on a specific problem, e.g., }{\f2\fs21 eig}{, he can type \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> netsolve('eig') \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 -- eig -- Wrapper around the LAPACK routine DGEEV -- \par Simplified version of DGEEV. \par Computes the eigenvalues of a double precision real \par matrix A. Returns two double precision real \par vectors containing respectively the real parts and \par the imaginary parts of the eigenvalues. \par \par MATLAB Example : [r i ] = netsolve('eig',a) \par \par * 1 objects in INPUT \par - input 0: Matrix Double Precision Real. \par Matrix A \par * 2 objects in OUTPUT \par - output 0: Vector Double Precision Real. \par Real parts of the eigen values \par - output 1: Vector Double Precision Real. \par Imaginary parts of the eigen values \par -------------------------------------- \par Output Objects 0 and 1 can be merged. \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {This output gives a short description of the problem, an example in Matlab using }{\f2\fs21 netsolve()}{, the }{\i input}{ objects that must be supplied by the user, and the }{\i output}{ that will be returned to the user. This particular problem requires only one double-precision matrix on input. Notice that this matrix must be square (as stated in the description of the problem). If the user tries to call NetSolve for this problem with a rectangular matrix, he will receive an error message stating that the dimensions of the input are invalid. On output, the problem }{\f2\fs21 eig}{ will return two vectors, the real and imaginary parts of the eigenvalues of the input matrix, respectively. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Since Matlab provides a mechanism to manipulate complex objects, it is probable that the user would like to have }{\f2\fs21 eig}{ return one single complex vector instead of two separate real vectors. Thus, in the Matlab interface it is possible to }{\i merge}{ these two real output vectors into one complex vector. This point is further developed in the next section. \par The Matlab interface has another feature that is concerned not with the actual problem solving but with providing inf ormation about the NetSolve configuration itself. We have just seen how to get information about the problems handled by the NetSolve servers; it is also possible to obtain the physical locations of these servers. Let us assume that our NETSOLVE_AGENT env ironment variable is set to }{\b\f2 netsolve.cs.utk.edu}{ (see }{\field{\*\fldinst { HYPERLINK \\l ID_AGENT}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f004100470045004e00540023000000}}}{\fldrslt {Chapter 14}}}{ ). The command \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> netsolve('?') \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {produces the following output: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 NetSolve - List of available agents - \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 netsolve.cs.utk.edu(128.169.93.161) \par NetSolve - List of available servers - \par maruti.cs.berkeley.edu(128.32.36.83) \par cupid.cs.utk.edu(128.169.94.221) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 torc3.cs.utk.edu(128.169.93.74) (0 failures) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The same information can be obtained from the homepage CGI scripts or the management tools. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_BLOCKING} {\*\bkmkend ID_BLOCKING}6.3. Calling }{\b\f2\fs37\lang1024\langfe1024\noproof netsolve()}{\b\f1\fs41\lang1024\langfe1024\noproof to perform computation \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {The easiest way to perform a numerical computation in NetSolve is to call the function }{\f2\fs21 netsolve()}{. With this function, the user sends a blocking request to NetSolve. By }{\i blocking}{ we mean that after typing the c ommand in the Matlab session, the user resumes control only when the computation has been successfully completed on a server. The other way to perform computation is to send a }{\i nonblocking}{ request as described in }{\field{\*\fldinst { HYPERLINK \\ l ID_NONBLOCKING}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f004e004f004e0042004c004f0043004b0049004e00470023000000}}}{\fldrslt {Section 6.4}}}{. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Let us continue with the }{\f2\fs21 eig}{ example we started to develop in the preceding section. The user now knows that he has to provide a double-precision square matrix to NetSolve, and he knows that he is going to get two real vectors back (or one single complex vector). He first creates a 300 \'d7 300 matrix, for instance, \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> a = rand(300); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The call to NetSolve is now \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> [x y] = netsolve('eig',a) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {All the calls to }{\f2\fs21 netsolve()}{ will look the same. The left-hand side must contain the output arguments, in the same order as listed in the }{\i output description}{ (see }{\field{\*\fldinst { HYPERLINK \\l ID_FIRST}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f004600490052005300540023000000}}}{\fldrslt {Section 6.2}}}{). The first argument to }{\f2\fs21 netsolve()}{ is always the name of the problem. After this first argument the input arguments are listed, in the same order as they are listed in the }{\i input description}{ (see }{\field{\*\fldinst { HYPERLINK \\l ID_FIRST}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f004600490052005300540023000000}}}{\fldrslt {Section 6.2}}}{ ). This function does not have a fixed calling sequence, since the number of inputs and outputs depends on the problem the user wishes to solve. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Let us see what happens when we type: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> [x y] = netsolve('eig',a) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 Sending Input to Server zoot.cs.utk.edu \par Downloading Output from Server zoot.cs.utk.edu \par \par x = y = \par 10.1204 0 \par -0.9801 0.8991 \par -0.9801 -0.8991 \par -1.0195 0 \par -0.6416 0.6511 \par ... ... \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 ... ... \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {As mentioned earlier, the user can decide to regroup }{\b\f2 x}{ and }{\b\f2 y}{ into one single complex vector. Let us make it clear again that this possibility is a specificity of }{\f2\fs21 eig}{ and is not available in general for all problems. To merge }{\b\f2 x}{ and }{\b\f2 y}{, the user has to type: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> [x] = netsolve('eig',a) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 Sending Input to Server zoot.cs.utk.edu \par Downloading Output from Server zoot.cs.utk.edu \par \par x = \par 10.1204 \par -0.9801 + 0.8991i \par -0.9801 - 0.8991i \par -1.0195 \par -0.6416 + 0.6511i \par ......... \par ......... \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_NONBLOCKING} {\*\bkmkend ID_NONBLOCKING}6.4. Calling }{\b\f2\fs37\lang1024\langfe1024\noproof netsolve_nb() \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {The obvious drawback of the function }{\f2\fs21 netsolve()}{ is that while the computation is being performed remotely, the user must wait to regain control of the prompt. To address this drawback, we provide a }{\i nonblocking}{ function, }{\f2\fs21 netsolve_nb()}{. The user can then do work in }{\i parallel}{ and check for the completion of the request later. He can even send multiple reque sts to NetSolve. Thanks to the load-balancing strategy implemented in the NetSolve agent, all these requests will be solved on different machines if possible, achieving some }{\i NetSolve-parallelism}{. Let us now describe this function with the }{ \f2\fs21 eig}{ example. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {As in }{\field{\*\fldinst { HYPERLINK \\l ID_BLOCKING}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000d000000490044005f0042004c004f0043004b0049004e00470023000000}}}{\fldrslt {Section 6.3}}}{, the user creates a 300 \'d7 300 matrix and calls NetSolve: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> a = rand(300); \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> [r] = netsolve_nb('send','eig',a) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Obviously, the calling sequence to }{\f2\fs21 netsolve_nb()}{ is a little different from the one to }{\f2\fs21 netsolve()}{ . The left-hand side always contains one single argument. Upon completion of this call, it will contain a }{\i NetSolve request handler}{. The right-hand side is composed of two parts: the }{\i action}{ to perform and the arguments that would be passed to }{\f2\fs21 netsolve()}{. In this example, the action to perform is }{\b\f2 'send'}{ , which means that we send a request to NetSolve. Throughout this section, we will encounter all of the possible actions, and they will be summarized in }{\field{\*\fldinst { HYPERLINK \\l ID_APPMATLAB}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f004100500050004d00410054004c004100420023000000}}}{\fldrslt {Chapter 21}}}{. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Let us resume our example and see what NetSolve answers to the first call to }{\f2\fs21 netsolve_nb()}{: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> [r] = netsolve_nb('send','eig',a) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 Sending Input to Server zoot.cs.utk.edu \par rd->request_id = 0 \par \par r = \par \par 0 \par \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 netsolve_nb()}{ returns a request handler: }{\b\f2 0}{ . This request handler will be used in the subsequent calls to the function. The request is being processed on }{\b\f2 cupid}{, and the result will eventually return. The user can obtain this result in one of two ways. The first one is to call }{\f2\fs21 netsolve_nb()}{ with the }{\b\f2 'probe'}{ action: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> [status] = netsolve_nb('probe',r) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 netsolve_nb()}{ returns the }{\i status}{ of a pending request. The right-hand side contains the action, as is required for }{\f2\fs21 netsolve_nb()}{ , and the request handler. This call returns immediately, and prints a message. Here are the two possible scenarios: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> [status] = netsolve_nb('probe',r) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 Not ready yet \par status = -1 \par ... \par >> [status] = netsolve_nb('probe',r) \par Result available \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 status = 1 \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {To obtain the result of the computation one must call }{\f2\fs21 netsolve_nb()}{ with the }{\b\f2 'wait'}{ action: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> [x y] = netsolve_nb('wait',r) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 Downloading Output from Server zoot.cs.utk.edu \par \par x = y = \par 10.1204 0 \par -0.9801 0.8991 \par -0.9801 -0.8991 \par -1.0195 0 \par -0.6416 0.6511 \par ... ... \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 ... ... \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {As with the }{\f2\fs21 netsolve()}{ function, one can merge the real part and the imaginary part into a single complex vector. The typical scenario is to call }{ \f2\fs21 netsolve_nb()}{ with the action }{\b\f2 'send'}{, then make repeated calls with the action }{\b\f2 'probe'}{ until there is nothing more to do than wait for the result. The user then calls }{\f2\fs21 netsolve_nb()}{ with the action }{\b\f2 'wait' }{. It is of course possible to call }{\f2\fs21 netsolve_nb()}{ with the action }{\b\f2 'wait'}{ before making any call with the action }{\b\f2 'probe'}{. One last action can be passed to }{\f2\fs21 netsolve_nb()}{, as shown here: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> netsolve_nb('status') \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {This command will return a description of all of the pending requests. Let us see how it works on this last complete example: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> a=rand(100); b = rand(150); \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> [r1] = netsolve_nb('send','eig',a) \par Sending Input to Server zoot.cs.utk.edu \par rd->request_id = 0 \par \par r1 = \par \par 0 \par \par >> [r2] = netsolve_nb('send','eig',b) \par Sending Input to Server zoot.cs.utk.edu \par rd->request_id = 1 \par \par r2 = \par \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 1 \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Now let us see what }{\b\f2 'status'}{ does: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> netsolve_nb('status') \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 --- NetSolve: pending requests --- \par Requests #0: 'eig', submitted to zoot.cs.utk.edu (160.36.58.152) \par was started 24 seconds ago. \par netsolveProbeRequest returned: 1, ns_errno = 0 \par Completed \par Requests #1: 'eig', submitted to zoot.cs.utk.edu (160.36.58.152) \par was started 7 seconds ago. \par netsolveProbeRequest returned: 1, ns_errno = 0 \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Completed \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The user can check what requests he has sent so far and obtain an estimation of the completion times. By using the }{\b\f2 'status'}{ action, the user can also determine whether a request is still running or has been completed. By sending multiple non-blocking requests to NetSolve and relying on the agent for load balancing, the user can achieve parallelism. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _875}{\*\bkmkend _875} 6.5. What Can Go Wrong? \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { During a computation, two classes of error can occur: NetSolve failures and user mistakes. Let us demonstrate a few examples: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> netsolve \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 NS:netsolveproxybasics.c:225: : connection refused \par Cannot contact agent \par ... \par >> [x] = netsolve('foo',a) \par unknown problem \par \par x = \par \par [] \par \par ... \par >> [x y] = netsolve('eig',a,a) \par 'eig' requires 1 objects in input (2 provided) \par bad problem input/output \par \par x = \par \par [] \par \par \par y = \par \par [] \par >> \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { In case of error, the different NetSolve functions print appropriate error messages. However, when the user writes Matlab scripts that call NetSolve, he/she needs ways to catch the errors while the script is running. Hence the functions described in the n ext section. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _880}{\*\bkmkend _880} 6.6. Catching NetSolve errors \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {There are two NetSolve functions that can be called from Matlab to catch errors. The first function, }{ \f2\fs21 netsolve_err()}{ takes no arguments and returns an integer that is the NetSolve error code returned by the last call to a NetSolve function (see }{\field{\*\fldinst { HYPERLINK \\l ID_ERRORCODES}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f004500520052004f00520043004f0044004500530023000000}}}{\fldrslt {Chapter 24}}}{ for a list of the possible error codes). Here is a call: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> e = netsolve_err \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 e = -11 \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The other function, }{\f2\fs21 netsolve_errmsg()}{ takes an error code as an argument and returns a string that contains the corresponding error message. A typical call to }{\f2\fs21 netsolve_errmsg()}{ is as follows: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> [msg] = netsolve_errmsg(netsolve_err) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 \par msg = \par \par bad problem input/output \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {With these two functions, it is possible to write Matlab scripts that call NetSolve and handle all of the NetSolve errors at runtime. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _890}{\*\bkmkend _890}6.7. Demo \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {A NetSolve-Matlab demo is available with the NetSolve distribution. It consists of a set of Matlab scrip ts that call NetSolve to compute parts of the Mandelbrot set. The main script is called }{\f2\fs21 mandel.m}{ and is located in }{\f2\fs21 $NETSOLVE_ROOT/src/Demo/mandelbrot/}{. To run the demo, just type }{\b mandel}{ at the Matlab prompt. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _896}{\*\bkmkend _896} 6.8. Optional: Testing the NetSolve BLAS interfaces \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { A NetSolve-Matlab BLAS test suite is available with the NetSolve distribution, and tests a subset of BLAS routines available in the NetSolve distribution. The user can test the reference implementation BLAS included in NetSolve or he could have enabled an optimized BLAS library during the configuration phase of NetSolve (}{\b ./configure --with-blaslib=BLAS_LIB}{) or hand modified the }{\f2\fs21 $NETSOLVE_ROOT/conf/Makefile.$NETSOLVE_ARCH.inc}{ to point to the optimized BLAS library. The user must then enable the BLAS in the }{\f2\fs21 $NETSOLVE_ROOT/server_config}{ file, and he/she is ready to run this test suite. The test suite consists of a set of Matlab scripts that test each of the BLAS interfaces available in NetSolve. The main script is called }{\f2\fs21 blas_test.m}{ and is located in }{\f2\fs21 $NETSOLVE_ROOT/src/Testing/matlab/}{. To run the BLAS test suite, type }{\b blas_test}{ at the Matlab prompt. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _905}{\*\bkmkend _905} 6.9. Optional: Testing the NetSolve LAPACK interfaces \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {A NetSolve-Matlab LAPACK test suite is available with the NetSolve distribution. If the use r enabled LAPACK during the configuration phase of NetSolve as instructed in }{\field{\*\fldinst { HYPERLINK \\l ID_ENABLING_45_LAPACK}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000017000000490044005f0045004e00410042004c0049004e0047005f00340035005f004c0041005000410043004b0023000000}}}{\fldrslt {Section 13.3.1}}}{ or hand modified the }{\f2\fs21 $NETSOLVE_ROOT/conf/Makefile.$NETSOLVE_ARCH.inc}{ to point to the LAPACK library and BLAS library, and has enabled LAPACK in the }{\f2\fs21 $NETSOLVE_ROOT/server_config}{ file, he/she may choose to run this test suite. Note that only a subset of LAPACK is included in the NetSolve distribution. The complete LAPACK library is not included as default numerical softw are for the server, and must be installed separately. The test suite consists of a set of Matlab scripts that test each of the LAPACK interfaces available in NetSolve. The main script is called }{\f2\fs21 lapack_test.m}{ and is located in }{\f2\fs21 $NETSOLVE_ROOT/src/Testing/matlab/}{. To run the LAPACK test suite, type }{\b lapack_test}{ at the Matlab prompt. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _914}{\*\bkmkend _914} 6.10. Optional: Testing the NetSolve ScaLAPACK interfaces \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { Likewise, a NetSolve-Matlab ScaLAPACK test suite is available with the NetSolve distribution. If the user enabled ScaLAPACK during the configuration phase of NetSolve as instructed in }{\field{\*\fldinst { HYPERLINK \\l ID_ENABLING_45_SCALAPACK}{ {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000001a000000490044005f0045004e00410042004c0049004e0047005f00340035005f005300430041004c0041005000410043004b0023000000}}}{\fldrslt {Section 13.3.2}}}{ or hand modified the }{\f2\fs21 $NETSOLVE_ROOT/conf/Makefile.$NETSOLVE_ARCH.inc}{ to point to the ScaLAPACK, MPIBLACS, BLAS, and MPI libraries, and has enabled ScaLAPACK in the }{\f2\fs21 $NETSOLVE_ROOT/server_config}{ file, he/she may choose to run this test suite. The ScaLAPACK library is not included as default numerical software for the server, and must be installed separately (as well as MPI). The test suite consists of a set of Matlab scripts that test each of the ScaLAPACK interfaces available in NetSolve. The main script is called }{\f2\fs21 scalapack_test.m}{ and is located in }{\f2\fs21 $NETSOLVE_ROOT/src/Testing/matlab/}{ . To run the ScaLAPACK test suite, type }{\b scalapack_test}{ at the Matlab prompt. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _923}{\*\bkmkend _923} 6.11. Optional: Testing the NetSolve 'sparse_iterative_solve' interface \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {The NetSolve }{\i 'sparse_iterative_solve'}{ interface to PETSc, Aztec, and ITPACK can only be tested if the user has enabled }{\i sparse_iterative_solve}{ in the }{\f2\fs21 $NETSOLVE_ROOT/server_config}{ file and has configured NetSolve with the respective paths to the PETSc library, Aztec library, and MPI library. The PETSc, Aztec, and ITPACK libraries are not included as default numerical software for the server, and mu st be installed separately (as well as MPI). Refer to }{\field{\*\fldinst { HYPERLINK \\l ID_ENABLING_45_ITERATIVE}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000001a000000490044005f0045004e00410042004c0049004e0047005f00340035005f0049005400450052004100540049005600450023000000}}}{\fldrslt {Section 13.3.3}}}{ for further details. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {This interface can be tested most effectively by using sparse matrices generated from collections such as the Harwell Boeing test collection on the }{\i Matrix Market homepage}{ (http://math.nist.gov/MatrixMarket/). Refer to the section on the webpage entitled }{\i Software}{, where the test matrices are available in C, Fortran, and Matlab. For ease of testing, several of the test matrices from this collection are included in the distribution of NetSolve. \par After Matlab has been invoked, the user can then call the test scripts }{\f2\fs21 petsc_test.m}{, }{\f2\fs21 aztec_test.m}{, and }{\f2\fs21 itpack_test.m}{ in the }{\f2\fs21 $NETSOLVE_ROOT/src/Testing/matlab/}{ directory, by typing \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> petsc_test \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {and \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> aztec_test \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {and \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> itpack_test \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {These scripts invoke the PETSc, Aztec, and ITPACK interfaces and check the validity of the computed solution. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Alternatively, the user can generate a series of Harwell Boeing matrix types (1-5), using the }{\f2\fs21 generate.m}{ script. To see a list of Harwell Boeing matrix types that can be generated, type \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> generate(0); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {And then call the functions }{\f2\fs21 petsc.m}{ and/or }{\f2\fs21 aztec.m}{ by typing \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> [A,rhs] = generate(1); \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> [x1,its1] = petsc(A,rhs); \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> [x2,its2] = aztec(A,rhs); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Note that the user can query for the list of arguments in the calling sequence to the routine by using the NetSolve tool routine. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> netsolve('sparse_iterative_solve') \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _950}{\*\bkmkend _950} 6.12. Optional: Testing the NetSolve 'sparse_direct_solve' interface \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {The NetSolve }{\i 'sparse_direct_solve'}{ interface to MA28 and SuperLU can only be tested if the user has enabled }{\i sparse_direct_solve}{ in the }{\f2\fs21 $NETSOLVE_ROOT/server_config}{ file and has configured NetSolve with the respective paths to the SuperLU and MPI libraries. The MA28 library is distributed with NetSolve in }{\f2\fs21 $NETSOLVE_ROOT/src/SampleNumericalSoftware/MA28/}{ as a small modification to the library was necessary to enable its use in NetSolve. The SuperLU library is not included as default numerical software for the server, and must be installed separately (as well as MPI). Refer to }{\field{\*\fldinst { HYPERLINK \\l ID_ENABLING_45_DIRECT}{ {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000017000000490044005f0045004e00410042004c0049004e0047005f00340035005f0044004900520045004300540023000000}}}{\fldrslt {Section 13.3.4}}}{ for further details. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {This interface can be tested most effectively by using sparse matrices generated from collections such as the Harwell Boeing test collection on the }{\i Matrix Market homepage}{ (http://math.nist.gov/MatrixMarket/). Refer to the section on the webpage entitled }{\i Software}{ , where the test matrices are available in C, Fortran, and Matlab. For ease of testing, several of the test matrices from this collection are included in the distribution of NetSolve. \par After Matlab has been invoked, the user can then call the test scripts }{\f2\fs21 ma28_test.m}{ and }{\f2\fs21 superlu_test.m}{ in the }{\f2\fs21 $NETSOLVE_ROOT/src/Testing/matlab/}{ directory, by typing \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> ma28_test \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {and \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> superlu_test \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {These scripts invoke the MA28 and SuperLU interfaces and check the validity of the computed solution. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Alternatively, the user can generate a series of Harwell Boeing matrix types (1-5), using the }{\f2\fs21 generate.m}{ script. To see a list of Harwell Boeing matrix types that can be generated, type \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> generate(0); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {And then call the functions }{\f2\fs21 ma28.m}{ and/or }{\f2\fs21 superlu.m}{ by typing \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> [A,rhs] = generate(1); \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 >> [x1] = ma28(A,rhs); \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> [x2] = superlu(A,rhs); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Note that the user can query for the list of arguments in the calling sequence to the routine by using the NetSolve tool routine. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> netsolve('direct_solve_serial') \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 7. Mathematica Interface}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 7. Mathematica Interface}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_MATHEMATICA} {\*\bkmkend ID_MATHEMATICA}Chapter 7. Mathematica Interface \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _979}{\*\bkmkend _979} 7.1. Introduction \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { Before compiling the NetSolve-Mathematica client interface, the user must have specified the pathname to the MathLink Development Kit during the configure phase of NetSolve (}{\b ./configure --with-mldk=MLDK_PATH}{), where }{\f2\fs21 MLDK_PATH}{ is the pathname. By default this value is set to }{\f2\fs21 $(HOME)/AddOns/MathLink/DevelopersKits/Linux/CompilerAdditions}{. Alternatively, the user could have manually edited the }{\f2\fs21 $NETSOLVE_ROOT/conf/Makefile.$NETSOLVE_ARCH.inc}{ file to set this variable instead of specifying the path as a configure command line option. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The Mathematica client interface for NetSolve is then built by typing \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> make mathematica \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {in the directory }{\f2\fs21 $NETSOLVE_ROOT}{. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Details of this interface can be found in [ns:mathematica] and quick instructions/requirements for building it are in the file: }{\f2\fs21 $NETSOLVE_ROOT/src/Mathematica/INSTALL}{ Full details of the installation procedure can be found in: }{\f2\fs21 $NETSOLVE_ROOT/src/Mathematica/doc/UsersGuide.tex \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_GETSTARTED} {\*\bkmkend ID_GETSTARTED}7.2. What to do first \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { Once the interface is successfully installed, the first thing to do is to start a Mathematica client and type \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 NetSolve[] \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {which prints information on how to use the interface: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 In[1]:= NetSolve[] \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 usage: \par NetSolve[FuncName[arg1, ...]] - blocking problem call \par NetSolveNB[FuncName[arg1, ...]] - nonblocking problem call \par NetSolveProbe[request] - checks if a request has been completed \par NetSolveWait[request] - waits for a request to co}{\f2\fs21 m}{\f2\fs21 plete \par NetSolveGetAgent[] - returns the current agent name \par NetSolveSetAgent[AgentName] - changes the agent we are wor}{\f2\fs21 k}{\f2\fs21 ing with \par NetSolveError[] - returns the result code of the last \par executed NetSolve function \par NetSolveErrorMsg[rc] - returns a string describing \par the result code passed \par NetSolve["?problems"] - shows a list of available pro}{\f2\fs21 b}{\f2\fs21 lems \par NetSolve["?servers"] - shows a list of available ser}{\f2\fs21 v}{\f2\fs21 ers \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 NetSolve["?FuncName[]"] - shows a problem description \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Let us review the possibilities: \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Information functions -- }{\f2\fs19 NetSolve["?problems"]}{\f2\fs21 , }{\f2\fs19 NetSolve["?servers"]}{\f2\fs21 and }{\f2\fs19 NetSolve["?FuncName[]"] \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab This set of functions provides information about a specific problem's calling sequence and which problems and servers are available through the user's agent. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Blocking problem solving -- }{\f2\fs19 NetSolve[ProblemName[arguments, ... ]] \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab This f unction is a blocking call to NetSolve to solve a certain problem. When utilizing this type of call to NetSolve, the user does not regain execution control until the result becomes available. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Nonblocking problem solving -- }{\f2\fs19 NetSolveNB[ProblemName[arguments, ... ]] \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab This function is a non-blocking call to NetSolve to solve a certain problem. Unlike a blocking call to NetSolve, a non-blocking call returns the execution control, as well as a request handler, immediately to the user. The request handler can th en be ``probed'' for the status of the calculation. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Getting/setting an agent -- }{\f2\fs19 NetSolveGetAgent[]}{\f2\fs21 , }{\f2\fs19 NetSolveSetAgent[AgentName] \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab }{\f2\fs21 NetsolveGetAgent[]}{ returns a string containing the host name of the agent. The user can change the current agent by the }{\f2\fs21 NetSolveSetAgent[]}{ function at any time. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { Let us now assume that the user has started Mathematica and is ready to use NetSolve. We can check who our agent is by typing \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 In[1]:= NetSolveGetAgent[] \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Out[1]= torc0.cs.utk.edu \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { If there is no agent set, the result would be the }{\f2\fs21 $Null}{ symbol. One can change the agent by the function }{\f2\fs21 NetSolveSetAgent[]}{. For instance \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 In[2]:= NetSolveSetAgent["netsolve.cs.utk.edu"] \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { The agent can be changed at any time provided there is another NetSolve agent running on the host whose name has been passed as an argument. However, if the agent is changed, then the set of servers and possibly the set of solvable problems has also been changed. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { A list of the solvable problems can be obtained by the function }{\f2\fs21 NetSolve["?problems"]}{. Here is a possible list (clipped to save space). \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 In[3]:= NetSolve["?problems"] \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 /BLAS-wrappers/Level3/dmatmul \par /BLAS-wrappers/Level3/zmatmul \par /BLAS/Level1/daxpy \par /BLAS/Level1/ddot \par /BLAS/Level1/zaxpy \par /BLAS/Level2/dgemv \par /BLAS/Level3/dgemm \par /BLAS/Level3/zgemm \par /LAPACK-wrapper/Simple/Eig_and_Singular/eig \par /LAPACK-wrapper/Simple/Linear_Equations/linsol \par /QuickSort/DoublePrecision/dqsort \par /QuickSort/Integer/iqsort \par . . . \par -------------------- \par Handle 41 problem(s). \par -------------------- \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { Similarly, a list of the servers can be printed by the function }{\f2\fs21 NetSolve["?servers"]}{ \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 In[4]:= NetSolve["?servers"] \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 Initializing NetSolve... \par Initializing NetSolve Complete \par ---- List of NetSolve agents ---- \par netsolve.cs.utk.edu (160.36.58.76) Host: Up \par ---- List of NetSolve servers ---- \par cetus3a.cs.utk.edu (160.36.56.94) (0 failures) \par cetus3b.cs.utk.edu (160.36.56.95) (0 failures) \par torc1.cs.utk.edu (160.36.56.200) (0 failures) \par torc2.cs.utk.edu (160.36.56.201) (0 failures) \par torc3.cs.utk.edu (160.36.56.202) (0 failures) \par \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 . . . \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { For every server associated with a specific agent, the following information is given: its name, IP address, ho st and server status, and how many different problems it can solve. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { The user can easily determine information about a specific problem, }{\f2\fs21 iqsort}{ for instance, by typing \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 NetSolve["?iqsort[]"] \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { The brackets after the problem name are required because every NetSolve problem is treated as a function defined in Mathematica. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { The output of that command is as follows: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 In[5]:= NetSolve["?iqsort[]"] \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 iqsort: Quicksort - \par Sorts a vector of integers \par \par Input: \par # 0 : Integer Vector \par Vector of integers to Sort \par \par Output: \par # 0 : Integer Vector \par Sorted Vector \par \par Mathematica example: \par rI0 = NetSolve[iqsort[I0]] \par \par examples for types: \par \par Char Byte/Integer Single/Double Complex \par Scalar: "c" 42 66.32 4 - 7 I \par Vector: "vector" \{1,2,3\} \{3,4.5,7\} \{3, -5+3I, 8\} \par Matrix: \{"line 1", \{\{1,2,3\}, \{\{6.4,2,1\}, \{\{1+2I, 3+4I\}, \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 "line 2"\} \{4,5,6\}\} \{-7,1.2,4\}\} \{5-6I, 7\}\} \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { The first part of the output is a brief general description of the problem. The second part describes the input and output objects, their type and description. And lastly, an example is provided. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { If the user does not provide the number, the type, and the sequence of arguments correctly, an error message message will be printed and the }{\f2\fs21 $Null}{ symbol will be returned. \par The arguments shown in the example are variables but the user may also choose to pass numerical values, symbols with assigned data or function calls. \par Here are some rules the user must remember. \par \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\tab 1.\tab Characters are passed as strings (only the first character is used). \par \tab 2.\tab Integers can be passed instead of reals and vice versa (conversion is performed automatically). \par \tab 3.\tab Integers and reals can be passed instead of complex numbers. \par \tab 4.\tab Vectors of characters are passed as strings. \par \tab 5.\tab Matrices of characters are passed as vectors of strings. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _1065}{\*\bkmkend _1065} 7.3. Blocking call to NetSolve \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { In the previous section we explained how the user can obtain information about a problem and its calling sequence. For the call itself, the function }{\f2\fs21 NetSolve[]}{ is invoked with the problem name and its arguments. For example, \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 In[6]:= NetSolve[iqsort[\{7,2,3,5,1\}]] \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 contacting server torc0.cs.utk.edu ... \par \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Out[6]= \{1, 2, 3, 5, 7\} \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {As stated earlier the user can pass not only numerical values, but also symbols that contain data of proper type or functions that return a result of this type. Indee d, Mathematica calculates these expressions and passes the arguments by value. For example \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 In[7]:= v = -Range[5] \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 \par Out[7]= \{-1, -2, -3, -4, -5\} \par \par In[8]:= NetSolve[iqsort[v]] \par contacting server torc0.cs.utk.edu ... \par \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Out[8]= \{-5, -4, -3, -2, -1\} \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {or to sort a random vector of size 7 \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 In[9]:= NetSolve[iqsort[Table[Ceiling[10*Random[]], \{7\}]]] \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 contacting server torc0.cs.utk.edu ... \par \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Out[9]= \{1, 2, 2, 2, 4, 6, 7\} \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Since }{\f2\fs21 NetSolve[]}{ is a function defined in Mathematica, it can be used in expressions like: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 In[9]:= NetSolve[iqsort[Table[Ceiling[10*Random[]], \{7\}]]] \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 contacting server torc0.cs.utk.edu ... \par \par Out[9]= \{1, 2, 2, 2, 4, 6, 7\} \par \par In[10]:= Print["The minimal element of v is ", Ne}{\f2\fs21 t}{\f2\fs21 Solve[iqsort[v]][[1]]] \par contacting server torc0.cs.utk.edu ... \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 The minimal element of v is -5 \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Let us consider a more complex problem such as the Level 3 BLAS subroutine }{\f2\fs21 dgemm[]}{ which calculates where $op(X) = X$ or $op(X) = X'$. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The routine }{\f2\fs21 dgemm[]}{ requires the following 7 arguments. \par Let us generate three random matrices. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 In[11]:= RandomMatrix[m_,n_] := Table[Ceiling[10*Random[]], \{m\}, \{n\}] \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 \par In[12]:= a = RandomMatrix[2,3] \par \par Out[12]= \{\{9, 2, 3\}, \{6, 3, 9\}\} \par \par In[13]:= b = RandomMatrix[3,2] \par \par Out[13]= \{\{6, 4\}, \{4, 10\}, \{2, 9\}\} \par \par In[14]:= c = RandomMatrix[2,2] \par \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Out[14]= \{\{4, 7\}, \{4, 8\}\} \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {and call }{\f2\fs21 dgemm[]}{. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 In[15]:= NetSolve[dgemm["N", "N", 2, a, b, 3, c]] \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 contacting server cetus2a.cs.utk.edu ... \par \par Out[15]= \{\{148., 187.\}, \{144., 294.\}\} \par \par In[16]:= 2 a . b + 3 c \par \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Out[16]= \{\{148, 187\}, \{144, 294\}\} \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _1084}{\*\bkmkend _1084} 7.4. Nonblocking Call to NetSolve \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {As in the Matlab interface (see }{\field{\*\fldinst { HYPERLINK \\l ID_MATLAB}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f004d00410054004c004100420023000000}}}{\fldrslt {Chapter 6}}}{), the Mathematica interface can be called in an asynchronous fashion. Nonblocking calls are performed by the function }{ \f2\fs21 NetSolveNB[]}{, and its calling sequence is the same as the blocking call }{\f2\fs21 NetSolve[]}{. The difference is in the result returned. }{\f2\fs21 NetSolveNB[]}{ always returns a request handler. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 NetSolveProbe[]}{ returns an integer value to indicate if the problem has been completed. A value of 0 indicates that the result is available and a value of 1 indicates that the computation is still in progress. Other values are error codes (see }{\field{\*\fldinst { HYPERLINK \\l ID_ERRORHANDLING}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000012000000490044005f004500520052004f005200480041004e0044004c0049004e00470023000000}}}{\fldrslt {Section 7.5}}}{). \par Let us multiply two complex matrices using }{\f2\fs21 NetSolveNB[]}{. We generate the matrices }{\b\f2 ac}{ and }{\b\f2 bc}{ using already generated matrices }{\b\f2 a}{, }{\b\f2 b}{ and }{\b\f2 c}{. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 In[17]:= ac = a - 2 a I \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 \par Out[17]= \{\{9 - 18 I, 2 - 4 I, 3 - 6 I\}, \{6 - 12 I, 3 - 6 I, 9 - 18 I\}\} \par \par In[18]:= bc = b - 3 b I \par \par Out[18]= \{\{6 - 18 I, 4 - 12 I\}, \{4 - 12 I, 10 - 30 I\}, \{2 - 6 I, 9 - 27 I\}\} \par \par In[19]:= request = NetSolve[zmatmul[ac, bc]] \par contacting server cetus2a.cs.utk.edu ... \par \par Out[19]= 0 \par \par In[20]:= NetSolveProbe[request] \par \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Out[20]= 0 \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {As the computation is still in progress, the user can choose to perform other work, or wait for the request to complete: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 In[21]:= NetSolveWait[request] \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Out[21]= \{\{-340. - 340. I, -415. - 415. I\}, \{-330. - 330. I, -675. - 675. I\}\} \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_ERRORHANDLING} {\*\bkmkend ID_ERRORHANDLING}7.5. Catching Errors \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {As in the Matlab interface, it is possible to detect errors with the functions }{\f2\fs21 NetSolveError[]} { and }{\f2\fs21 NetSolveErrorMsg[]}{. The first function returns an integer which is the error code of the last executed NetSolve function. }{\f2\fs21 NetSolveErrorMsg[]}{ takes an error code as an input argument and returns a string describing the error. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {With these two functions, it is possible to write Mathematica scripts that call NetSolve and handle all of the NetSolve errors at runtime. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _1111}{\*\bkmkend _1111}7.6. Demo \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { A NetSolve-Mathematica demo is available with the NetSolve distribution. It invokes and explains the various NetSolve features available within Mathematica. The main script is called }{\f2\fs21 NSdemo.m}{ and is located in }{\f2\fs21 $NETSOLVE_ROOT/src/Testing/mathematica/}{. To run the demo, just type }{\b < setenv NETSOLVE_AGENT netsolve.agent.host \par }\pard \ql \li1392\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1392\itap0 {\f2\fs21\lang1024\langfe1024\noproof \par }\pard \ql \li1392\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1392\itap0 {\lang1024\langfe1024\noproof \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\lang1024\langfe1024\noproof \tab 2.\tab Run }{\b\lang1024\langfe1024\noproof kinit}{\lang1024\langfe1024\noproof to get a ticket-granting ticket for yourself. You don't have to do this if you already have a ticket and it has not expired. \par \tab 3.\tab Run your NetSolve program. If the server contacted requires authentication, the NetSolve client automatically contacts th e Kerberos Key Distribution Center for a ticket and sends it to the server. If this client is authorized to utilize the NetSolve server services will be granted to the client, if not, an AUTHENTICATION_REJECTED error protocol will be returned to the c lient. \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 11. The User-Supplied Function Feature}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 11. The User-Supplied Function Feature}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_UPF}{\*\bkmkend ID_UPF} Chapter 11. The User-Supplied Function Feature \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _1323}{\*\bkmkend _1323} 11.1. Motivation \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { In the preceding sections, we described all the client interfaces to NetSolve. In these descriptions we assumed that the only input the user had to supply to NetSolve was numerical data, that is, matrices, vectors, or scalars. This assumption is valid for a lot of numerical software. However, for some software that we would like to include in NetSolve via NetSolve servers, we need an additional feature. Indeed, numerous scientific packages require the user to provide numerical data as well as a }{\i function}{. Ty pically, nonlinear software requires the user to pass a pointer to a subroutine that computes the nonlinear function. This is a problem in NetSolve because the computation is performed remotely and the user cannot provide NetSolve with a pointer to one of his linked-in subroutines. The only solution is to send code over the network to the server. This approach raises a lot of issues, including }{\i security}{. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _1328}{\*\bkmkend _1328} 11.2. Solution \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Let us describe here the solution we have adopted. This is really a first attemp t, and there is definitely room for improvement. However, we believe that it provides reasonable capabilities for now, considering that NetSolve is still at an early stage of development. As we noted, we need to ship code over to the computational server. Since NetSolve works in a heterogeneous environment, it is not possible to migrate compiled code. Thus, we require that the user have his subroutine or function in a separate file, written either in C or Fortran. We send this file to the computational ser ver. The server compiles it and is then able to use this user-supplied function. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The security implementation is quite simple. When compiling the user's function, we use the }{\b\f2 nm}{ UNIX command to disallow any system call. The approach is very restrictive for the user, but typically the subroutine that has to be passed needs only to perform computations. If course, there are a lot of }{\i hacker}{ ways to go around this problem, and our system currently does not pretend to be a real security manager. We are investigating Java to deal with this user-supplied function issue. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _1334}{\*\bkmkend _1334} 11.3. For the Client \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart _1337}{\*\bkmkend _1337} 11.3.1. Determining the Format of the Function to Supply \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {We now understand that the user has to write a Fortran subroutine or a C function to call a problem tha t requires a user-supplied function. For now, the prototype of this subroutine/function can be found in the description of the problem, available from Matlab or the CGI scripts of the NetSolve homepage (see }{\field{\*\fldinst { HYPERLINK \\ l ID_AVAILABLE}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f0041005600410049004c00410042004c00450023000000}}}{\fldrslt {Section 4.3}}}{ ). Following the usual philosophy of NetSolve, the prototype of the user-supplied function is exactly the same as if the user were using the numerical software directly. Some softwares require the user to provide more than one function. When that is the case, the description of the problem mentions it and gives all the prototypes for all the functions to supply. \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart _1341}{\*\bkmkend _1341} 11.3.2. From Matlab, Mathematica, C and Fortran \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {A UPF is passed to NetSolve as a string that contains the path to the file that contain s the source code of the function. \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart _1344}{\*\bkmkend _1344} 11.3.3. From the NetSolve Java API \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Users of the NetSolve API may specify a UPF input item as they would any other input item, using the }{ \b\f2 pushArg()}{ method. However, an extra argument is required when pushing a UPF item: the language that the UPF is written in. For example: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 n.pushArg(new String(upf0,0),GlobalDefs.LANG_FORTRAN); \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 n.pushArg(new String(upf1,0),GlobalDefs.LANG_C); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Currently, the user mu st pass the UPF as a String. Therefore, if the UPF is stored in a file, it is up to the user to read the file into a String. Future versions of the API will allow the user to simply pass the name of the file. \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart _1349}{\*\bkmkend _1349} 11.3.4. From the Java GUI \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { Entering a user-supplied function via the Java interface is very much similar to entering any other kind of data. If the problem requires a user-supplied function, there will be an entry in the }{\i Input List}{ called ``User Provided Function'' for which data must be specified, just like any other input object. The user may choose to enter the user-supplied function manually into the }{\i Data Input Box}{ or from a file specified in the }{\i Filename Selection Box}{. If the user enters the function manually, the language must also be specified by choosing either C or FORTRAN from an ``option menu'' that appears just above the }{\i Data Input Box}{ . If the user-supplied function comes from a file, the file must end with either ``.c'' or ``.f'' (with names ending in ``.c'' interpreted as C functions and names ending in ``.f'' interpreted as FORTRAN functions). \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _1356}{\*\bkmkend _1356} 11.4. For the Server \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { The problem description of a problem that requires one or more user-supplied functions must contain a line: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 @OBJECT UPF CHAR \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {for each function as an input object so that mnemonics can be used in the description of the calling sequence (after the }{\b\f2 '@FORMAT'}{ clause). In the pseudo-code section, the functions should be declared as extern like: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 extern int upf0(); \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 extern double upf1(); \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 etc.... \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {for instance. The identifiers }{\b\f2 upf0}{, }{\b\f2 upf1}{, \'85 can be used in the rest of the pseudo code to designate the user-supplied functions. This is not very natural. It would be better to be able to use mnemonics as for classic objects, but it makes compilation difficult on some platforms. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _1364}{\*\bkmkend _1364} 11.5. Conclusion \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { This new feature of NetSolve is still under investigation. We are aware that security is an important issue here. For now, NetSolve is still a research project developed to allow experimentations with this relatively new type of software. In the future, more attention will be given to the user-supplied mechanism in order to make it as safe as possible. As mentioned earlier, we may use Java in order to set up a viable security manager. Using Java currently a ppears to be the best solution for security, but it has obvious drawbacks. First, the user would have to write his function in Java: the typical NetSolve user is a scientist who does not have the time or inclination to learn new languages, especially obje ct-oriented ones. Second, with the current implementations of Java, efficiency would also be a problem. \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 12. Troubleshooting}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 12. Troubleshooting}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_FAQ}{\*\bkmkend ID_FAQ} Chapter 12. Troubleshooting \par }\pard\plain \ql \li960\ri0\sb249\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {If an error occurs du ring the invocation of NetSolve, a variety of diagnostic runtime error messages, as well as error codes that can be returned when calling a NetSolve function from the C or Fortran interfaces, are provided. The error codes and runtime error messages are li sted in }{\field{\*\fldinst { HYPERLINK \\l ID_ERRORCODES}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f004500520052004f00520043004f0044004500530023000000}}}{\fldrslt {Chapter 24}}}{ and may have several possible explanations/causes. If one of these error messages occurs, the user should first check the agent and server log files, }{\f2\fs21 $NETSOLVE_ROOT/nsagent.log}{ or }{\f2\fs21 $NETSOLVE_ROOT/nsserver.log}{ , respectively. These files may contain more information to clarify the reason for the error message. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {For diagnostic help in explaining the reasons for specific NetSolve run-time error messages, refer to the }{\i NetSolve Errata File}{ (http://icl.cs.ut k.edu/netsolve/errata.html) \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_CONF_45_DEF} {\*\bkmkend ID_CONF_45_DEF}12.1. Details of the Makefile.NETSOLVE_ARCH.inc File \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Although suitable default options are provided for the compilation of the software, one may look in the }{ \f2\fs21 NetSolve/conf}{ directory to edit the }{\f2\fs21 Makefile.NETSOLVE_ARCH.inc}{ file. This file contains parameters to customize the compilation process. \par }\pard \ql \fi-432\li1392\ri0\sb240\sl286\slmult0\widctlpar\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\field{\*\fldinst {INCLUDEPICTURE "/usr/share/sgml/stylesheets/docbook/images/note.eps" }}{\fldrslt { {\pict{\*\picprop\shplid1033{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn pibName}{\sv /usr/share/sgml/stylesheets/docbook/images/note.eps}}{\sp{\sn pibFlags}{\sv 2}}{\sp{\sn pictureGray}{\sv 0}} {\sp{\sn pictureBiLevel}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fHitTestFill}{\sv 1}}{\sp{\sn fillShape}{\sv 1}}{\sp{\sn fillUseRect}{\sv 0}}{\sp{\sn fNoFillHitTest}{\sv 0}} {\sp{\sn fLine}{\sv 0}}{\sp{\sn fReallyHidden}{\sv 0}}{\sp{\sn fScriptAnchor}{\sv 0}}{\sp{\sn fFakeMaster}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 \picw7620\pich7620\picwgoal4320\pichgoal4320\wmetafile8}}}}{\tab }{\b\f1\fs22 Note: \par }\pard \ql \li1392\ri0\sb120\sl286\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1392\itap0 {\f1\fs22 All of the parameters in this include file can (and should) be modified using command line arguments to }{\b\f1\fs22 configure}{\f1\fs22 . \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { Most of the contents of this file are straightforward, including definitions for compilers, linkers, etc., and will not be explained here. There are however a few entries that may need explanation. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {NETSOLVE SPECIFIC OPTIONS: \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab The }{\f2\fs21 OUTPUT_LEVEL}{ macro defines the amount of debug output to print during installation. }{\f2\fs21 PROXY}{ specifies which client proxy to use. }{\f2\fs21 CPU_STAT}{ defines which method to use to monitor server processes in terms of workload, etc. and what method to use to assign tasks to servers. The }{\f2\fs21 AUTH_LIBS}{ and }{\f2\fs21 AUTHENTICATION}{ macros define the authentication to use (if any) in the system. Currently, the only options are KERBEROS5 or NO_AUTH (no authentication) for the }{\f2\fs21 AUTHENTICATION}{ macro. If authentication is set to KERBEROS4, then }{\f2\fs21 AUTH_LIBS}{ must be set to the location of the appropriate libraries needed to use the kerberos application programming interface. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {AUXILIARY PACKAGES: \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab If NWS is enabled, i.e., }{\f2\fs21 CPU_STAT = NWS}{, the variable }{\f2\fs21 NWSDIR}{ provides the path to the NWS distribution. See } {\field{\*\fldinst { HYPERLINK \\l ID_NWS}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000008000000490044005f004e005700530023000000}}}{\fldrslt {Chapter 19}}}{) for further details. \par }\pard \ql \li1440\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1440\itap0 {In the case of a parallel server, it is necessary to set the }{\f2\fs21 MPI_DIR}{, }{\f2\fs21 MPI_INCLUDE_DIR}{, and }{\f2\fs21 MPI_INCDIR}{ variables to the proper paths. \par If IBP is enabled, i.e., }{\f2\fs21 IBPDIR}{ provides the path to the IBP distribution. See }{\field{\*\fldinst { HYPERLINK \\l ID_DSI}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000008000000490044005f0044005300490023000000}}}{\fldrslt {Chapter 20}}}{ for further details. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Auxiliary Libs: \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab This section contains variables for setting path names and to optional software packages such as PETSc, Aztec, ITPACK, SuperLU, LAPACK, ScaLAPACK, MPIBLACS, and BLAS. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {An example }{\f2\fs21 Makefile.NETSOLVE_ARCH.inc}{ for IRIX is listed below. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 # Generated automatically from Makefile.generic-arch.in by confi}{\f2\fs21 g}{\f2\fs21 ure. \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 # Never include this file directly! \par # Always include ./Makefile.inc and make sure it is appropr}{\f2\fs21 i}{\f2\fs21 ately \par # set to include the proper platform specific file. \par # CUSTOMIZING CONFIGURATION \par # \par \par SHELL = /bin/sh \par \par ############################# \par #### INSTALL DIRECTORIES #### \par ############################# \par \par PLATFORM = mips-sgi-irix6.5 \par NETSOLVE_VERSION = 1.4 \par EXEC_PREFIX = $(NETSOLVE_ROOT)/$(NETSOLVE_ARCH) \par BINDIR = $(NETSOLVE_ROOT)/bin/$(NETSOLVE_ARCH) \par LIBDIR = $(NETSOLVE_ROOT)/lib/$(NETSOLVE_ARCH) \par OBJDIR = $(NETSOLVE_ROOT)/obj/$(NETSOLVE_ARCH) \par MATLABOBJDIR = $(OBJDIR)/MATLAB \par PDFGUICLASSDIR = $(BINDIR)/PDFGUICLASSDIR \par \par ############################### \par #### COMPILERS AND OPTIONS #### \par ############################### \par CC = /usr/bin/cc \par C_OPT_FLAGS = -O3 \par C_NOOPT_FLAGS = -n32 -mips4 -r12000 -common \par CFLAGS = $(C_OPT_FLAGS) $(C_NOOPT_FLAGS) \par NS_C_OPT_FLAGS = $(C_OPT_FLAGS) $(HBMFLAG) $(F2CFLAG) $(OUTPUT_LEVEL) $(ARCHCFLAGS) \\ \par $(INCDIR) $(PROXY) $\{CPU_STAT\} $\{IBPFLAG\} \\ \par $\{AUTHENTICATION\} $(DSIFLAGS) \par NS_C_NOOPT_FLAGS = $(C_NOOPT_FLAGS) $(HBMFLAG) $(F2CFLAG) $(OUTPUT_LEVEL) $(ARCHCFLAGS) \\ \par $(INCDIR) $(PROXY) $\{CPU_STAT\} $\{IBPFLAG\} \\ \par $\{AUTHENTICATION\} $(DSIFLAGS) \par NS_CFLAGS = $(CFLAGS) $(HBMFLAG) $(F2CFLAG) $(OUTPUT_LEVEL) $(ARCHCFLAGS) \\ \par $(INCDIR) $(PROXY) $\{CPU_STAT\} $\{IBPFLAG\} \\ \par $\{AUTHENTICATION\} $(DSIFLAGS) \par \par FC = /usr/bin/f77 \par F_OPT_FLAGS = -O3 \par F_NOOPT_FLAGS = -n32 -mips4 -r12000 \par FFLAGS = $(F_OPT_FLAGS) $(F_NOOPT_FLAGS) \par NS_FFLAGS = $(FFLAGS) $(INCDIR) $(ARCHCFLAGS) \par NS_F_OPT_FLAGS = $(F_OPT_FLAGS) $(INCDIR) $(ARCHCFLAGS) \par NS_F_NOOPT_FLAGS = $(F_NOOPT_FLAGS) $(INCDIR) $(ARCHCFLAGS) \par \par LINKER = $(FC) \par LDFLAGS = -LD_MSG:OFF=15,84 -n32 -mips4 -r12000 \par \par MEX = /usr/local/matlab/bin/mex \par MEXFLAGS = -O \par MEXEXT = .mexsg \par NS_MEXFLAGS = $(MEXFLAGS) $(HBMFLAG) $(F2CFLAG) $(OUTPUT_LEVEL) $(ARCHMFLAGS) \\ \par $(INCDIR) $(PROXY) $\{CPU_STAT\} $\{IBPFLAG\} \\ \par $\{AUTHENTICATION\} $(DSIFLAGS) -g -DMATLAB \par \par JAVAC = \par NS_JAVAFLAGS = -classpath $(NETSOLVE_ROOT)/src/PDF_GUI/classes:$(PDFGUICLASSDIR) \\ \par -d $(PDFGUICLASSDIR) \par \par ############################## \par ### LIBS, DIRS AND DEFINES ### \par ############################## \par \par LIBS = -lm -lc \par INCDIR = -I$(NETSOLVE_ROOT)/include \\ \par $(NWS_INCDIR) \\ \par $(IBP_INCDIR) \\ \par $(MPI_INCDIR) \par \par ARCHCFLAGS = -D$(NETSOLVE_OS) \\ \par -D$(F2CSTR) -D$(F2CINT) -D$(F2CNAMES) -D$(RUSAGE) \\ \par -DNETSOLVE_ROOT=\\"$(NETSOLVE_ROOT)\\" \\ \par -DNETSOLVE_ARCH=\\"$(NETSOLVE_ARCH)\\" \\ \par -DMPI_DIR=\\"$(MPI_DIR)\\" \par \par ARCHMFLAGS = -D$(NETSOLVE_OS) \\ \par -D$(F2CSTR) -D$(F2CINT) -D$(F2CNAMES) -D$(RUSAGE) \\ \par -D'NETSOLVE_ROOT=\\"$(NETSOLVE_ROOT)\\"' \\ \par -D'NETSOLVE_ARCH=\\"$(NETSOLVE_ARCH)\\"' \par \par #### $F2CINT options \par #### FINT2CLONG : F77 INTEGER -> C long \par #### FINT2CINT : F77 INTEGER -> C int (default) \par #### FINT2CSHORT : F77 INTEGER -> C short \par F2CINT = FINT2CINT \par \par #### $F2CNAMES options \par #### F2CADD_ : F77 netsl( ) -> C netsl_( ) (default) \par #### F2CADD__ : F77 netsl( ) -> C netsl__( ) \par #### F2CNOCHANGE : F77 netsl( ) -> C netsl( ) \par #### F2CUPCASE : F77 netsl( ) -> C NETSL( ) \par F2CNAMES = F2CADD_ \par \par #### $F2CSTR options \par #### F2CSTRSUNSTYLE : Sun style of passing strings from f2c \par #### F2CSTRCRAYSTYLE : Cray style of passing strings from f2c \par #### F2CSTRSTRUCTPTR : Struct * style of passing strings from f2c \par #### F2CSTRSTRUCTVAL : Struct style of passing strings from f2c \par F2CSTR = F2CSTRSUNSTYLE \par \par ########################## \par ### AUXILIARY PROGRAMS ### \par ########################## \par FLEX = /usr/bin/flex \par BISON = /usr/bin/bison \par AR = /usr/bin/ar \par ARFLAGS = cr \par RANLIB = : \par RUSAGE = HAVERUSAGE \par \par \par ################################### \par #### NETSOLVE SPECIFIC OPTIONS #### \par ################################### \par \par #================# \par # F2C \par #================# \par F2CFLAG = -DNOCHANGE \par \par #================# \par # Program Output # \par #================# \par #### DEBUG : For really verbose debugging information \par #### VIEW : For smooth information during the execution \par #### NO_OUTPUT : no output \par OUTPUT_LEVEL = -DVIEW \par \par #==============# \par # Client Proxy # \par #==============# \par #### Proxies are currently mutually exclusive \par #### GLOBUS_PROXY : build and enable globus proxy \par #### NETSOLVE_PROXY : build and enable netsolve proxy \par PROXY = -DNETSOLVE_PROXY \par \par #====================# \par # Information Server # \par #====================# \par \par # options for INFOSERVERFLAGS \par # INFOSERVERFLAGS = (blank means do not use) \par # INFOSERVERFLAGS = -DINFOSERVER (use as part of agent) \par # INFOSERVERFLAGS = -DINFOSERVER -DSTANDALONEISERV (use in stan}{\f2\fs21 d}{\f2\fs21 alone mode) \par INFOSERVERFLAGS = \par INFOSERVER = \par \par #=================# \par # Workload Prober # \par #=================# \par ## Which probes? options are NWS, NS_WORKLOAD (NetSolve) \par CPU_STAT = -DNS_WORKLOAD \par \par #=====# \par # DSI # \par #=====# \par DSIFLAGS = \par \par ######################## \par ## AUXILIARY PACKAGES ## \par ######################## \par #================# \par # AUTHENTICATION # \par #================# \par \par ## options are NO_AUTH, KERBEROS5 \par AUTHENTICATION = -DNO_AUTH \par AUTH_LIBS = \par \par #=====# \par # NWS # \par #=====# \par NWSDIR = \par NWS_INCDIR = \par NWSLIBS = \par NWSEXECSSTUB = \par \par #=====# \par # MPI # \par #=====# \par MPI_DIR = /usr/local/mpich \par MPI_INCLUDE_DIR = $(MPI_DIR)/include \par MPI_INCDIR = -I$(MPI_INCLUDE_DIR) \par \par #=====# \par # IBP # \par #=====# \par IBPDIR = \par IBPARCH = \par IBP_INCDIR = \par IBPLIB = \par IBPOBJS_STUB = \par IBPOBJS = \par IBPFLAG = \par \par #========# \par # Globus # \par #========# \par \par #GLOBUS_DIR = \par #include $(GLOBUS_DIR)/etc/makefile_header \par #G_LIBS = -L$(GLOBUS_DIR)/lib $(GLOBUS_GRAM_CLIENT_LIBS) $(LIBS) \par #G_CFLAGS = $(GLOBUS_GRAM_CLIENT_CFLAGS) -I$(GLOBUS_DIR)/include \par #G_LDFLAGS = $(GLOBUS_GRAM_CLIENT_LDFLAGS) \par #LDAP_DIR = /usr/local/ldap \par #LDAP_LIBS = -L$(LDAP_DIR)/lib \par #LDAP_CFLAGS = -I$(LDAP_DIR)/include \par #LDAP_LDFLAGS = -lldap -llber \par \par #================# \par # Auxiliary Libs # \par #================# \par \par HAVE_petsc = 0 \par PETSC_DIR = /src/icl2/petsc/petsc-2.0.29/ \par PETSC_ARCH = linux \par BOPT = O \par PETSC_LIB_DIR = $(PETSC_DIR)/lib/lib$(BOPT)/$(PETSC_ARCH) \par \par HAVE_aztec = 0 \par AZTEC_DIR = /src/icl2/Aztec/ \par AZTEC_LIB_DIR = /src/icl2/Aztec/lib/libg/linux \par \par HAVE_superlu = 0 \par SUPERLU_DIR = /src/icl2/SuperLU/ \par SUPERLU_LIB_DIR = /src/icl2/SuperLU/lib/sequential/linux \par USE_SUPERLU_SERIAL = -DUSE_SERIAL \par USE_SUPERLU_DIST = \par \par LAPACK_LIB_LINK = /usr/local/lib/liblapack-n32.a \par \par SCALAPACK_LIB_LINK = /usr/local/lib/libscalapack.a \par \par BLAS_LIB_LINK = /usr/lib32/mips4/libblas.a \par \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 BLACS_LIB_LINK = /usr/local/lib/libmpiblacsCinit-p4.a /usr/local/lib/libmpiblacs-p4.a /usr/local/lib/libmpiblacsCinit-p4.a \par \sect }\sectd \linex0\headery0\footery0\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}\pard\plain \ql \li0\ri0\sl20\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof {\*\bkmkstart _1419}{\*\bkmkend _1419} \par }\pard \qc \li0\ri0\sb448\sl776\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\b\f1\fs59\lang1024\langfe1024\noproof III. The Administrator's Manual \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The user has two choices when installing NetSolve. He can ins tall only the client software and use existing pools of resources (agent(s) and server(s)), or he can install his own stand-alone NetSolve system (client, agent(s) and server(s)). If the user wishes to only install the client interface(s), he should follo w instructions in }{\i Part II. The User's Manual}{. However, if the users wishes to install client, agent(s), and server(s), he should follow the instructions in }{\i Part III. The Administrator's Manual}{. \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 13. Downloading, Installing, and Testing the Agent and Server}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 13. Downloading, Installing, and Testing the Agent and Server}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_ADMIN_45_INSTALL} {\*\bkmkend ID_ADMIN_45_INSTALL}Chapter 13. Downloading, Installing, and Testing the Agent and Server \par }\pard\plain \ql \li960\ri0\sb249\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { The NetSolve agent and server software is currently only available for UNIX and UNIX-like operating systems. All of the client, agent, and server software is bundled into one tar-gzipped file. There is a separate distribution tar file for Unix and Windows installations. No root/superuser privileges are needed to install or use any component of the NetSolve system. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_ADMIN_45_DOWNLOAD} {\*\bkmkend ID_ADMIN_45_DOWNLOAD}13.1. Installation on Unix Systems \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {The NetSolve distribution tar file is available from the NetSolve home page. (http://icl.cs.utk.edu/netsolve/download/NetSolve-1.4.tgz) Once the file has been downloaded, the following UNIX commands will create the }{\f2\fs21 NetSolve}{ directory: \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b gunzip -c NetSolve-1.4.tgz | tar xvf - \par }{From this point forward, we assume that the UNIX SHELL is from the }{\b csh}{ family. \par The installation of NetSolve is configured for a given architecture using the GNU tool }{\b\f2 configure}{. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> cd NetSolve \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> ./configure \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {For a list of all options that can be specified to configure, type \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> ./configure --help \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 Usage: configure [--with-cc=C_COMPILER] [--with-cnooptflags=C_NOOPT_FLAGS] \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 [--with-coptflags=C_OPT_FLAGS] [--with-fc=F77_COMPILER] \par [--with-fnooptflags=F77_NOOPT_FLAGS] \par [--with-foptflags=F77_OPT_FLAGS] \par [--with-ldflags=LOADER_FLAGS] \par [--with-nws=NWSDIR] \par [--with-ibp=IBPDIR] \par [--with-kerberos] \par [--with-proxy=PROXY_TYPE] \par [--with-outputlevel=OUTPUT_LEVEL] \par [--enable-infoserver=INFOSERVER] \par [--with-mpi=MPI_DIR] \par [--with-petsc=PETSCDIR] \par [--with-aztec=AZTEC_DIR] \par [--with-azteclib=AZTEC_LIB] \par [--with-superlu=SUPERLU_DIR] \par [--with-superlulib=SUPERLU_LIB] \par [--with-scalapacklib=SCALAPACK_LIB] \par [--with-blacslib=BLACS_LIB] \par [--with-lapacklib=LAPACK_LIB] \par [--with-blaslib=BLAS_LIB] \par [--with-mldk=MLDK_PATH] \par \par where \par C_COMPILER = default is to use gcc \par C_NOOPT_FLAGS = C compiler flags to be used on files that \par must be compiled without optimization \par C_OPT_FLAGS = C compiler optimization flags (e.g., -O) \par F77_COMPILER = default is to use g77 \par F77_NOOPT_FLAGS = Fortran77 compiler flags to be used on files that \par must be compiled without optimization \par F77_OPT_FLAGS = Fortran77 compiler optimization flags (e.g., -O) \par LOADER_FLAGS = Flags to be passed only to the loader \par NWSDIR = directory where NWS is installed (o}{\f2\fs21 p}{\f2\fs21 tional) \par IBPDIR = directory where IBP is installed (o}{\f2\fs21 p}{\f2\fs21 tional) \par PROXY_TYPE = currently supported values are netsolve \par and globus (default is netsolve) \par OUTPUT_LEVEL = currently supported values are debug, view, \par and none (default is view) \par INFOSERVER = currently supported values are alone and \par nothing specified (default is not alone, \par where nothing is specified). \par MPI_DIR = location of the MPI directory (optional, \par assumes MPICH directory structure) \par (default is /usr/local/mpich-1.2.1). \par PETSCDIR = location of PETSc installation directory (optional) \par AZTEC_DIR = location of Aztec installation directory (optional) \par AZTEC_LIB = Aztec link line (optional) \par SUPERLU_DIR = location of SuperLU installation directory (optional) \par SUPERLU_LIB = SuperLU link line (optional) \par SCALAPACK_LIB = ScaLAPACK link line (optional) \par BLACS_LIB = MPIBLACS link line (optional) \par LAPACK_LIB = LAPACK link line (optional) \par BLAS_LIB = BLAS link line (optional) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 MLDK_PATH = Path to MathLink Development Kit (optional) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {All arguments are optional. The options particularly pertinent to NetSolve are: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 --with-nws=NWSDIR location of NWS installation dir \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 --with-ibp=IBPDIR location of IBP installation dir \par --with-kerberos use Kerberos5 client authe}{\f2\fs21 n}{\f2\fs21 tication \par --with-proxy which Proxy? (netsolve, globus) \par --with-outputlevel output level (d}{\f2\fs21 e}{\f2\fs21 bug,view,none) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 --enable-infoserver[=alone] use InfoServer [alone] \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The NetSolve service options are: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 --with-petsc=PETSCDIR location of PETSc install}{\f2\fs21 a}{\f2\fs21 tion dir \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 --with-petsclibdir=PETSC_LIB_DIR location of PETSc library \par --with-aztec=AZTEC_DIR location of Aztec install}{\f2\fs21 a}{\f2\fs21 tion dir \par --with-azteclib=AZTEC_LIB Aztec link line \par --with-superlu=SUPERLU_DIR location of SuperLU insta}{\f2\fs21 l}{\f2\fs21 lation dir \par --with-superlulib=SUPERLU_LIB SuperLU link line \par --with-mpi=MPI_DIR location of MPI Root Dire}{\f2\fs21 c}{\f2\fs21 tory \par --with-lapacklib=LAPACK_LIB LAPACK link line \par --with-scalapacklib=SCALAPACK_LIB ScaLAPACK link line \par --with-blacslib=BLACS_LIB MPIBLACS link line \par --with-blaslib=BLAS_LIB BLAS link line \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 --with-mldk=MLDK_PATH Path to MathLink Development Kit \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { The configure script creates two main files, ./conf/Makefile.$NETSOLVE_ARCH.inc and ./conf/Makefile.inc. These files are created from the templates ./conf/Makefile.generic-arch and ./conf/Makefile.inc.in respectively. $N ETSOLVE_ARCH is the string printed by the command ./conf/config.guess, with all '-' and '.' characters converted to '_' characters. The variable $NETSOLVE_ROOT is the complete path name to the installed NetSolve directory and defined in }{\f2\fs21 ./conf/Makefile.inc}{. These *.inc files are included by the Makefiles that build the NetSolve system. Manually editing these configuration files is strongly discouraged. However, details of the }{\f2\fs21 $NETSOLVE_ROOT/conf/Makefile.$NETSOLVE_ARCH.inc}{ file are explained in }{\field{\*\fldinst { HYPERLINK \\l ID_CONF_45_DEF}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f0043004f004e0046005f00340035005f0044004500460023000000}}}{\fldrslt {Section 12.1}}}{. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Typing }{\b\f2 make}{ in the }{\f2\fs21 NetSolve}{ directory will give instructions to complete the compilation. A typical agent and server compilation includes: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> make standard \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {to build the agent, server, NetSolve management tools (see }{\field{\*\fldinst { HYPERLINK \\l ID_TOOLS}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f0054004f004f004c00530023000000}}}{\fldrslt {Chapter 16}}}{), and NetSolve test suite (see }{\field{\*\fldinst { HYPERLINK \\l ID_TESTING}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f00540045005300540049004e00470023000000}}}{\fldrslt {Section 13.2}}}{). After a successful compilation process, the appropriate binaries and/or libraries can be found in the }{\f2\fs21 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH}{ and/or }{\f2\fs21 $NETSOLVE_ROOT/lib/$NETSOLVE_ARCH}{ directories respectively. Thus, to execute a NetSolve binary, the user must either execute the command from within the }{\f2\fs21 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH}{ directory, or add this directory name to his UNIX }{\f2\fs21 path}{ variable. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_TESTING}{\*\bkmkend ID_TESTING} 13.2. Testing the Software \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Testing the software consists of starting an agent and a server and running a client test (} {\field{\*\fldinst { HYPERLINK \\l ID_ADMIN_45_TEST}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000012000000490044005f00410044004d0049004e005f00340035005f00540045005300540023000000}}}{\fldrslt {Section 13.2.1}}}{ ). Alternatively, the default agent and servers running at the University of Tennessee can be used to test the client only (see }{\field{\*\fldinst { HYPERLINK \\l ID_CLIENT_45_TESTING}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000016000000490044005f0043004c00490045004e0054005f00340035005f00540045005300540049004e00470023000000}}}{\fldrslt {Section 3.2}}}{). We describe here the step-by-step procedure that involves manipula tions that will be detailed and explained in the following chapters. \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart ID_ADMIN_45_TEST} {\*\bkmkend ID_ADMIN_45_TEST}13.2.1. Agent-Server-Client Test \par }\pard\plain \ql \fi-432\li1392\ri0\sb173\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof \tab }{1.\tab Choose a machine to run the agent, server and client (say }{\b\f2 netsolve.world.net}{), \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\tab 2.\tab }{\b cd NetSolve}{, \par \tab 3.\tab edit the file }{\f2\fs21 ./server_config}{ to replace }{\b\f2 netsolve.cs.utk.edu}{ by }{\b\f2 netsolve.world.net}{, and save the file. \par \tab 4.\tab }{\b setenv NETSOLVE_AGENT netsolve.world.net \par \tab }{5.\tab }{\b $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH/agent \par \tab }{6.\tab }{\b $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH/server \par \tab }{7.\tab }{\b cd $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH \par \tab }{8.\tab }{\b Test \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {While the test suite is running, it prints messages about its execution. This test tests only the C and Fortran interfaces. See }{\field{\*\fldinst { HYPERLINK \\ l ID_MATLAB}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f004d00410054004c004100420023000000}}}{\fldrslt {Chapter 6}}}{ for details on how to test the Matlab interface. Successful comp letion of these tests assures you that you have properly installed the NetSolve agent and server. \par If an error is encountered during testing, refer to the Troubleshooting section of the }{\i Errata file}{ (http://icl.cs.utk.edu/netsolve/errata.html) for NetSolve. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_EXPANDING_45_SERVER} {\*\bkmkend ID_EXPANDING_45_SERVER}13.3. Expanding the Server Capabilities \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { It is possible to add new functionalities to a NetSolve computational server by specifying additional problem description files in the server configuration file. In fact, a number of PDFs have been written for a variety of serial and parallel software packages: ARPACK, Aztec, BLAS, ITPACK, LAPACK, MA28, PETSc, ScaLAPACK, and SuperLU. These PDFs are available in the }{\f2\fs21 $NETSOLVE_ROOT/problems/}{ directory. If a user has one of these software libraries compiled on the architecture to which he is installing NetSolve, he can easily add this functionality to his server in three steps. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{During the configure phase of NetSolve, specify the configure option(s) for enabling the respective library. Refer to } {\field{\*\fldinst { HYPERLINK \\l ID_ADMIN_45_DOWNLOAD}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000016000000490044005f00410044004d0049004e005f00340035005f0044004f0057004e004c004f004100440023000000}}}{\fldrslt {Section 13.1}}}{ for details. This step will automatically set the needed }{\f2\fs21 @LIB}{ line(s) in the respective }{\f2\fs21 $NETSOLVE_ROOT/problems/}{ PDF file, as well as set the required variables in the }{\f2\fs21 $NETSOLVE_ROOT/conf/Makefile.$NETSOLVE_ARCH.inc}{ file. \par }{\fs19 \bullet \tab }{Uncomment the respective line in the }{\i keyword}{ section }{\f2\fs21 @PROBLEMS:}{ of the }{\f2\fs21 $NETSOLVE_ROOT/server_config}{ file. \par }{\fs19 \bullet \tab }{Recompile the server by typing }{\b make server}{ in the }{\f2\fs21 $NETSOLVE_ROOT/}{ directory. \par }\pard \ql \fi-432\li1392\ri0\sb240\sl286\slmult0\widctlpar\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\field{\*\fldinst {INCLUDEPICTURE "/usr/share/sgml/stylesheets/docbook/images/note.eps" }}{\fldrslt { {\pict{\*\picprop\shplid1035{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn pibName}{\sv /usr/share/sgml/stylesheets/docbook/images/note.eps}}{\sp{\sn pibFlags}{\sv 2}}{\sp{\sn pictureGray}{\sv 0}} {\sp{\sn pictureBiLevel}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fHitTestFill}{\sv 1}}{\sp{\sn fillShape}{\sv 1}}{\sp{\sn fillUseRect}{\sv 0}}{\sp{\sn fNoFillHitTest}{\sv 0}} {\sp{\sn fLine}{\sv 0}}{\sp{\sn fReallyHidden}{\sv 0}}{\sp{\sn fScriptAnchor}{\sv 0}}{\sp{\sn fFakeMaster}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 \picw7620\pich7620\picwgoal4320\pichgoal4320\wmetafile8}}}}{\tab }{\b\f1\fs22 Note \par }\pard \ql \li1392\ri0\sb120\sl286\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1392\itap0 {\f1\fs22 If you are enabling }{\i\f1\fs22 sparse_iterative_sovle}{\f1\fs22 or }{\i\f1\fs22 sparse_direct_solve}{\f1\fs22 , you will need to type }{\b\f1\fs22 make wrappers}{\f1\fs22 followed by }{\b\f1\fs22 make server}{\f1\fs22 . \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {NetSolve's distributed memory services (e.g., ScaLAPACK, PETSc) are spawned using MPI (}{\b mpirun -machinefile MPImachines ...}{ ) and thus require an MPI machine file describing the parallel machine on which to run. The name of the file containing this list of homogeneous machines is called }{\f2\fs21 $NETSOLVE_ROOT/MPImachines}{ and is referenced in the file }{\f2\fs21 $NETSOLVE_ROOT/server_config}{ for configuring the server. Therefore, if you are enabling parallel services within a server, the user }{\i MUST}{ edit this }{\f2\fs21 $NETSOLVE_ROOT/MPImachines}{ file to list the specific machines to be used. The current implementation of NetSolve allows only one }{\f2\fs21 MPImachines}{ file per server. This spawning file is tied to the server, and }{\i not}{ to a specific service enabled. Thus, unfortunately, if you wish to ena ble parallel services on different clusters, then you must enable the software on different servers -- i.e., maintain a separate NetSolve source code tree for each server enablement so that each parallel service can have its own }{\f2\fs21 MPImachines}{ file from which to spawn. A future release of NetSolve should identify a separate }{\f2\fs21 MPImachines}{ file with each parallel service that can be enabled. \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart ID_ENABLING_45_LAPACK} {\*\bkmkend ID_ENABLING_45_LAPACK}13.3.1. Enabling the LAPACK library \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {To enable LAPACK within NetSolve, one must perform the following steps: \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{During the configure phase of the NetSolve installation, type \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 UNIX> ./configure --with-lapacklib=LAPACK_LIB --with-blaslib=BLAS_LIB \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {where }{\f2\fs21 LAPACK_LIB}{ denotes the name of the LAPACK library, and }{\f2\fs21 BLAS_LIB}{ denotes the name(s) of t he BLAS library. If these libraries are not already available on the user's machine, he can download LAPACK from the }{\i LAPACK web page}{ (http://www.netlib.org/lapack/lapack.tgz). If an optimized BLAS library is not available on the user's machine, he can view the }{\i BLAS FAQ}{ (http://www.netlib.org/blas/faq.html#1.6) for details of availability; otherwise, he can download ATLAS from the }{\i ATLAS webpage}{ (http://www.netlib.org/atlas/) and it will automatically generate an optimized BLAS library for the installation ar chitecture. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{The user must then uncomment the respective line \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 #./problems/lapack \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {in the }{\f2\fs21 @PROBLEMS:}{ section of the }{\f2\fs21 $NETSOLVE_ROOT/server_config}{ file by removing the }{\f2\fs21 #}{ from the beginning of the line. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{And lastly, the user must recompile the server by typing }{\b make server}{ in the }{\f2\fs21 $NETSOLVE_ROOT/}{ directory. \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart ID_ENABLING_45_SCALAPACK} {\*\bkmkend ID_ENABLING_45_SCALAPACK}13.3.2. Enabling the ScaLAPACK library \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {To enable ScaLAPACK within NetSolve, one must perform the following steps. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{During the configure phase of the NetSolve installation, type \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\faauto\rin0\lin1200\itap0 {\f2\fs21 UNIX> ./configure --with-scalapacklib=SCALAPACK_LIB \\ \par }\pard \ql \li1200\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin1200\itap0 {\f2\fs21 --with-blacslib=BLACS_LIB --with-blaslib=BLAS_LIB \\ \par }\pard \ql \li1200\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 --with-mpidir=MPI_DIR \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {where }{\f2\fs21 SCALAPACK_LIB}{ denotes the name of the ScaLAPACK library, }{\f2\fs21 BLACS_LIB}{ denotes the name(s) of the MPIBLACS libraries, and }{\f2\fs21 BLAS_LIB}{ denotes the name(s) of the BLAS library. If these libraries are not already available on the user's machine, he can download ScaLAPACK from the }{\i ScaLAPACK web page}{ (http://www.netlib.org/scalapack /scalapack.tgz), and the MPIBLACS from the }{\i BLACS web page}{ (http://www.netlib.org/blacs/mpiblacs.tgz). If an optimized BLAS library is not available on the user's machine, he can view the }{\i BLAS FAQ}{ (http://www.netlib.org/blas/faq.html#1.6) for details of availability; otherwise, he can download ATLAS from the }{\i ATLAS webpage}{ (http://www.netlib.org/atlas/) and it will automatically generate an optimized BLAS library for the installation architecture. }{\f2\fs21 MPI_DIR}{ denotes the location of the MPI library (assumes the standard MPICH distribution). \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{The user must then uncomment the respective line \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 #./problems/scalapack \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {in the }{\f2\fs21 @PROBLEMS:}{ section of the }{\f2\fs21 $NETSOLVE_ROOT/server_config}{ file by removing the }{\f2\fs21 #}{ from the beginning of the line. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{And lastly, the user must recompile the server by typing }{\b make server}{ in the }{\f2\fs21 $NETSOLVE_ROOT/}{ directory. \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart ID_ENABLING_45_ITERATIVE} {\*\bkmkend ID_ENABLING_45_ITERATIVE}13.3.3. Enabling Sparse Iterative Solvers (PETSc, Aztec, and ITPACK) \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {NetSolve offers a }{\i 'sparse_iterative_solve'}{ service as a convenient int erface to sparse iterative methods packages such as PETSc, Aztec, and ITPACK. If the user would like to enable PETSc, Aztec, or ITPACK within NetSolve, he must perform the following steps. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{During the configure phase of the NetSolve installation, type \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\faauto\rin0\lin1200\itap0 {\f2\fs21 UNIX> ./configure --with-petsc=PETSC_DIR --with-aztec=AZTEC_DIR \\ \par }\pard \ql \li1200\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin1200\itap0 {\f2\fs21 --with-azteclib=AZTEC_LIB --with-lapacklib=LAPACK_LIB \\ \par }\pard \ql \li1200\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 --with-blaslib=BLAS_LIB --with-mpidir=MPI_DIR \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {where }{\f2\fs21 PETSC_DIR}{ denotes the location of the PETSc directory containing the standard distribution, }{\f2\fs21 AZTEC_DIR}{ denotes the location of the Aztec directory where the include files can be found, }{\f2\fs21 AZTEC_LIB}{ is the link line for the Aztec library, }{\f2\fs21 LAPACK_LIB}{ denotes the name of the LAPACK library, }{\f2\fs21 BLAS_LIB}{ denotes the name(s) of the BLAS library, and }{\f2\fs21 MPI_DIR}{ denotes the location of the MPI library (assumes the standard MPICH distribution). If these libraries are not already available on the user's machine, he can download and install the software from the respective webpages -- (}{\i PETSc homepage}{ (http://www-fp.mcs.anl.gov/petsc/), and }{\i Aztec homepage}{ (http://www.cs.sandia.gov/CRF/aztec1.html)). The PETSc interface is compatible with PETSc, version 2.0.29. LAPACK can be downloaded from the }{\i LAPACK web page}{ (http://www.netlib.org/lapack/lapack.tgz). If an optimized BLAS library is not available on the user's machine, he can view the }{\i BLAS FAQ}{ (http://www.netlib.org/blas/faq.html#1.6) for details of availability; otherwise, he can download ATLAS from the }{\i ATLAS webpage}{ (http://www.netlib.org/atlas/) a nd it will automatically generate an optimized BLAS library for the installation architecture. The ITPACK library is distributed with NetSolve in }{\f2\fs21 $NETSOLVE_ROOT/src/SampleNumericalSoftware/ITPACK/}{ since a small modification to the library was necessary to enable its use in NetSolve. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{The user must then uncomment the respective line \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 #./problems/sparse_iterative_solve \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {in the }{\f2\fs21 @PROBLEMS:}{ section of the }{\f2\fs21 $NETSOLVE_ROOT/server_config}{ file by removing the }{\f2\fs21 #}{ from the beginning of the line. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{And second, the user must compile the server by typing }{\b make wrappers}{ and }{\b make server}{ in the }{\f2\fs21 $NETSOLVE_ROOT/}{ directory. \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart ID_ENABLING_45_DIRECT} {\*\bkmkend ID_ENABLING_45_DIRECT}13.3.4. Enabling Sparse Direct Solvers (SuperLU and MA28) \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {NetSolve offers a }{\i 'sparse_direct_solve'}{ service as a convenient interface to sparse direct methods packages such as SuperLU and MA28. If the user would like to enable SuperLU or MA28 within NetSolve, he must perform the following steps. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{During the configure phase of the NetSolve installation, type (for example, to enable SuperLU) \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\faauto\rin0\lin1200\itap0 {\f2\fs21 UNIX> ./configure --with-superlu=SUPERLU_DIR --with-superlulib=SUPERLU_LIB \\ \par }\pard \ql \li1200\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin1200\itap0 {\f2\fs21 --with-lapacklib=LAPACK_LIB --with-blaslib=BLAS_LIB \\ \par }\pard \ql \li1200\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 --with-mpidir=MPI_DIR \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {where }{\f2\fs21 SUPERLU_DIR}{ denotes the location of the SuperLU directory where the include files can be found, }{\f2\fs21 SUPERLU_LIB}{ is the link line for the SuperLU library, }{\f2\fs21 LAPACK_LIB}{ denotes the name of the LAPACK library, }{\f2\fs21 BLAS_LIB}{ denotes the name(s) of the BLAS library, and }{\f2\fs21 MPI_DIR}{ denotes the loca tion of the MPI library (assumes the standard MPICH distribution). If these libraries are not already available on the user's machine, he can download and install the software from the respective webpage -- }{\i SuperLU homepage}{ (http://www.nersc.gov/~xiaoye/SuperLU/). The MA28 library is distributed with NetSolve in }{\f2\fs21 $NETSOLVE_ROOT/src/SampleNumericalSoftware/MA28/}{ since a small modification to the library was necessary to enable its use in NetSolve. LAPACK can be downloaded from the }{\i LAPACK web page}{ (http://www. netlib.org/lapack/lapack.tgz). If an optimized BLAS library is not available on the user's machine, he can view the }{\i BLAS FAQ}{ (http://www.netlib.org/blas/faq.html#1.6) for details of availability; otherwise, he can download ATLAS from the }{\i ATLAS webpage}{ (http://www.netlib.org/atlas/) and it will automatically generate an optimized BLAS library for the installation architecture. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{The user must then uncomment the respective line \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 #./problems/sparse_direct_solve \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {in the }{\f2\fs21 @PROBLEMS:}{ section of the }{\f2\fs21 $NETSOLVE_ROOT/server_config}{ file by removing the }{\f2\fs21 #}{ from the beginning of the line. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{And lastly, the user must compile the server by typing }{\b make wrappers}{ and }{\b make server}{ in the }{\f2\fs21 $NETSOLVE_ROOT/}{ directory. \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 14. Running the NetSolve Agent}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 14. Running the NetSolve Agent}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_AGENT}{\*\bkmkend ID_AGENT} Chapter 14. Running the NetSolve Agent \par }\pard\plain \ql \li960\ri0\sb249\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {After compiling the agent as explained in }{\field{\*\fldinst { HYPERLINK \\l ID_ADMIN_45_DOWNLOAD}{ {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000016000000490044005f00410044004d0049004e005f00340035005f0044004f0057004e004c004f004100440023000000}}}{\fldrslt {Section 13.1}}}{, the executable of the NetSolve agent is located in: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH/agent. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The proper command line for this program is \par }{\b agent}{ [-a agent_name] [-l logfile] \par When invoked with no arguments, a stand-alone agent is started. This agent is now available for registrations of NetSolve servers wanting to participate in a new NetSolve system. After servers are registered, client programs can contact this agent and hav e requests serviced by one or more of the registered servers. \par }\pard \ql \fi-432\li1392\ri0\sb240\sl286\slmult0\widctlpar\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\field{\*\fldinst {INCLUDEPICTURE "/usr/share/sgml/stylesheets/docbook/images/note.eps" }}{\fldrslt { {\pict{\*\picprop\shplid1037{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn pibName}{\sv /usr/share/sgml/stylesheets/docbook/images/note.eps}}{\sp{\sn pibFlags}{\sv 2}}{\sp{\sn pictureGray}{\sv 0}} {\sp{\sn pictureBiLevel}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fHitTestFill}{\sv 1}}{\sp{\sn fillShape}{\sv 1}}{\sp{\sn fillUseRect}{\sv 0}}{\sp{\sn fNoFillHitTest}{\sv 0}} {\sp{\sn fLine}{\sv 0}}{\sp{\sn fReallyHidden}{\sv 0}}{\sp{\sn fScriptAnchor}{\sv 0}}{\sp{\sn fFakeMaster}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 \picw7620\pich7620\picwgoal4320\pichgoal4320\wmetafile8}}}}{\tab }{\b\f1\fs22 Note: \par }\pard \ql \li1392\ri0\sb120\sl286\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1392\itap0 {\f1\fs22 Only one NetSolve agent can be running on a given machine at a given time. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {When the }{\b\f2 -a}{ option is used, as in: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> agent -a netsolve.cs.utk.edu \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { the new agent will register itself with the agent running on the host specified by the agent_name argument. If no agent is running on this host, the new agent will exit with an appropriate error message. However, when it is able to contact that agent, it will receive from that agent, a list of servers (who have given the previous agent the permission to broadcast their status, see }{\field{\*\fldinst { HYPERLINK \\l ID_SERVER}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f0053004500520056004500520023000000}}}{\fldrslt {Chapter 15}}}{) and possibly other agents. These servers then also become available for the servicing of requests sent via the new agent. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The }{\b\f2 -l}{ option specifies the name of a file to use for logging purposes. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> agent -l /home/me/agent_logfile \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {This file is where the agent logs all of its interactions (and possibly errors) since it is a daemon with no controlling terminal and therefore has no way to do this otherwise. This log file also produces very useful information about requests, among other things, that helps administrators know how their NetSolv e system is being used. If no }{\b\f2 -l}{ option is specified, the default log file is }{\f2\fs21 $NETSOLVE_ROOT/nsagent.log}{ . This means that successive runs of the agent with no specification of a log file will overwrite the original log file, so if the information is needed, it must be copied to another file. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {To terminate an existing agent (or query an existing NetSolve system), the user should refer to the NetSolve management tools, particularly }{\b NS_killagent}{ , as outlined in }{\field{\*\fldinst { HYPERLINK \\l ID_TOOLS}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f0054004f004f004c00530023000000}}}{\fldrslt {Chapter 16}}}{. \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 15. Running the NetSolve Server}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 15. Running the NetSolve Server}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_SERVER}{\*\bkmkend ID_SERVER} Chapter 15. Running the NetSolve Server \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _1688}{\*\bkmkend _1688} 15.1. Starting a Server \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {After compiling the server as explained in }{\field{\*\fldinst { HYPERLINK \\l ID_ADMIN_45_DOWNLOAD}{ {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000016000000490044005f00410044004d0049004e005f00340035005f0044004f0057004e004c004f004100440023000000}}}{\fldrslt {Section 13.1}}}{, the executable of the NetSolve server is located in: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH/server. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The proper command line for this program is \par }{\b server}{ [-f config_file] [-l logfile] [-k] \par This executable uses a }{\i configuration file}{ for initializing the NetSolve server. When invoked with no arguments as: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> server \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {the default configuration file located in }{\f2\fs21 $NETSOLVE_ROOT/server_config}{ is used. This is the file that should be used for first experiments and for testing the system. However, it is possible to customize or expand the functionality of a server (}{\field{\*\fldinst { HYPERLINK \\l ID_CONFIG_45_FILE}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000013000000490044005f0043004f004e004600490047005f00340035005f00460049004c00450023000000}}}{\fldrslt {Section 15.2}}}{), or to specify another configuration file by calling the executable as in \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> server -f /home/me/my_config \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {for instance. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The }{\b\f2 -l}{ option specifies the name of a file to use for logging purposes. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> server -l /home/me/agent_logfile \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { This file is where the server logs all of its interactions (and possibly errors) since it is a daemon with no controlling terminal and therefore has no way to do this otherwise. If the }{\b\f2 -l}{ option is not specified, the default log file is }{ \f2\fs21 $NETSOLVE_ROOT/nsserver.log}{. Successive runs of the server with no specification of a log file will overwrite the original log file, so if the information is needed, it must be copied to another file! \par }\pard \ql \fi-432\li1392\ri0\sb240\sl286\slmult0\widctlpar\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\field{\*\fldinst {INCLUDEPICTURE "/usr/share/sgml/stylesheets/docbook/images/note.eps" }}{\fldrslt { {\pict{\*\picprop\shplid1039{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn pibName}{\sv /usr/share/sgml/stylesheets/docbook/images/note.eps}}{\sp{\sn pibFlags}{\sv 2}}{\sp{\sn pictureGray}{\sv 0}} {\sp{\sn pictureBiLevel}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fHitTestFill}{\sv 1}}{\sp{\sn fillShape}{\sv 1}}{\sp{\sn fillUseRect}{\sv 0}}{\sp{\sn fNoFillHitTest}{\sv 0}} {\sp{\sn fLine}{\sv 0}}{\sp{\sn fReallyHidden}{\sv 0}}{\sp{\sn fScriptAnchor}{\sv 0}}{\sp{\sn fFakeMaster}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 \picw7620\pich7620\picwgoal4320\pichgoal4320\wmetafile8}}}}{\tab }{\b\f1\fs22 Note: \par }\pard \ql \li1392\ri0\sb120\sl286\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1392\itap0 {\f1\fs22 Multiple NetSolve servers can be running on a given machine if and only if they have a different NetSolve agent. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {When the server has been compiled with the Kerberos libraries, the administrator has the option of having the server require clients to authenticate before rendering services. To mandate this authentication, the }{\b\f2 -k}{ option must be used, otherwise no authentication will be asked for, and the server will be available to service requests to ANY client asking for services. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {To terminate an existing server (or query an existing NetSolve system), the user should refer to the NetSolve management tools as outlined in }{\field{\*\fldinst { HYPERLINK \\l ID_TOOLS}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f0054004f004f004c00530023000000}}}{\fldrslt {Chapter 16}}}{. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_CONFIG_45_FILE} {\*\bkmkend ID_CONFIG_45_FILE}15.2. The Server Configuration File \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {The server configuration file is used to customize the server. The default configuration file in }{ \f2\fs21 $NETSOLVE_ROOT/server_config}{ should be used as a template to create new configuration files. This configuration file is organized as follows. A line can start with a }{\b\f2 '#'}{ in which case the line is ignored and can be used for comments. A line can also start with a }{\i keyword}{ that is prefixed by a }{\b\f2 '@'}{ typically followed by a single value or parameter. Let us review all of the possible keywords and how they can be used to precisely define a NetSolve server as it is done in the default configuration file. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{\f2\fs21 '@AGENT:'[*]}{ specifies the agent that the NetSolve server must contact to register into a NetSolve system. The agent is identified by the name of the host on which it is running and there can be only one such line in the configuration file. If the }{\f2\fs21 '*'}{ is present, then the server will broadcast its existence to all NetSolve agents known to the one running on }{\f2\fs21 }{. Otherwise, the server will only be known to the agent on }{\f2\fs21 }{. \par }{\fs19 \bullet \tab }{\f2\fs21 '@PROC:'}{ specifies the number of processors (=1 for a single processor, =2 for a dual processor, =4 for a quad processor) that can be used by the server to perform simultaneous computations on the local hosts. There can on ly be one such line in the configuration file. \par }{\fs19 \bullet \tab }{\f2\fs21 '@MPIHOSTS '}{ specifies the path to the file that contains the list of machines that can be used by MPI, and the maximum number of processors that can be spawned by MPI. \par }{\fs19 \bullet \tab }{\f2\fs21 '@WORKLOADMAX:'}{ specifies the value of the workload beyond which the server refuses new requests (e.g. }{\f2\fs21 '@WORKLOADMAX:100'}{). A value of }{\b\f2 -1}{ means that the server accepts requests regardless of the workload. \par }{\fs19 \bullet \tab }{\f2\fs21 '@SCRATCH:'}{ specifies where the NetSolve server can put temporary directories and files. The default is }{\f2\fs21 /tmp/}{. \par }{\fs19 \bullet \tab }{\f2\fs21 '@CONDOR:'}{ specifies that the NetSolve server is using a Condor [condor1] [condor2] pool as a computing resource. The path to the Condor base directory must be provided. There can be only one such line in the configuration file. \par }{\fs19 \bullet \tab }{\f2\fs21 '@PROBLEMS:'}{ marks the beginning of the list of }{\i problem description file (PDF)}{ names that are enabled in the NetSolve server installation. Each of these problem description files contains interfaces to a number of problems/subroutines from a particular software library. If a particular prob lem description file is enabled in the server configuration file, then the problems/subroutines contained therein become available on that server. A number of PDFs have been written for a variety of software packages, but the default NetSolve installation only enables a small subset, as there is only a limited amount of software included with the NetSolve distribution. Details of description files are given in }{\field{\*\fldinst { HYPERLINK \\l ID_EXPANDING_45_SERVER}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000018000000490044005f0045005800500041004e00440049004e0047005f00340035005f0053004500520056004500520023000000}}}{\fldrslt {Section 13.3}}}{. \par }{\fs19 \bullet \tab }{\f2\fs21 '@RESTRICTIONS:'}{ marks the beginning of the list of access restrictions that are applicable to the NetSolve server. The list consists of lines formatted as: \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {The symbol }{\b\f2 '*'}{ is used as a wildcard in the domain name. For instance, the line: \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 *.edu 10 \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {means that only 10 requests from clients residing on a }{\b\f2 .edu}{ machine can be serviced simultaneously. When the server receives a request from some machine, it determines which line in the list must be used to accept or reje ct the request by taking the most refined domain name. For instance, if the list of the restrictions is: \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\faauto\rin0\lin1200\itap0 {\f2\fs21 *.edu 5 \par }\pard \ql \li1200\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 *.utk.edu 10 \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {then the server accepts at most 5 simultaneous requests coming from }{\b\f2 .edu}{ machines that are }{\i not}{ in the }{\i .utk.edu}{ sub-domain, and at most 10 requests that come from machines in the }{\b\f2 .utk.edu}{ sub-domain for a total of 15 possible simultaneous requests. \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 16. NetSolve Management Tools for Administrators}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 16. NetSolve Management Tools for Administrators}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_TOOLS}{\*\bkmkend ID_TOOLS} Chapter 16. NetSolve Management Tools for Administrators \par }\pard\plain \ql \li960\ri0\sb249\sa120\sl312\slmult0\widctlpar\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {The NetSolve distribution comes with a set of tools to manage/query a NetSolve sy}{s}{ tem. After compiling the tools as explained in }{\field{\*\fldinst { HYPERLINK \\l ID_ADMIN_45_DOWNLOAD}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000016000000490044005f00410044004d0049004e005f00340035005f0044004f0057004e004c004f004100440023000000}}}{\fldrslt {Section 13.1}}}{, the following six execut}{a}{bles are available: \par }\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\pard \ql \li60\ri60\sl312\slmult0\widctlpar\intbl\faauto\rin60\lin60 {\b\fs20 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH/NS_conf\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\b\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\row }\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\pard \ql \li60\ri60\sl312\slmult0 \widctlpar\intbl\faauto\rin60\lin60 {\b\fs20 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH/NS_problems\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\b\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl \brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\row }\pard \ql \li60\ri60\sl312\slmult0\widctlpar\intbl\faauto\rin60\lin60 {\b\fs20 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH/NS_probdesc\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\b\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\row }\pard \ql \li60\ri60\sl312\slmult0\widctlpar\intbl\faauto\rin60\lin60 {\b\fs20 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH/NS_killagent\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\b\fs20 \trowd \trleft960\trftsWidth1 \clvertalt \clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\row }\pard \ql \li60\ri60\sl312\slmult0\widctlpar\intbl\faauto\rin60\lin60 {\b\fs20 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH/NS_killserver\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\b\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\row }\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\pard \ql \li60\ri60\sl312\slmult0\widctlpar\intbl\faauto\rin60\lin60 {\b\fs20 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH/NS_killall\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\b\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth8400 \cellx9360\row }\pard \ql \li0\ri0\sl-1\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\fs20\lang1024\langfe1024\noproof \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\fs20 Let us review these executables one by one. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _1784}{\*\bkmkend _1784} 16.1. NS_conf \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {This executable takes one argument on the command line, the name of a host running a NetSolve agent: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> NS_conf netsolve.cs.utk.edu \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {It prints the list of hosts participating in the NetSolve system: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 AGENT: netsolve.cs.utk.edu (128.169.93.161) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 SERVER: maruti.cs.berkeley.edu (128.32.36.83) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 SERVER: cupid.cs.utk.edu (128.169.94.221) \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _1791}{\*\bkmkend _1791} 16.2. NS_problems \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { This executable takes the name of a host running an agent as single argument on its command line. It prints the list of problems that can be solved by contacting that agent: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> NS_problems netsolve.cs.utk.edu \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 /BLAS/Matrices/matmul \par /ItPack/jsi \par /LAPACK/Matrices/EigenValues/eig \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 /LAPACK/Matrices/SingularValues/svd \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _1796}{\*\bkmkend _1796} 16.3. NS_probdesc \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {This executable takes two arguments on its command l ine: the name of a host running a NetSolve agent and the nickname of a NetSolve problem. It prints the description of the problem: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> NS_probdesc netsolve.cs.utk.edu linsol \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 -- linsol -- From LAPACK - \par Compute the solution to a real system of linear equations \par A * X = b \par where A is an N-by-B matrix and X and B are N-by-NRHS matrices. \par Matlab Example : [x] = netsolve('dgesv',a,b) \par http://www.netlib.org/lapack/index.html \par * 2 objects in INPUT \par - input 0: Matrix Double Precision Real. \par Matrix A \par - input 1: Matrix Double Precision Real. \par Right hand side \par * 1 objects in OUTPUT \par - output 0: Matrix Double Precision Real. \par Solution \par * Calling sequence from C or Fortran \par 6 arguments \par - Argument #0: \par - number of rows of input object #0 (A) \par - number of columns of input object #0 (A) \par - number of rows of input object #1 (RHS) \par - Argument #1: \par - number of columns of input object #1 (RHS) \par - Argument #2: \par - pointer to input object #0 (A) \par - Argument #3: \par - leading dimension of input object #0 (A) \par - Argument #4: \par - pointer to input object #1 (RHS) \par - pointer to output object #0 (SOLUTION) \par - Argument #5: \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 - leading dimension of input object #1 (RHS) \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _1801}{\*\bkmkend _1801} 16.4. NS_killagent \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {This executable takes one argument on its command line, the name o f a host running a NetSolve agent. After a (basic) user authentication, the executable kills the agent. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> NS_killagent netsolve.cs.utk.edu \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Agent on netsolve.cs.utk.edu : killed \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _1806}{\*\bkmkend _1806} 16.5. NS_killserver \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { This executable takes two arguments on its command line, the name of a host running a NetSolve agent and the name of a host running a NetSolve server. After a (basic) user authentication, the executable kills the server, using the agent as an entry-point into the system. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> NS_killserver netsolve.cs.utk.edu cupid.cs.utk.edu \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Server on cupid.cs.utk.edu killed : killed \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _1811}{\*\bkmkend _1811} 16.6. NS_killall \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { This Shell script takes one argument on its command line, the name of a host running a NetSolve agent. After a (basic) user authentication, the executable kills the agent, along with all other NetSolve processes (agents and servers) known to that agent: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> NS_killall netsolve.cs.utk.edu \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 Server on cupid.cs.utk.edu : killed \par Server on maruti.cs.berkeley.edu : killed \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Agent on netsolve.cs.utk.edu : killed \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 17. The Problem Description File}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 17. The Problem Description File}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_PDF}{\*\bkmkend ID_PDF} Chapter 17. The Problem Description File \par }\pard\plain \ql \li960\ri0\sb249\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { The problem description file (PDF) is the mechanism through which NetSolve enables services for the user. The NetSolve distribution contains the source code for MA28, ITPACK, qsort, and a subset of BLAS and LAPACK routines. This software is contained in t he }{\f2\fs21 $NETSOLVE_ROOT/src/SampleNumericalSoftware/}{ directory. Therefore, the default NetSolve enablement (contained in }{\f2\fs21 $NETSOLVE_ROOT/server_config}{ ) only accesses the PDFs related to the included software packages. The user should refer to }{\field{\*\fldinst { HYPERLINK \\l ID_EXPANDING_45_SERVER}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000018000000490044005f0045005800500041004e00440049004e0047005f00340035005f0053004500520056004500520023000000}}}{\fldrslt {Section 13.3}}}{ for details on expanding the capabilities of a server, and refer to } {\field{\*\fldinst { HYPERLINK \\l ID_CONTENTSPDF}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000010000000490044005f0043004f004e00540045004e005400530050004400460023000000}}}{\fldrslt {Section 17.1}}}{ for details on the structure of a problem description file. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart ID_CONTENTSPDF} {\*\bkmkend ID_CONTENTSPDF}17.1. Contents of a Problem Description File \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { In what follows we describe the contents of a problem description file (PDF). We offer all of the details because it may be necessary or desirable to be aware of them, but we strongly recommend the use of the GUI application described in } {\field{\*\fldinst { HYPERLINK \\l ID_PDGUI}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f005000440047005500490023000000}}}{\fldrslt {Section 17.1.6}}}{ to create new PDFs. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The rationale for the syntax of the description files is explained in [ima]. Each description file is composed of several }{\i problem descriptions}{. Before explaining how to create a problem description, we reiterate the concept of }{\i objects}{ in NetSolve, and then define the concept of }{\i mnemonics}{. \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart ID_OBJECTS}{\*\bkmkend ID_OBJECTS} 17.1.1. NetSolve Objects \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {As detailed in }{\field{\*\fldinst { HYPERLINK \\l ID_PROBLEMSPECIFICATION}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000019000000490044005f00500052004f0042004c0045004d00530050004500430049004600490043004100540049004f004e0023000000}}}{\fldrslt {Section 4.1}}}{ , the syntax of a NetSolve problem specification is a function evaluation: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 = () \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {where \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{\f2\fs21 }{ is a character string containing the name of the problem, \par }{\fs19 \bullet \tab }{\f2\fs21 }{ is a list of input objects, \par }{\fs19 \bullet \tab }{\f2\fs21 }{ is a list of output objects. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {An object is itself described by an }{\i object type}{ and a }{\i data type}{. The types available in the current version of NetSolve are shown in }{\field{\*\fldinst { HYPERLINK \\l ID_TABLE1}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f005400410042004c004500310023000000}}}{\fldrslt {Table 17-1}}}{ and }{\field{\*\fldinst { HYPERLINK \\l ID_TABLE1A}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f005400410042004c0045003100410023000000}}}{\fldrslt {Table 17-2}}}{. \par }\pard \ql \li960\ri0\sb240\sa120\sl312\slmult0\keepn\widctlpar\faauto\rin0\lin960\itap0 {\b {\*\bkmkstart ID_TABLE1}{\*\bkmkend ID_TABLE1}Table 17-1. Available data types \par }\trowd \trleft960\trhdr\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\b\f1\fs20 Data Type\cell Description\cell Note\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\b\f1\fs20 \trowd \trleft960\trhdr\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NETSOLVE_I\cell Integer\cell }\pard \ql \li0\ri0\sl-120\slmult0\widctlpar\intbl\faauto\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \par \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NETSOLVE_CHAR\cell Character\cell }\pard \ql \li0\ri0\sl-120\slmult0\widctlpar\intbl\faauto\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \par \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NETSOLVE_BYTE\cell Byte\cell never XDR encoded\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NETSOLVE_FLOAT\cell Single precision real\cell }\pard \ql \li0\ri0\sl-120\slmult0 \widctlpar\intbl\faauto\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \par \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NETSOLVE_DOUBLE\cell Double precision real\cell }\pard \ql \li0\ri0\sl-120\slmult0\widctlpar\intbl\faauto\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \par \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NETSOLVE_SCOMPLEX\cell Single precision complex\cell }\pard \ql \li0\ri0\sl-120\slmult0\widctlpar\intbl\faauto\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \par \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NETSOLVE_DCOMPLEX\cell Double precision complex\cell }\pard \ql \li0\ri0\sl-120\slmult0\widctlpar\intbl\faauto\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \par \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\pard \ql \li0\ri0\sl-1\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\fs20\lang1024\langfe1024\noproof \par }\pard \ql \li960\ri0\sb240\sa120\sl312\slmult0\keepn\widctlpar\faauto\rin0\lin960\itap0 {\b\fs20 {\*\bkmkstart ID_TABLE1A}{\*\bkmkend ID_TABLE1A}Table 17-2. Available object types \par }\trowd \trleft960\trhdr\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\b\f1\fs20 Object Type\cell Description\cell Note\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\b\f1\fs20 \trowd \trleft960\trhdr\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NETSOLVE_SCALAR\cell scalar\cell }\pard \ql \li0\ri0\sl-120\slmult0\widctlpar\intbl\faauto\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \par \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NETSOLVE_VECTOR\cell vector\cell }\pard \ql \li0\ri0\sl-120\slmult0 \widctlpar\intbl\faauto\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \par \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NETSOLVE_MATRIX\cell matrix\cell }\pard \ql \li0\ri0\sl-120\slmult0 \widctlpar\intbl\faauto\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \par \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NETSOLVE_SPARSEMATRIX\cell sparse matrix\cell Compressed Row Storage (CRS) format\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl \brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NETSOLVE_FILE\cell file\cell only of data type NETSOLVE_CHAR\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl \brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NETSOLVE_PACKEDFILES\cell packed files\cell only of data type NETSOLVE_CHAR\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl \brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NETSOLVE_UPF\cell User Provided Function\cell only of data type NETSOLVE_CHAR\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl \brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NETSOLVE_STRING\cell Character string\cell only of data type NETSOLVE_CHAR\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl \brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NETSOLVE_STRINGLIST\cell Character string list\cell only of data type NETSOLVE_CHAR\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx3760\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx6560\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl \brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth2800 \cellx9360\row }\pard \ql \li0\ri0\sl-1\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\fs20\lang1024\langfe1024\noproof \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\fs20 A problem description file (PDF) uses these objects to define a problem specification for a given service. }{\field{\*\fldinst {\fs20 HYPERLINK \\ l ID_MNEMONICS}{\fs20 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f004d004e0045004d004f004e0049004300530023000000}}}{\fldrslt {\fs20 Section 17.1.2}}}{\fs20 describes the requirements for each NetSolve }{\i\fs20 object type}{\fs20 as it relates to the problem description file. \par }\pard\plain \s4\ql \li960\ri0\sb240\sl374\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel3\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs28\lang1024\langfe1024\noproof {\*\bkmkstart ID_SPARSEMATRICES} {\*\bkmkend ID_SPARSEMATRICES}17.1.1.1. Sparse Matrix Representation in NetSolve \par }\pard\plain \ql \li960\ri0\sb144\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { NetSolve uses the Compressed Row Storage (CRS) for storing sparse matrices. The Compressed Row Storage (CRS) format puts the subsequent nonzeros of the matrix r ows in contiguous memory locations. Assuming we have a nonsymmetric sparse matrix, we create vectors: one for floating-point numbers (val), and the other two for integers (col_ind, row_ptr). The val vector stores the values of the nonzero elements of the matrix, as they are traversed in a row-wise fashion. The col_ind vector stores the column indexes of the elements in the val vector. The row_ptr vector stores the locations in the val vector that start a row. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { For example, if \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 1 0 3 1 \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 A = 0 0 5 2 \par 6 1 0 8 \par 4 0 0 0 \par \par then, \par \par val: 1 3 1 5 2 6 1 8 4 \par col_ind: 0 2 3 2 3 0 1 3 0 \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 row_ptr: 0 3 5 8 9 \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { Thus, if a problem in NetSolve has the following specifications: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 -- sm_prob -- \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 * 1 object in INPUT \par - input 0: Sparse Matrix Double Precision Real. \par the sparse matrix \par * Calling sequence from C or Fortran \par 11 arguments \par - Argument #0: \par - number of rows of input object #0 (sm) \par - number of columns of input object #0 (sm) \par - Argument #1: \par - number of non-zero values of input object #0 (sm) \par - Argument #2: \par - pointer to input object #0 (sm) \par - Argument #3: \par - column indices of non-zeros of input object #0 (sm) \par - Argument #4: \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 - row pointers of the sparse matrix #0 (sm) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {a Matlab user would call this program as: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> netsolve('sm_prob', SM); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {where SM is a Matlab constructed sparse matrix object. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {and a C user would invoke this problem as: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 double* val; \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 int* col_index; \par int* row_ptr; \par \par int rows, num_nzeros; \par \par /* initialize the arrays and variables */ \par ... \par ... \par ... \par \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 status = netsl("sm_prob()", rows, num_nzeros, val, col_index, row_ptr); \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart ID_MNEMONICS} {\*\bkmkend ID_MNEMONICS}17.1.2. Mnemonics \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {As described in }{\field{\*\fldinst { HYPERLINK \\l ID_OBJECTS}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f004f0042004a00450043005400530023000000}}}{\fldrslt {Section 17.1.1}}}{, the NetSolve system defines data structures that we call NetSolve }{\i objects}{ . These are high-level objects that are comprised of integers, and arrays of characters and floats. To be able to relate high-level and low-level descriptions of the input and outpu t objects of a given problem, we need to develop some kind of syntax. We decided to term this syntax }{\i mnemonics}{ . A mnemonic is a character string (typically 2 or 3 characters long) that is used to access low level details of the different input and output o bjects. We index the list of objects, starting at 0. Therefore, the first object in input to a problem is the input object number 0 and the third object in output to a problem is the output object number 2, for instance. We use an }{\f2\fs21 I}{ or an }{ \f2\fs21 O}{ to specify whether an object is in input or output. Here are the eight types of mnemonics for an object indexed }{\f2\fs21 x}{: \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{Pointer to the data : }{\f2\fs21 [I|O]x}{, \par }{\fs19 \bullet \tab }{Number of rows : }{\f2\fs21 m[I|O]x}{ (only for matrices, vectors, packed files and string lists), \par }{\fs19 \bullet \tab }{Number of columns : }{\f2\fs21 n[I|O]x}{ (only for matrices), \par }{\fs19 \bullet \tab }{Leading dimensions : }{\f2\fs21 l[I|O]x}{ (only for matrices). \par }{\fs19 \bullet \tab }{Special descriptor : }{\f2\fs21 d[I|O]x}{ (only for distributed memory objects). \par }{\fs19 \bullet \tab }{Nonzero values of the sparse matrix: }{\f2\fs21 f[I|O]x \par }{\fs19 \bullet \tab }{Row pointers for the sparse matrix: }{\f2\fs21 i[I|O]x \par }{\fs19 \bullet \tab }{Column indices for the sparse matrix: }{\f2\fs21 p[I|O]x \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {For example, }{\f2\fs21 mI4}{ designates the number of rows of the input object number 4, whereas }{\f2\fs21 O1}{ designates the pointer to the data of output object number 1. In the next section, we describe the different sections that are necessary to build a problem description and will see how the mnemonics are used. \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart _2005}{\*\bkmkend _2005} 17.1.3. Sections of a Problem Description \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { The structure of a problem description file is very similar to that of a server configuration file. The lines starting with a }{\b\f2 '#'}{ are considered comments. Keywords are prefixed by a }{\b\f2 '@'}{ and mark the beginning of sub-sections. In what follows, we describe each section separately as well as each keyword and sub-sections within each section. Keep in mind to look at one existing problem descriptio n file as a template when reading this section. \par }\pard\plain \s4\ql \li960\ri0\sb240\sl374\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel3\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs28\lang1024\langfe1024\noproof {\*\bkmkstart ID_STUFF1} {\*\bkmkend ID_STUFF1}17.1.3.1. Problem ID and General Information \par }\pard\plain \ql \li960\ri0\sb144\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {The following keywords are required and must occur in the order in which they are presented. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{\f2\fs21 '@PROBLEM '}{ specifies the name of a problem as it will be visible to the NetSolve users (clients). \par }{\fs19 \bullet \tab }{\f2\fs21 '@INCLUDE '}{ specifies a C header file to include (See the example in }{\field{\*\fldinst { HYPERLINK \\l ID_SIMPLEEXAMPLE}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000012000000490044005f00530049004d0050004c0045004500580041004d0050004c00450023000000}}}{\fldrslt {Section 17.1.5}}}{). There can be several such lines as a problem can call several functions. \par }{\fs19 \bullet \tab }{\f2\fs21 '@DASHI '}{ specifies a default directory in which header files are to be looked for, in a similar way as the }{\b\f2 -I}{ option of most C compilers. There can be several such lines as a problem can call several functions. \par }{\fs19 \bullet \tab }{\f2\fs21 '@LIB '}{ specifies a library or an object file to link to, or a }{\b\f2 -L}{ option for the linker (See the example in }{\field{\*\fldinst { HYPERLINK \\l ID_SIMPLEEXAMPLE}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000012000000490044005f00530049004d0050004c0045004500580041004d0050004c00450023000000}}}{\fldrslt {Section 17.1.5}}}{). If multiple libraries are required, a separate }{\f2\fs21 @LIB}{ line must be specified for each library, and the libraries will be linked in the order in which they are specified. The }{\f2\fs21 @LIB}{ line(s) can contain variable name substitutions such as }{\f2\fs21 $(NETSOLVE_ROOT)}{. \par }{\fs19 \bullet \tab }{\f2\fs21 '@FUNCTION '}{ specifies the name of a function from the underlying numerical software library that is being called to solve the problem. There can be several such lines as a problem can call several functions. \par }{\fs19 \bullet \tab }{\f2\fs21 '@LANGUAGE [C|FORTRAN]'}{ specifies whether the underlying numerical library is written in C or in Fortran. This is used in conjunction with the function names specified with }{\f2\fs21 '@FUNCTION'}{ to handle multi-language interoperability. \par }{\fs19 \bullet \tab }{\f2\fs21 '@MAJOR [COL|ROW]'}{ specifies what major should be used to store the input matrices before calling the underlying numerical software. For instance, if the numerical library is LAPACK [lapack], the major must be }{\f2\fs21 'COL'}{. \par }{\fs19 \bullet \tab }{\f2\fs21 '@PATH '}{ specifies a path-like name for the problems. This path is only a naming convention and is used for presentation purposes. \par }{\fs19 \bullet \tab }{\f2\fs21 '@DESCRIPTION'}{ marks the beginning of the textual description of the problem. This sub-section is mandatory as it is used by the NetSolve management tools to provide information to the NetSolve user s (clients) about a specific problem. \par }\pard\plain \s4\ql \li960\ri0\sb240\sl374\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel3\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs28\lang1024\langfe1024\noproof {\*\bkmkstart ID_INPUTSPEC} {\*\bkmkend ID_INPUTSPEC}17.1.3.2. Input Specification \par }\pard\plain \ql \li960\ri0\sb144\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{\f2\fs21 '@INPUT '}{ specifies the number of objects in input to the problem. This line is followed by that corresponding } {\f2\fs21 }{ of object descriptions (see below). \par }{\fs19 \bullet \tab }{\f2\fs21 '@OBJECT '}{ specifies an object type, data type, and name. The name is only used for presentation purposes. This line is followed by a mandatory textual description of the object. The data types are abbreviated by replacing }{\f2\fs21 NETSOLVE_I}{ by }{\f2\fs21 I}{ , }{\f2\fs21 NETSOLVE_CHAR}{ by }{\f2\fs21 CHAR}{, }{\f2\fs21 NETSOLVE_BYTE}{ by }{\f2\fs21 B}{, }{\f2\fs21 NETSOLVE_FLOAT}{ by }{\f2\fs21 S}{, }{\f2\fs21 NETSOLVE_DOUBLE}{ by }{\f2\fs21 D}{, }{\f2\fs21 NETSOLVE_SCOMPLEX}{ by }{\f2\fs21 C}{, and }{ \f2\fs21 NETSOLVE_DCOMPLEX}{ by }{\f2\fs21 Z}{, (see }{\field{\*\fldinst { HYPERLINK \\l ID_TABLE1}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f005400410042004c004500310023000000}}}{\fldrslt {Table 17-1}}}{ ). Similarly, the object types are abbreviated by replacing }{\f2\fs21 NETSOLVE_SCALAR}{ by }{\f2\fs21 SCALAR}{, }{\f2\fs21 NETSOLVE_VECTOR}{ by }{\f2\fs21 VECTOR}{, }{\f2\fs21 NETSOLVE_MATRIX}{ by }{\f2\fs21 MATRIX}{, }{\f2\fs21 NETSOLVE_SPARSEMATRIX}{ by }{\f2\fs21 SPARSEMATRIX}{, }{\f2\fs21 NETSOLVE_FILE}{ by }{\f2\fs21 FILE}{, }{\f2\fs21 NETSOLVE_PACKEDFILES}{ by }{\f2\fs21 PACKEDFILES}{, }{\f2\fs21 NETSOLVE_UPF}{ by }{\f2\fs21 UPF}{, }{\f2\fs21 NETSOLVE_STRING}{ by }{\f2\fs21 STRING}{, and }{ \f2\fs21 NETSOLVE_STRINGLIST}{ by }{\f2\fs21 STRINGLIST}{, (see }{\field{\*\fldinst { HYPERLINK \\l ID_TABLE1A}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000c000000490044005f005400410042004c0045003100410023000000}}}{\fldrslt { Table 17-2}}}{). The objects of object type FILE, STRING, UPF, and PACKEDFILES do not have a data type. Here are a few examples: \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\faauto\rin0\lin1200\itap0 {\f2\fs21 @OBJECT VECTOR I X \par }\pard \ql \li1200\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin1200\itap0 {\f2\fs21 An integer vector named 'X' \par \par @OBJECT MATRIX D A \par A double precision real matrix named 'A' \par \par @OBJECT FILE foo \par }\pard \ql \li1200\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 A file named 'foo' \par }\pard\plain \s4\ql \li960\ri0\sb240\sl374\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel3\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs28\lang1024\langfe1024\noproof {\*\bkmkstart _2101}{\*\bkmkend _2101} 17.1.3.3. Output Specification \par }\pard\plain \ql \fi-240\li1200\ri0\sb144\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs19 \bullet \tab }{\f2\fs21 '@OUTPUT '}{ specifies the number of objects in output from the problem. This line is followed by that corresponding }{\f2\fs21 }{ of object descriptions (see below). \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{\f2\fs21 '@OBJECT '}{ specifies an object type, a data type and a name. This line is followed by a mandatory textual description of the object. The abbreviations for data types and object types are as defined previously in }{\field{\*\fldinst { HYPERLINK \\l ID_INPUTSPEC}{ {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f0049004e00500055005400530050004500430023000000}}}{\fldrslt {Section 17.1.3.2}}}{. \par }\pard\plain \s4\ql \li960\ri0\sb240\sl374\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel3\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs28\lang1024\langfe1024\noproof {\*\bkmkstart _2113}{\*\bkmkend _2113} 17.1.3.4. Additional Information \par }\pard\plain \ql \li960\ri0\sb144\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {The following list of tags are optional. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{\f2\fs21 '@MATLAB_MERGE ,'}{ specifies that the output objects number }{\f2\fs21 }{ and }{\f2\fs21 }{ can be merged as a complex object upon receipt of the numerical results from the Matlab client interface (see }{\field{\*\fldinst { HYPERLINK \\l ID_MATLAB}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000b000000490044005f004d00410054004c004100420023000000}}}{\fldrslt {Chapter 6}}}{). \par }{\fs19 \bullet \tab }{\f2\fs21 '@COMPLEXITY ,'}{ specifies that given the size of the problem, say }{\b\f2 n}{, the asymptotic complexity, say }{\b\f2 C}{, of the problem in number of floating point operations is \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 C = number1 * n^(number2) \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{\f2\fs21 '@CUSTOMIZED '}{ is an internal customization used by the c ode developers. It means that the NetSolve server code will do something different (or custom) before invoking a routine. For example, this option is used for the enablement of ScaLAPACK and the sparse solvers. The functionality of this keyword will be ex panded in the future. Novice users are advised to avoid using this keyword. \par }{\fs19 \bullet \tab }{\f2\fs21 '@PARALLEL MPI'}{ specifies that the software enabled in the problem description file is parallel and uses MPI. Thus, MPI must be installed on the server to which you are enabling this service. \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart ID_SECCALLINGSEQUENCE} {\*\bkmkend ID_SECCALLINGSEQUENCE}17.1.4. Calling Sequence \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {The calling sequence to the problem must be defined so that the NetSolve client using the C or Fortran interfaces can call the problem. The material described in this section is ignored by NetSolve when the client is Matlab, Mathematica or Java. To clarify, let us take an example. Let us say that the problem }{\i 'toto'}{ takes a matrix in input and returns a matrix in output. The call from the Matlab interface looks like: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 >> [b] = netsolve('toto',a) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {for instance. However, there can be several possible calling sequences from C or Fortran. Assuming the following declarations in Fortran: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 DOUBLE PRECISION A(M,N) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 DOUBLE PRECISION B(K,L) \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {the following calling sequences are all possible: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 CALL FNETSL('toto()',A,B,M,N,K,L) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 CALL FNETSL('toto()',A,M,N,B,K,L) \par CALL FNETSL('toto()',M,N,A,K,L,B) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 etc..... \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { The Calling Sequence sub-section in the problem description specifies the order of the arguments (represented with mnemonics) in the C and Fortran interface calling sequence. Indeed, still with the same example, the integer }{\b\f2 N}{ can be re presented by the mnemonic }{\f2\fs21 nI0}{, and the pointer }{\b\f2 B}{ can be represented by the mnemonic }{\f2\fs21 O0}{. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {It is very important to note that the number of rows or columns or the leading dimension of input and output arguments must be specified in the }{\f2\fs21 @CALLINGSEQUENCE}{ sub-section. If a dimension is not passed as an input argument, or equivalenced with an existing input argument (via }{\f2\fs21 @ARG}{), it must be set/computed using }{\f2\fs21 @COMP}{. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{\f2\fs21 '@CALLINGSEQUENCE'}{ marks the beginning of a calling sequence description. This description consists of a list of argument specifications (see below). \par }{\fs19 \bullet \tab }{\f2\fs21 '@ARG '}{ specifies an argument of the calling sequence. For instance the line \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 @ARG I0 \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {specifies that the current argument in the calling sequence is the pointer to the data of the first object in input. The line \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 @ARG mI0,lI0 \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {specifies that the current argument in the calling sequence is the number of rows }{\i and}{ the leading dimensio n of the first object in input (which in this case is a matrix). The line \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 @ARG ? \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {specifies that the current argument in the calling sequence should be ignored by NetSolve (useful in some cases). Note that no argument description contains mnemoni cs of the form }{\f2\fs21 [m|n]O*}{. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{\f2\fs21 '@CONST ='}{ specifies that the number of rows or columns or the leading dimension of an input object is constant and can not be found in the calling sequence. For instance, the line \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 @CONST mI4=12 \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {means that the number of rows of the fifth object in input is always 12 and is not passed in by the NetSolve user. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{\f2\fs21 '@COMP ='}{ specifies that the number of rows or columns or the leading dimension of an input object has not been supplied as an argument in the calling sequence, but can be computed using arguments in the calling sequence. \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {Here are some examples: \par }\pard \ql \li1200\ri0\sb120\sl281\slmult0\widctlpar\faauto\rin0\lin1200\itap0 {\f2\fs21 @COMP mI1=mI0 \par }\pard \ql \li1200\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin1200\itap0 {\f2\fs21 @COMP mI0=op(+,mI3,1) // performs an addition \par @COMP mI3=array(I2,0) // performs an indirection \par @COMP mI1=op(-,array(I0,op(-,mI0,1)),1) \par @COMP mI2=op(+,op(+,array(I1,0),1),op(*,array(I0,0),2)) \par @COMP mI2=if(array(I0,0)='N',mI1,if(array(I0,0)='T',nI1,op(-,0,1))) \par }\pard \ql \li1200\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {\f2\fs21 // conditionals \par }\pard \ql \li1200\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1200\itap0 {where the }{\f2\fs21 op}{ notation is used to perform addition and subtraction, and the }{\f2\fs21 array}{ notation is used to access the value of a specific element of an array. For example, }{\f2\fs21 mI3}{ is equal to the value of the zero-th element of the array }{\f2\fs21 I2}{. \par This feature of NetSolve is rarely u sed, and is only necessary in routines when the user's array storage differs from the array storage passed to the computational routine. A good example of such an occurrence is in the interfaces to the LAPACK routines for band and tridiagonal matrices. \par }\pard\plain \s4\ql \li960\ri0\sb240\sl374\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel3\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs28\lang1024\langfe1024\noproof {\*\bkmkstart _2176}{\*\bkmkend _2176} 17.1.4.1. Pseudo-Code \par }\pard\plain \ql \fi-240\li1200\ri0\sb144\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs19 \bullet \tab }{\f2\fs21 '@CODE'}{ marks the beginning of the pseudo-code section. \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{\f2\fs21 '@END_CODE'}{ marks the end of the pseudo-code section. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The pseudo-code is C code that uses the mnemonics described in }{\field{\*\fldinst { HYPERLINK \\l ID_MNEMONICS}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e000000490044005f004d004e0045004d004f004e0049004300530023000000}}}{\fldrslt {Section 17.1.2}}}{ . This code contains call(s) to the numerical library function(s) that the problem is supposed to use as part of its algorithm. The arguments in the calling sequences of these library routines will be primarily the different mnemonics. In the pseudo-co de, the mnemonics are pre- and ap-pended by a }{\b\f2 '@'}{ to facilitate the parsing. Let us review again the meaning of some possible mnemonics in the pseudo-code: \par }\pard \ql \fi-240\li1200\ri0\sb120\sl312\slmult0\widctlpar\tx1200\hyphpar0\faauto\rin0\lin1200\itap0 {\fs19 \bullet \tab }{\f2\fs21 '@I0@'}{: pointer to the elements of the first object in input. \par }{\fs19 \bullet \tab }{\f2\fs21 '@mI0@'}{: }{\i pointer}{ to an integer that is number of rows of the first object in input. \par }{\fs19 \bullet \tab }{\f2\fs21 '@nO1@'}{: }{\i pointer}{ to an integer that is number of columns of the second object in output. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Usually, the pseudo-code is organized in three parts. First, the }{\i preparation}{ of the input (if nec essary). Second, the call to the numerical library function(s). Third, the update of the output (pointer and sizes). At this point, it is best to give an example. Let us assume that we have access to a hypothetical numerical C library that possesses a fun ction }{\f2\fs21 matvec()}{ that performs a matrix-vector multiply for square matrices. The prototype of the function is \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 void matvec(float *a, float *b, int n, int l); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {where }{\b\f2 a}{ is a pointer to the matrix, }{\b\f2 b}{ is a pointer to the vector, }{\b\f2 n}{ is the dimension of the matrix, }{\b\f2 l}{ is the leading dimension of the matrix and the result is stored in }{\b\f2 b}{ (overwriting the input). We may define the problem such that the matrix is the first object in the input, the vector the second object in the input, and the result the only object in out put. Possible preparations could be for instance the creation of workspace, test of input values to detect mistakes, test of matching dimensions. In this case, we may want to check that the dimension of vector }{\b\f2 b}{ agrees with the number of columns of matrix }{\b\f2 a}{. This can be done as follows: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 @CODE \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 if (*@mI1@ != *@nI0@) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 return NS_PROT_DIM_MISMATCH; \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The macro }{\f2\fs21 NS_PROT_DIM_MISMATCH}{ is defined by NetSolve. Other macros available are }{\f2\fs21 NS_PROT_BAD_VALUES}{ (for invalid input parameters), }{ \f2\fs21 NS_PROT_INTERNAL_FAILURE}{ (for a malfunction of the numerical software) or }{\f2\fs21 NS_PROT_NO_SOLUTION}{ (sometimes useful if no numerical solution has been found and the client is interactive). Notice the use of }{\b\f2 '*'}{ for accessing the integers at addresses }{\f2\fs21 @mI1@}{ and }{\f2\fs21 @nI0@}{. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The second part of the pseudo-code consists of calling the function }{\f2\fs21 matvec}{ and is: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 matvec(@I0@,@I1@,*@mI0@,*@mI0@); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {A few things can be said on this call. First, we use the }{\b\f2 '*'}{ to access integers via the pointers. Note that if }{\f2\fs21 matvec()}{ were a Fortran subroutine, we would pass the addresses themselves (see Example below). Second, the leading dimension is taken to be equal to the dimension. This code is executed at the server level where the matrix (or sub-matrix) has been received from the client over the network. As such, it has been stored contiguously in memory and has a leading dimension equal to its number of rows. As a general rule, the mnemonics }{\f2\fs21 @l[I|O]*@}{ never appear in the pseudo-code. The last thing to do at this point is to update the output: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 @O0@ = @I1@; \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 *@mO0@ = *@mI1@; \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 @END_CODE \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { The first line expresses the fact that the input has been overwritten by the output. The second line sets the number of rows of the output. The following section gives a complete example, with all of the sections of the problem description. \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart ID_SIMPLEEXAMPLE} {\*\bkmkend ID_SIMPLEEXAMPLE}17.1.5. A Simple Example \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Let us imagine that we have access to a Fortran numerical library that contains a function, say }{ \f2\fs21 LINSOL}{, to solve a linear system according to the following prototype: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 SUBROUTINE LINSOL( A, B, N, NRHS, LDA, LDB ) \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 \par DOUBLE PRECISION A( LDA, * ) // Left-hand side (NxN) \par DOUBLE PRECISION B( LDB, * ) // Right-hand side (NxNRHS), \par // overwritten with the solution \par INTEGER N \par INTEGER NRHS \par INTEGER LDA // Leading Dimension of A \par INTEGER LDB // Leading Dimension of B \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Then, an appropriate description for a problem that solves a linear system using }{\f2\fs21 LINSOL}{ and that expects from the client the same calling sequence as t he one for }{\f2\fs21 LINSOL}{ is: \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 @PROBLEM linsol \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 @INCLUDE \par @INCLUDE "/home/me/my_header.h" \par @LIB -L/home/lib/ \par @LIB -lstuff \par @LIB /home/me/lib_$(NETSOLVE_ARCH).a \par @LIB /home/stuff/add.o \par @FUNCTION linsol \par @LANGUAGE FORTRAN \par @MAJOR COL \par @PATH LinearAlgebra/LinearSystems/ \par @DESCRIPTION \par Solves the square linear system A*X = B. Where: \par A is a double-precision matrix of dimension NxN \par B is a double-precision matrix of dimension NxNRHS \par X is the solution \par @INPUT 2 \par @OBJECT MATRIX D A \par Matrix A (NxN) \par @OBJECT MATRIX D B \par Matrix B (NxNRHS) \par @OUTPUT 1 \par @OBJECT MATRIX D X \par Solution X (NxNRHS) \par @COMPLEXITY 3,3 \par @CALLINGSEQUENCE \par @ARG I0 \par @ARG I1,O0 \par @ARG nI0,mI0,mI1 \par @ARG nI1 \par @ARG lI0 \par @ARG lI1,lO0 \par @CODE \par \par linsol(@I0@,@I1@,@mI0@,@nI1@,@lI0@,@lI1@); \par \par @O0@ =@I1@; /* Pointing to the overwritten input */ \par *@mO0@ = *@mI1@; /* Setting the number of rows */ \par *@nO0@ = *@nI1@; /* Setting the number of columns */ \par \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 @END_CODE \par }\pard\plain \s3\ql \li0\ri0\sb259\sl449\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel2\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs34\lang1024\langfe1024\noproof {\*\bkmkstart ID_PDGUI}{\*\bkmkend ID_PDGUI} 17.1.6. PDF Generator \par }\pard\plain \ql \li960\ri0\sb173\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { The process of creating new problem descriptions can be difficult, especially for a first time user. It is true that after writing a few files, it becomes rather routine and several NetSolve users have already generated a good number of working PDFs for a variety of purposes (including linear algebra, optimization, image processing, etc.). However, we have designed a graphical Java GUI application that helps users in creating PDFs. To compile this GUI, type \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> make pdgui \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {from the }{\f2\fs21 $NETSOLVE_ROOT}{ directory. This creates a set of Java classfiles needed to run the GUI application and places them in the }{\f2\fs21 $NETSOLVE_ROOT/bin/$NETSOLVE_ARCH}{ directory. After this compilation, you can also find a shell script named }{\b NS_pdgui}{ that can be used from any directory to properly run the GUI application which needs to locate the abovementioned classfiles. This GUI can be used to create and load PDFs into NetSolve. Apart from being easy to use, the GUI also has a help menu (not imple m ented yet) and we defer other details about running the GUI to those help files. The user has the option of storing PDFs in nspdf format or both nspdf format and xmlpdf format. The user can only load a PDF if it has been stored in xmlpdf format. As the us er has the option of storing in xmlpdf format, there is no need to keep the GUI open until he gets the pdf correct. He must make sure that he has stored the created pdf in xmlpdf format before closing the GUI. \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 18. Security in NetSolve}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 18. Security in NetSolve}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_ADDITIONS} {\*\bkmkend ID_ADDITIONS}Chapter 18. Security in NetSolve \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _2244}{\*\bkmkend _2244} 18.1. Introduction \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {This version of NetSolve has (rudimentary) Kerberos support. NetSolve components include clients, age nts, and servers. Currently the only requests that require authentication are requests that the client makes to the server, and of those, only the ``run problem'' request. Other requests could be authenticated (an obvious one being ``kill server''), but d r astic changes along these lines would probably require drastic restructuring of NetSolve. For instance, a client can currently inform an agent that a particular server is down, and the agent will not advertise that server for use in other problems. It see ms of dubious value to require authentication for such requests until there is a mechanism for specifying the trust relationship between clients and agents. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {An attempt has been made to allow Kerberized NetSolve clients to interoperate with both Kerberized a nd non-Kerberized NetSolve servers. In either case the client sends a request to the server.An ordinary server will return a status code indicating that he will accept the requested operation. By contrast, a Kerberized server will immediately return an `` a uthentication required'' error in response to the request. The client is then required to send Kerberos credentials to the server before the request will be processed. This allows the server to require authentication of the client. Currently there is no m echanism to allow the client to insist on authentication of the server - a Kerberized client will happily talk with either Kerberized or non-Kerberized servers. \par The server implements access control via a simple list of Kerberos principal names. This list is kept in a text file which is consulted by the server. A request to a NetSolve server must be made on behalf of one of those principal names. If the principal name associated with the Kerberos credentials in the request appears in the list, and the creden tials are otherwise valid, the request will be honored. Otherwise, the request will be denied. \par Since the NetSolve server was not designed to run as a set-uid program, it is not currently feasible to have the NetSolve server run processes using the user-id o f the particular UNIX user who submitted the request. NetSolve thus uses its own service principal name of ``netsolve'' rather than using the ``host'' principal. What this means (among other things) is that you need to generate service principals and keyt abs for each of your NetSolve servers, even if you already have host principals in place. \par The NetSolve server, by default, runs in non-Kerberized mode. To start up the server in Kerberized mode you need to add the }{\b\f2 -k}{ option to the command-line, and also set environment variables NETSOLVE_KEYTAB (pointing to the keytab) and NETSOLVE_USERS pointing to the list of authorized users). \par This version of Kerberized NetSolve performs no encryption of the data exchanged among NetSolve clients, servers, or agents. Nor is there any integrity protection for the data stream. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _2255}{\*\bkmkend _2255} 18.2. Compiling a Kerberized Server \par }\pard\plain \ql \fi-432\li1392\ri0\sb207\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof \tab }{\lang1024\langfe1024\noproof 1. \tab Compile Kerberos. See the Kerberos V5 Installation Guide for instructions for how to do this. \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\lang1024\langfe1024\noproof \tab 2.\tab Compile the NetSolve server with Kerberos support (}{\b\lang1024\langfe1024\noproof ./configure --with-kerberos}{\lang1024\langfe1024\noproof ). \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _2263}{\*\bkmkend _2263} 18.3. Installing a Kerberized Server \par }\pard\plain \ql \fi-432\li1392\ri0\sb207\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof \tab }{\lang1024\langfe1024\noproof 1. \tab Install Kerberos on the server machine. See Kerberos V5 Installation Guide for instructions for how to do this. You do not have to install all of the Kerberos clients just to run a NetSolve server, but you do need }{ \b\lang1024\langfe1024\noproof kadmin}{\lang1024\langfe1024\noproof and components that deal with Kerberos tickets like }{\b\lang1024\langfe1024\noproof kinit}{\lang1024\langfe1024\noproof and }{\b\lang1024\langfe1024\noproof kdestroy}{ \lang1024\langfe1024\noproof . \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\lang1024\langfe1024\noproof \tab 2.\tab Define a Kerberos service principal for the NetSolve server. To define the principal for machine } {\i\lang1024\langfe1024\noproof foo.bar.com}{\lang1024\langfe1024\noproof : \par }\pard \ql \fi-432\li1824\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1764\tx1824\hyphpar0\faauto\rin0\lin1824\itap0 {\lang1024\langfe1024\noproof \tab a.\tab Get the name and the password of a Kerberos principal that is authorized to run }{ \b\lang1024\langfe1024\noproof kadmin}{\lang1024\langfe1024\noproof and create principals. \par \tab b.\tab Log on to the machine where you want to install the Kerberized NetSolve server. Make sure you have a secure connection to the client machine (perhaps you're typing on the machine's keyboard, or perhaps you're using ssh to log in to that machine), so that your password will not be exposed on the net. \par \tab c.\tab Do a }{\b\lang1024\langfe1024\noproof kinit}{\lang1024\langfe1024\noproof to acquire a ticket that identifies you as someone who can create principals. \par \tab d.\tab Create a service principal for the NetSolve server on your host. If your host is named }{\i\lang1024\langfe1024\noproof foo.bar.com}{\lang1024\langfe1024\noproof , the service principal should be named }{\b\f2\lang1024\langfe1024\noproof netsolve/foo.bar.com}{\lang1024\langfe1024\noproof : \par }\pard \ql \li1824\ri0\sb120\sl281\slmult0\widctlpar\faauto\rin0\lin1824\itap0 {\f2\fs21\lang1024\langfe1024\noproof UNIX> kadmin \par }\pard \ql \li1824\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1824\itap0 {\f2\fs21\lang1024\langfe1024\noproof \par }\pard \ql \li1824\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1824\itap0 {\lang1024\langfe1024\noproof (if you don't have a Kerberos ticket yet, }{\b\lang1024\langfe1024\noproof kadmin}{\lang1024\langfe1024\noproof will try to get one for you based on your UNIX username. If there is a Kerberos principal for that username, and that principal has the ability to create new principals, just type in your password when asked to do so. Otherwise run }{ \b\lang1024\langfe1024\noproof kinit}{\lang1024\langfe1024\noproof to get a ticket for some other principal - one that has the ability to create new principals - and then run }{\b\lang1024\langfe1024\noproof kadmin}{\lang1024\langfe1024\noproof again.) \par }\pard \ql \li1824\ri0\sb120\sl281\slmult0\widctlpar\faauto\rin0\lin1824\itap0 {\f2\fs21\lang1024\langfe1024\noproof UNIX> kadmin: addprincipal -randkey netsolve/foo.bar.com \par }\pard \ql \li1824\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin1824\itap0 {\f2\fs21\lang1024\langfe1024\noproof UNIX> kadmin: ktadd -k /etc/netsolve.keytab netsolve/foo.bar.com \par }\pard \ql \li1824\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1824\itap0 {\f2\fs21\lang1024\langfe1024\noproof \par }\pard \ql \li1824\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1824\itap0 {\lang1024\langfe1024\noproof This will extract the key into the file }{\f2\fs21\lang1024\langfe1024\noproof /etc/netsolve.keytab}{\lang1024\langfe1024\noproof . You can put this keytab any place you want it but it must be on a local filesystem. If you put the file on a NFS-mounted filesystem then (a) you will compromise the security of your server by exposing the key to eav esdroppers, and (b) there's a good chance that NFS file locking bugs will cause your NetSolve server to get wedged. \par }\pard \ql \fi-432\li1824\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1764\tx1824\hyphpar0\faauto\rin0\lin1824\itap0 {\lang1024\langfe1024\noproof \tab e.\tab While you're at it, you might want to define other service principals for the same host. For instance, a service principal of the form }{\i\lang1024\langfe1024\noproof host/foo.bar.com}{\lang1024\langfe1024\noproof is needed if you want to allow Kerberized logins to that host. This is straightforward: \par }\pard \ql \li1824\ri0\sb120\sl281\slmult0\widctlpar\faauto\rin0\lin1824\itap0 {\f2\fs21\lang1024\langfe1024\noproof UNIX> kadmin: addprincipal -randkey host/foo.bar.com \par }\pard \ql \li1824\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin1824\itap0 {\f2\fs21\lang1024\langfe1024\noproof UNIX> kadmin: ktadd host/foo.bar.com \par }\pard \ql \li1824\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1824\itap0 {\f2\fs21\lang1024\langfe1024\noproof \par }\pard \ql \li1824\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1824\itap0 {\lang1024\langfe1024\noproof \par }\pard \ql \fi-432\li1824\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1764\tx1824\hyphpar0\faauto\rin0\lin1824\itap0 {\lang1024\langfe1024\noproof \tab f.\tab Make sure that }{\f2\fs21\lang1024\langfe1024\noproof /etc/netsolve.keytab}{ \lang1024\langfe1024\noproof is readable only by the UNIX user-id that will run the NetSolve server. (Permissions should be }{\i\lang1024\langfe1024\noproof 0600, -rw-------}{\lang1024\langfe1024\noproof ). The owner should not be root. \par }\pard \ql \li1392\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1392\itap0 {\lang1024\langfe1024\noproof \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _2301}{\*\bkmkend _2301} 18.4. Running a Kerberized Server \par }\pard\plain \ql \fi-432\li1392\ri0\sb207\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof \tab }{\lang1024\langfe1024\noproof 1. \tab You must have a NetSolve agent running somewhere first. \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\lang1024\langfe1024\noproof \tab 2.\tab You must be logged into UNIX as the owner of the }{\f2\fs21\lang1024\langfe1024\noproof /etc/netsolve.keytab}{\lang1024\langfe1024\noproof file, since the server needs to be able to read this file. \par \tab 3.\tab Set up the environment variables: \par }\pard \ql \li1392\ri0\sb120\sl281\slmult0\widctlpar\faauto\rin0\lin1392\itap0 {\f2\fs21\lang1024\langfe1024\noproof UNIX> setenv NETSOLVE_AGENT netsolve.agent.host \par }\pard \ql \li1392\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin1392\itap0 {\f2\fs21\lang1024\langfe1024\noproof UNIX> setenv NETSOLVE_KEYTAB /etc/netsolve.keytab \par UNIX> setenv NETSOLVE_USERS /etc/netsolve.users \par }\pard \ql \li1392\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1392\itap0 {\f2\fs21\lang1024\langfe1024\noproof \par }\pard \ql \li1392\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1392\itap0 {\lang1024\langfe1024\noproof The NETSOLVE_USERS file is a text file that contains a list of Kerberos principal names, one per line, who are authorized to use the server. It is reopened each time a user tries to authenticate to the server, so you can add users while the server is running. \par }\pard \ql \fi-432\li1392\ri0\sb120\sl312\slmult0\widctlpar\tqr\tx1332\tx1392\hyphpar0\faauto\rin0\lin1392\itap0 {\lang1024\langfe1024\noproof \tab 4.\tab Start the server \par }\pard \ql \li1392\ri0\sb120\sl281\slmult0\widctlpar\faauto\rin0\lin1392\itap0 {\f2\fs21\lang1024\langfe1024\noproof UNIX> /path/to/netsolve/server -k & \par }\pard \ql \li1392\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1392\itap0 {\f2\fs21\lang1024\langfe1024\noproof \par }\pard \ql \li1392\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1392\itap0 {\lang1024\langfe1024\noproof If you do not use the }{\b\f2\lang1024\langfe1024\noproof -k}{\lang1024\langfe1024\noproof flag, the server will not require authentication. \par \sect }\sectd \linex0\headery0\footery0\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}\pard\plain \ql \li0\ri0\sl20\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof {\*\bkmkstart _2317}{\*\bkmkend _2317} \par }\pard \qc \li0\ri0\sb448\sl776\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\b\f1\fs59\lang1024\langfe1024\noproof IV. Miscellaneous Features \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 19. Using the Network Weather Service}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 19. Using the Network Weather Service}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_NWS}{\*\bkmkend ID_NWS} Chapter 19. Using the Network Weather Service \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _2322}{\*\bkmkend _2322} 19.1. Introduction \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { In NetSolve, as in other metacomputing systems, the scheduling of tasks to available resources is difficult. NetSolve uses a limited load-balancing strategy to improve the utilization of computational resources. This load-balancing strategy takes into acc o unt the current workload of the computational resources available in the NetSolve system. In scheduling the client's requests over a network, the workload estimate should be ``forecast'' for when the computation will execute, and not a workload estimate o b tained at a time prior to the request. There are also other characteristics of distributed metacomputing resources such as the CPU speed of the resource, the amount of physical memory of the resource, as well as the latency/bandwidth from the client to th e computational resource, that can be effectively utilized in scheduling decisions for the computational resources. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The Network Weather Service (NWS) is a system which provides a way of forecasting dynamically changing performance characteristics, such as t he workload, from distributed metacomputing resources. Integrating NWS into NetSolve improves the load-balancing strategy by taking into account the future load instead of the current load of the computational resources. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _2326}{\*\bkmkend _2326} 19.2. To Use NWS: \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {To use NWS within NetSolve, one must enable the NWS feature by typing \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> ./configure --with-nws=NWS_DIR \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {during the configure phase of NetSolve, where }{\f2\fs21 NWS_DIR}{ denotes the location of the NWS directory. NWS is downloadable from the }{\i NWS web page}{ (http://n ws.cs.utk.edu/) \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _2333}{\*\bkmkend _2333} 19.3. NWS Components utilized in NetSolve \par }\pard\plain \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2\fs21 Nameserver \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab This process implements a DNS-like directory capability used to bind process and data names with low-level contact information. It knows which hosts are running in the NWS sys tem, and provides a database (name, location, function) for the NWS processes. To ensure that all hosts are known and well-referenced, there must be only one nameserver per NWS system. The address of the nameserver process is the only well-known address u s ed by the system, allowing both data and service to be distributed. All NWS processes must register their name, their location and their function with the nameserver as soon as they are started. One role of the nameserver is to know at any time where is t he memory corresponding to a sensor. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Sensor \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab The sensor is a monitoring process running on each resource. It periodically measures the workload of the resource and sends this information to the memory process described below. Moreover, it empirically measu res the network ``weather'' between a collection of specified hosts. A sensor executes infinitely to provide recent measurements at any time. The earlier the process is started, the more numerous are the measurements and thus the more accurate are the for ecasts. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Memory \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab The memory process stores measurements sent by sensors and retrieves measurements for the forecaster. As these measurements represent a key in NWS, they are immediately written to the memory and stored with a time stamp and a value name cor responding to the host/experiment to which they correspond. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 Forecaster \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab The forecaster generates predictions by requesting the relevant measurement history from the memory process. As the measurements are continually updated by a sensor, the most recent data will be available to the forecaster when it makes its request. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 { A nameserver must be started first in an NWS system, as all other NWS processes depend upon it. After starting the nameserver, memories can then register themselves, and sensor or forecaster processes can be initialized on any host. \par The default port numbers reserved for the NWS processes (nameserver, memory, forecaster, and sensor) are specified in the file }{\f2\fs21 $NETSOLVE_ROOT/include/nwsutils.h}{. \par The integration of NWS into NetSolve requires the startup of NWS processes, their management and the accurate use of the forecaster. The NWS processes (nameserver, memory, forecaster, and sensor) can be started in various places within NetSolve. We now pr esent our design for the integration and motivate our choices. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _2361}{\*\bkmkend _2361} 19.4. NetSolve agent and the NWS nameserver, memory and forecast \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { As previously stated, only one NWS nameserver can exist in an NWS system, and this process must be placed in NetSolve w here it will have full knowledge of the computational resources and be visible to all components of the NetSolve system. The Netsolve agent is the ``brain'' of the NetSolve system, knowing how many resources exist and where they are located, and making al l decisions on the execution of requests in the system. Moreover, the NetSolve agent is known by all components of the NetSolve system. Thus, the logical choice for the placement of the NWS nameserver is on the NetSolve agent. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {The first started agent in Net Solve is called the master. During its initialization, a nameserver and a memory are started. In fact the memory is started for the sake of simplicity. Indeed, the master agent is known by the whole system. It enables each sensor to register and easily st o re its measurements. Furthermore this scheme avoids unnecessary communication costs. A forecaster process is then started by each agent. It generates information as soon as needed by the agent. Thus, each agent possesses its own forecaster and can deal wi th client requests. We shall now examine what happens on computational resources. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _2365}{\*\bkmkend _2365} 19.5. NetSolve server and the NWS sensor \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { As soon as a NetSolve server (computational resource) is added to the NetSolve system, it is necessary to start an NWS senso r. This sensor is started on the server after its registration with the agent to avoid any incoherency with the NetSolve system. The NWS sensor is totally independent from the NetSolve processes running on the server. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {At present, the NWS sensor is only det ecting the CPU speed of the computational resource. Future implementations will expand this functionality to include monitoring for the amount of physical memory available per computational resource, as well as the latency/bandwidth of the communication b etween each server and the client. These improvements will require an additional sensor to be started on the client. \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 20. Distributed Storage Infrastructure (DSI) in NetSolve}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 20. Distributed Storage Infrastructure (DSI) in NetSolve}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_DSI}{\*\bkmkend ID_DSI} Chapter 20. Distributed Storage Infrastructure (DSI) in NetSolve \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _2371}{\*\bkmkend _2371} 20.1. Introduction \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { The Distributed Storage Infrastructure (DSI) in NetSolve1.4 is a new feature added to NetSolve. It is a first attempt toward s achieving coscheduling of the computation and data movement over the NetSolve Grid. The DSI APIs help the user in controlling the placement of data that will be accessed by a NetSolve service. This is useful in situations where a given service accesses a single block of data a number of times. Instead of multiple transmissions of the same data from the client to the server, the DSI feature helps to transfer the data from the client to a storage server just once, and relatively cheap multiple transmission s from the storage server to the computational server. Thus the present DSI feature helps NetSolve to operate in a cache-like setting. Presently, only Internet Backplane Protocol (IBP) is used for providing the storage service. In the future, we hope to in tegrate other commonly available storage service systems. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _2374}{\*\bkmkend _2374} 20.2. To Use DSI: \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {To use DSI, one should enable the DSI feature both at the NetSolve client and the server. Type \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 UNIX> ./configure --with-ibp=IBP_DIR \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {during the initial configure of NetSolve. Here }{\f2\fs21 IBP_DIR}{ denotes the location of the IBP directory. This is specifically the directory of the IBP full distribution downloadable from the IBP web site (http://icl.cs.utk.edu/ibp/) \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _2381}{\*\bkmkend _2381} 20.3. DSI APIs: \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {The DSI APIs are modeled after the UNIX file manipulation commands (open, close etc.) with a few extra parameters that are specific to the concepts of DSI. This section provides the syntax and semantics of the different DSI APIs available to the NetSolve user . \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 DSI_FILE* }{\b\f2\fs21 ns_dsi_open}{\f2\fs21 (char* }{\i\f2\fs21 host_name}{\f2\fs21 , int }{\i\f2\fs21 flag}{\f2\fs21 , int }{\i\f2\fs21 permissions}{ \f2\fs21 , int }{\i\f2\fs21 size}{\f2\fs21 , dsi_type }{\i\f2\fs21 storage_system}{\f2\fs21 ); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 host_name \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Name of the host where the IBP server resides. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 flag \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab This flag has the same meaning as the flag in }{\f2\fs21 open()}{ calls in C. Specifically O_CREAT is used for creating a dsi file and so on. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 permissions \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab While creating the file with O_CREAT flag, the user can specify the permissions for himself and others. The permissions are similar to the ones used in UNIX. Hence i f the user wants to set read, write, execute permissions for himself and read and write permissions for others, he would call }{\f2\fs21 ns_dsi_open}{ with 74 as the value for the permissions. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 size \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Represents the maximum length of the DSI file. Write or read operations over this size limit will return an error. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 storage_system \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab At present, IBP. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 ns_dsi_open()}{ is used for allocating a chunk of storage in the IBP storage. On success, }{\f2\fs21 ns_dsi_open}{ returns a pinter to the DSI file. On failure, returns NULL. Following are the various error values set in case of failure. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof NetSolveUnknownDsiFile \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab If the file does not exist and if the file is opened without O_CREAT. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof NetSolveIBPAllocateError \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab Error while allocating IBP storage. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof NetSolveDsiDisabled \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab If DSI is not enabled in the NetSolve configuration. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof int }{\b\f2\fs21\lang1024\langfe1024\noproof ns_dsi_close}{\f2\fs21\lang1024\langfe1024\noproof (DSI_FILE* }{ \i\f2\fs21\lang1024\langfe1024\noproof dsi_file}{\f2\fs21\lang1024\langfe1024\noproof ); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof dsi_file \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab Pointer to the DSI file. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 ns_dsi_close()}{ is used for closing a DSI file. \par On success returns 1. On failure, returns -1. Following are the various error values set in case of failure. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof NetSolveIBPManageError \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab Error in IBP internals while closing. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof NetSolveDsiDisabled \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab If DSI is not enabled in the NetSolve configuration. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof DSI_OBJECT* }{\b\f2\fs21\lang1024\langfe1024\noproof ns_dsi_write_vector}{\f2\fs21\lang1024\langfe1024\noproof (DSI_FILE* }{ \i\f2\fs21\lang1024\langfe1024\noproof dsi_file}{\f2\fs21\lang1024\langfe1024\noproof , void* }{\i\f2\fs21\lang1024\langfe1024\noproof data}{\f2\fs21\lang1024\langfe1024\noproof , int }{\i\f2\fs21\lang1024\langfe1024\noproof count}{ \f2\fs21\lang1024\langfe1024\noproof , int }{\i\f2\fs21\lang1024\langfe1024\noproof data_type}{\f2\fs21\lang1024\langfe1024\noproof ); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof dsi_file \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab The name of the DSI file where the vector will be written. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof data \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab Vector to write to the DSI storage. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof count \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab Number of elements in the vector. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof data_type \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab One of netsolve data types. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 ns_dsi_write_vector()}{ is used for writing a vector of a particular datatype to a DSI file. \par On success, }{\f2\fs21 ns_dsi_write_vector()}{ returns a pointer to the DSI object created for the vector. On failure, returns NULL. Following are the various error values set in case of failure. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof NetSolveIBPStoreError \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab Error while storing the vector in IBP. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof NetSolveDsiEACCESS \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab Not enough permissions for writing to the DSI file. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof NetSolveDsiDisabled \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab If DSI is not enabled in the NetSolve configuration. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof DSI_OBJECT* }{\b\f2\fs21\lang1024\langfe1024\noproof ns_dsi_write_matrix}{\f2\fs21\lang1024\langfe1024\noproof (DSI_FILE* }{ \i\f2\fs21\lang1024\langfe1024\noproof dsi_file}{\f2\fs21\lang1024\langfe1024\noproof , void* }{\i\f2\fs21\lang1024\langfe1024\noproof data}{\f2\fs21\lang1024\langfe1024\noproof , int }{\i\f2\fs21\lang1024\langfe1024\noproof rows}{ \f2\fs21\lang1024\langfe1024\noproof , int }{\i\f2\fs21\lang1024\langfe1024\noproof cols}{\f2\fs21\lang1024\langfe1024\noproof , int }{\i\f2\fs21\lang1024\langfe1024\noproof data_type}{\f2\fs21\lang1024\langfe1024\noproof ); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Same functionality and return values as }{\f2\fs21 ns_dsi_write_vector()}{ except }{\f2\fs21 ns_dsi_write_matrix()}{ is used to write matrix of }{\f2\fs21 rows}{ rows and }{\f2\fs21 cols}{ columns. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof int }{\b\f2\fs21\lang1024\langfe1024\noproof ns_dsi_read_vector}{\f2\fs21\lang1024\langfe1024\noproof (DSI_OBJECT* }{ \i\f2\fs21\lang1024\langfe1024\noproof dsi_obj}{\f2\fs21\lang1024\langfe1024\noproof , void* }{\i\f2\fs21\lang1024\langfe1024\noproof data}{\f2\fs21\lang1024\langfe1024\noproof , int }{\i\f2\fs21\lang1024\langfe1024\noproof count}{ \f2\fs21\lang1024\langfe1024\noproof , int }{\i\f2\fs21\lang1024\langfe1024\noproof data_type}{\f2\fs21\lang1024\langfe1024\noproof ); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof dsi_obj \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab Pointer to the DSI object that contains the data to read. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof data \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab Actual vector to read. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof count \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab Number of elements of the vector to read. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof data_type \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab One of NetSolve data types. \par }\pard \ql \li960\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {On success, returns the number of elements read. On failure, returns -1. Following are the various error values set in case of failure. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof NetSolveIBPLoadError \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab Error while loading the vector from IBP. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof NetSolveDsiEACCESS \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab Not enough permissions for reading from the DSI file. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof NetSolveDsiDisabled \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof \~\tab If DSI is not enabled in the NetSolve configuration. \par }\pard \ql \li960\ri0\sb240\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21\lang1024\langfe1024\noproof int }{\b\f2\fs21\lang1024\langfe1024\noproof ns_dsi_read_matrix}{\f2\fs21\lang1024\langfe1024\noproof (DSI_OBJECT* }{ \i\f2\fs21\lang1024\langfe1024\noproof dsi_obj}{\f2\fs21\lang1024\langfe1024\noproof , void* }{\i\f2\fs21\lang1024\langfe1024\noproof data}{\f2\fs21\lang1024\langfe1024\noproof , int }{\i\f2\fs21\lang1024\langfe1024\noproof rows}{ \f2\fs21\lang1024\langfe1024\noproof , int }{\i\f2\fs21\lang1024\langfe1024\noproof cols}{\f2\fs21\lang1024\langfe1024\noproof , int }{\i\f2\fs21\lang1024\langfe1024\noproof data_type}{\f2\fs21\lang1024\langfe1024\noproof ); \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {Same functionality and return values as }{\f2\fs21 ns_dsi_read_vector()}{ except }{\f2\fs21 ns_dsi_read_matrix()}{ is used to read matrix of }{\f2\fs21 rows}{ rows and }{\f2\fs21 cols}{ columns. \par }\pard\plain \s2\ql \li0\ri0\sb311\sl539\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel1\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs41\lang1024\langfe1024\noproof {\*\bkmkstart _2612}{\*\bkmkend _2612} 20.4. Example \par }\pard\plain \ql \li960\ri0\sb207\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { This section shows two example programs. The first program solves quick sort without using the DSI feature. The second program solves the same quick sort, but with using the dsi feature. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b {\*\bkmkstart ID_EXAMPLE1}{\*\bkmkend ID_EXAMPLE1}Figure 20-1. Example 1 (without using DSI) \par }\pard \ql \li960\ri0\sb120\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 int main()\{ \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 int i; \par int length; \par int* inputVec; \par int* outputVec; \par int status; \par \par printf("Enter the number of vector elements: \\n"); \par scanf("%d", &length); \par \par inputVec = (int*)malloc(sizeof(int)*length); \par outputVec = (int*)malloc(sizeof(int)*length); \par \par for(i=0; i> netsolve \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Prints to the screen the list of all problems that are available in the NetSolve system. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 >> netsolve('') \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Prints all information available from Matlab about a specific problem. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 >> netsolve('?') \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Prints the list of all the agents and servers in the NetSolve system, that is, the NetSolve system containing the host whose name is in the environment variable NETSOLVE_AGENT. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 >> [ ... ] = netsolve('', ...) \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Sends a }{\i blocking}{ request to NetSolve. The left-hand side contains the output arguments. The right-hand side contains the problem name and the input arguments. The arguments are listed according to the problem description. Upon completion of this call, the output arguments contain the result of the computation. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 >> [r] = netsolve_nb('send','', ...) \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Sends a }{\i non-blocking}{ request to NetSolve. The right-hand side contains the keyword }{\b\f2 send}{ , the problem name, and the list of input arguments. These arguments are listed according to the problem description. The left-hand side will contain a request handler upon completion of the call. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 >> [ ... ] = netsolve_nb('wait',r) \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab }{\i Waits}{ for a request's completion. The right-hand side contains the keyword }{\b\f2 wait}{ and the request handler. The left-hand side contains the output arguments. These arguments are listed according to the problem description. Upon completion of this call, the output arguments contain the result of the computation. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 >> [ status ] = netsolve_nb('probe',r) \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab }{\i Probes}{ for a request completion. The right-hand side contains the keyword }{\b\f2 probe}{ and the request handler. The left-hand side contains the output arguments. These arguments are listed according to the problem description. The right-hand side contains the keyword }{\b\f2 probe}{ and the request handler. Upon completion of t his call, the output arguments contain the result of the computation. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 >> netsolve_nb('status') \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Prints out the list of all the pending requests. This list contains estimated time of completion, the computational servers handling the requests and the current status. The status can be }{\b\f2 COMPLETED}{ or }{\b\f2 RUNNING}{. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 >> netsolve_err \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Returns the error code of the most recently called NetSolve function. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 >> netsolve_errmsg(e) \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Returns a string containing the error message that corresponds to the error code passed as the argument. \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 22. C Reference Manual}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 22. C Reference Manual}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_CREF}{\*\bkmkend ID_CREF} Chapter 22. C Reference Manual \par }\pard\plain \ql \li960\ri0\sb249\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {We describe here all of the possible calls to Net Solve from C. All of these calls return a NetSolve code status. The list of the possible code status is given in }{\field{\*\fldinst { HYPERLINK \\l ID_ERRORCODES}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f004500520052004f00520043004f0044004500530023000000}}}{\fldrslt {Chapter 24}}}{. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 status = netsl("()", ...) \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Sends a }{\i blocking}{ request to NetSolve. }{\b\f2 netsl()}{ takes as argument the name of the problem and the list of arguments in the calling sequence. See }{\field{\*\fldinst { HYPERLINK \\l ID_WHATCALLINGSEQ}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000013000000490044005f005700480041005400430041004c004c0049004e00470053004500510023000000}}}{\fldrslt {Section 5.2}}}{ for a discussion about this calling sequence. It returns the NetSolve status code (integer }{\b\f2 status}{). If the call is successful, the result of the computation is stored in the output arguments. The output arguments are specified in the calling sequence. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 status = netslnb("()", ...) \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Sends a }{\i nonblocking}{ request to NetSolve. }{\b\f2 netslnb()}{ takes as argument the name of the problem, and the list of arguments in the calling sequence. See }{\field{\*\fldinst { HYPERLINK \\l ID_WHATCALLINGSEQ}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000013000000490044005f005700480041005400430041004c004c0049004e00470053004500510023000000}}}{\fldrslt {Section 5.2}}}{ for a discussion about this calling sequence. It returns the NetSolve status code (integer }{\b\f2 status}{). If the call is successful, }{\b\f2 status}{ contains the request handler. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 status = netslwt() \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab }{\i Waits}{ for a request completion. }{\b\f2 netslwt()}{ takes as argument a request handler (an integer). If the call is successful, the result of the computation is stored in the output arguments. The output arguments are specified in the calling sequence during the call to }{\b\f2 netslnb()}{. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 status = netslpr() \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab }{\i Probes}{ for a request completion. }{\b\f2 netslpr()}{ takes as argument a request handler (an integer). If the call is successful, the result of the computation is stored in the output arguments. The output arguments are specified in the calling sequence during the call to }{\b\f2 netslnb()}{. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 netslerr() \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Displays an explicit error message given a NetSolve error code. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 netslmajor("") \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Sets the way the user has stored her matrices (row- or column-wise). The argument can be }{\b\f2 "col"}{ or }{\b\f2 "row"}{ . It is case-insensitive and in fact only the first character is used by NetSolve. \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 23. Fortran Reference Manual}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 23. Fortran Reference Manual}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_FORTRANREF} {\*\bkmkend ID_FORTRANREF}Chapter 23. Fortran Reference Manual \par }\pard\plain \ql \li960\ri0\sb249\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {We describe here all the possible calls to NetSolve from Fortran. All these call s return a NetSolve code status. The list of the possible code status is given in }{\field{\*\fldinst { HYPERLINK \\l ID_ERRORCODES}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000f000000490044005f004500520052004f00520043004f0044004500530023000000}}}{\fldrslt {Chapter 24}}}{. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 CALL FNETSL('\}()',INFO, ...) \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Sends a }{\i blocking}{ request to NetSolve. }{\b\f2 FNETSL()}{ takes as argument the name of the problem, an integer, and the list of arguments in the calling sequence. See }{\field{\*\fldinst { HYPERLINK \\l ID_WHATCALLINGSEQ}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000013000000490044005f005700480041005400430041004c004c0049004e00470053004500510023000000}}}{\fldrslt {Section 5.2}}}{ for a discussion about this calling sequence. When the call returns, the integer }{\b\f2 INFO}{ contains the NetSolve status code. If the call is successful, the result of the computation is stored in the output arguments. The output arguments are specified in the calling sequence. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 CALL FNETSLNB('\}()',INFO, ...) \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Sends a }{\i nonblocking}{ request to NetSolve. }{\b\f2 FNETSLNB()}{ takes as argument the name of the problem, an integer, and the list of arguments in the calling sequence. See }{\field{\*\fldinst { HYPERLINK \\l ID_WHATCALLINGSEQ}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000013000000490044005f005700480041005400430041004c004c0049004e00470053004500510023000000}}}{\fldrslt {Section 5.2}}}{ for a discussion about this calling sequence. It returns the NetSolve status code (integer }{\b\f2 status}{). If the call is successful, }{\b\f2 status}{ contains the request handler. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 CALL FNETSLWT(,INFO) \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab }{\i Waits}{ for a request completion. }{\b\f2 FNETSLWT()}{ takes as argument a request handler and an integer. When the call returns, }{\b\f2 INFO}{ contains the NetSolve status code. If the call is successful, the result of the computation is stored in the output arguments. The output arguments are specified in the calling sequence during the call to }{\b\f2 FNETSLNB()}{. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 CALL FNETSLPR(,INFO) \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab }{\i Probes}{ for a request completion. }{\b\f2 FNETSLPR()}{ takes as argument a request handler and an integer. When the call returns, }{\b\f2 INFO}{ contains the NetSolve status code. If the call is successful, the result of the computation is stored in the output arguments. The output arguments are specified in the calling sequence during the call to }{\b\f2 FNETSLNB()}{. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 CALL FNETSLERR() \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Displays an explicit error message given a NetSolve error code. \par }\pard \ql \li960\ri0\sb240\sl312\slmult0\keepn\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\b\f2\fs21 CALL FNETSLMAJOR('') \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\tx1440\hyphpar0\faauto\rin0\lin1440\itap0 {\~\tab Sets the way the user has stored her matrices (row- or column-wise). The argument can be }{\b\f2 'col'}{ or }{\b\f2 'row'}{ . It is case-insensitive and in fact only the first character is used by NetSolve. \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Chapter 24. Error Handling in NetSolve}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Chapter 24. Error Handling in NetSolve}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_ERRORCODES} {\*\bkmkend ID_ERRORCODES}Chapter 24. Error Handling in NetSolve \par }\pard\plain \ql \li960\ri0\sb249\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { If an error occurs during the invocation of NetSolve, a variety of diagnostic runtime error messages, as well as error codes that can be returned when calling a NetSolve function from the C or Fortran interfaces, are provided. }{\field{\*\fldinst { HYPERLINK \\l ID_CODES}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f0043004f0044004500530023000000}}}{\fldrslt {Table 24-1}}}{ lists all of the possible error codes that can be returned when invoking a NetSolve function from the C or Fortran interfaces. These error codes are listed in the }{\f2\fs21 $NETSOLVE_ROOT/include/netsolveerror.h}{ include file. Each of these return codes has an equivalent runtime error message, also listed in }{\field{\*\fldinst { HYPERLINK \\l ID_CODES}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000a000000490044005f0043004f0044004500530023000000}}}{\fldrslt {Table 24-1}}}{. These runtime error messages are defined in }{\f2\fs21 $NETSOLVE_ROOT/src/CoreFunctions/netsolveerror.c}{ . If one of these error messages occurs, the user should first check the agent and server log files, }{\f2\fs21 $NETSOLVE_ROOT/nsagent.log}{ or }{\f2\fs21 $NETSOLVE_ROOT/nsserver.log}{ , respectively. These files may contain more information to clarify the reason for the error message. Otherwise, the user can refer to }{\field{\*\fldinst { HYPERLINK \\l ID_FAQ}{{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b020000000800000008000000490044005f0046004100510023000000}}}{\fldrslt {Chapter 12}}}{ for an explanation of possible causes for specific error messages. \par }\pard \ql \li960\ri0\sb240\sa120\sl312\slmult0\keepn\widctlpar\faauto\rin0\lin960\itap0 {\b {\*\bkmkstart ID_CODES}{\*\bkmkend ID_CODES}Table 24-1. Error Codes \par }\trowd \trleft960\trhdr\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\b\f1\fs20 ERROR CODE\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\b\f1\fs20 VALUE\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\b\f1\fs20 RUNTIME ERROR MESSAGE\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\b\f1\fs20 \trowd \trleft960\trhdr\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveOK\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 0\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: no error\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveNotReady\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 -1\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: not ready\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveSetNetSolveAgent\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -2\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: }{\f2\fs21 NETSOLVE_AGENT}{ not set\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\trowd \trleft960\trftsWidth1 \clvertalt \clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveSetNetSolveRoot\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -3\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: }{\f2\fs21 NETSOLVE_ROOT}{ not set\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl \brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSo lveSetNetSolveArch\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -4\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: }{\f2\fs21 NETSOLVE_ARCH}{ not set \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveInternalError\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 -5\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: internal error\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { \fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveUnknownHost\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -6\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: Unknown host\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveNetworkError\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -7\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: network error\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveUnknownProblem\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -8\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: unknown problem\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveProtocolError\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 -9\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: protocol error\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { \fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveNoServer\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -10\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: no available server\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveBadProblemSpecification\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -11\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: bad problem input/output\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveNotAllowed\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 -12\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: not allowed\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveBadValues\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -13\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: bad input values\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveDimensionMismatch\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -14\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: dimension mismatch\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveNoSolution\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -15\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: no solution\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveUnknownError\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 -16\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: unknown error\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { \fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveInvalidRequestID\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -17\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: invalid request ID\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveBadProblemName\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -18\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: invalid problem name\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveInvalidMajor\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 19\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: invalid major specification\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveTooManyPendingRequests\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 -20\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: too many pending requests\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveFileError\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 -21\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: file I/O error\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { \fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveUnknownDataFormat\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -22\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: unknown machine type\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveInvalidUPFFilename\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -23\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: invalid upf filename\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveMismatch\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -24\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: inconsistent object transfers\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveSystemError\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 -25\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: system error\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { \fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveConnectionRefused\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -26\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: connection refused\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveCannotBind\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -27\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: impossible to bind to port\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl \brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveUPFError\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -28\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: impossible to compile UPF\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveUPFUnsafe\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 -29\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: UPF security violation\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveServerError\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 -30\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: server error\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { \fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveBadIterationRange\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -31\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: invalid interation range\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveFarmingError\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -32\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: One or more request failed\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveCannotStartProxy \cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -33\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: Cannot start proxy\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveUnknownServer\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 -34\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: Unknown server\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { \fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveProxyError\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -35\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: Error while talking to proxy\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt \clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveCondorError\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -36\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: Condor error\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveCannotContactAgent \cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -37\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: Cannot contact agent\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveTimedOut\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 -38\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: operation timed out\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveAuthenticationError\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 -39\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: Authentication to server failed\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveUnknownHandle\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 -40\cell }\pard \ql \li0\ri0\sl-120\slmult0\widctlpar\intbl\faauto\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \par \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20\lang1024\langfe1024\noproof \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveUnknownDsiFile\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 -41\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: DSI file not found\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveIBPAllocateError\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -42\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: error in IBP_Allocate\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveIBPManageError\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -43\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: error in IBP_Manage\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveIBPLoadError\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -44\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: error in IBP_Load\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr \brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveIBPStoreError\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 -45\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: error in IBP_Store\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb \brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveDsiEACCESS\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -46\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: permission denied to DSI file\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt \clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt \brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NetSolveDsiDisabled\cell }\pard \qr \li100\ri100\sb60\sa60\sl312\slmult0\widctlpar\intbl\faauto\rin100\lin100 {\fs20 -47\cell }\pard \ql \li100\ri100\sb60\sa60\sl312\slmult0 \widctlpar\intbl\faauto\rin100\lin100 {\fs20 NS: NetSolve not configured with DSI\cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20 \trowd \trleft960\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl \brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx4800\clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth720 \cellx5520 \clvertalt\clbrdrt\brdrs\brdrw20 \clbrdrl\brdrs\brdrw20 \clbrdrb\brdrs\brdrw20 \clbrdrr\brdrs\brdrw20 \cltxlrtb\clftsWidth3\clwWidth3840 \cellx9360\row }\pard \ql \li0\ri0\sl-1\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 { \fs20\lang1024\langfe1024\noproof \par \sect }\sectd \linex0\headery0\footery0\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}\pard\plain \ql \li0\ri0\sl20\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof {\*\bkmkstart _3034}{\*\bkmkend _3034} \par }\pard \qc \li0\ri0\sb448\sl776\slmult0\widctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\b\f1\fs59\lang1024\langfe1024\noproof VI. Appendices \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Appendix A. Complete C Example}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Appendix A. Complete C Example}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_FULLEXAMPLEC} {\*\bkmkend ID_FULLEXAMPLEC}Appendix A. Complete C Example \par }\pard\plain \ql \li960\ri0\sb249\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2\fs21 /*******************************************************************/ \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 /* Example of the C call to NetSolve */ \par /* This program sends : */ \par /* */ \par /* - One blocking request for the problem 'dgesv' */ \par /* - One non-blocking request for the problem 'dgesv' */ \par /* */ \par /* and */ \par /* */ \par /* - One blocking request for the problem 'linsol' */ \par /* - One non-blocking request for the problem 'linsol' */ \par /* */ \par /* The problem 'linsol' is a simplified version of 'dgesv' */ \par /* */ \par /* The matrices are stored column-wise in a Fortran fashion */ \par /* */ \par /* WARNING : The matrix may be singular, in which case NetSolve */ \par /* will print out an error message. */ \par /* */ \par /*******************************************************************/ \par \par #include \par #include "netsolve.h" \par #include \par #include \par #include \par #include \par #include \par \par main(int argc,char **argv) \par \{ \par int m; /* Size of the matrix and right-hand side */ \par double *a1,*b1; /* Matrix and right-hand side for the 1st call */ \par double *a2,*b2; /* Matrix and right-hand side for the 2nd call */ \par double *a3,*b3; /* Matrix and right-hand side for the 3rd call */ \par double *a4,*b4; /* Matrix and right-hand side for the 4th call */ \par int *pivot; /* Vector of pivots returned by 'dgesv' */ \par int ierr; /* 'dgesv' error code */ \par \par int i; /* Loop index */ \par int init=1325; /* Seed of the random number generator */ \par int info; /* NetSolve error code */ \par int request; /* NetSolve request handler */ \par \par if (argc != 2) \par \{ \par fprintf(stderr,"Usage : %s \\n",argv[0]); \par exit(0); \par \} \par if ((m = atoi(argv[1])) <= 0) \par \{ \par fprintf(stderr,"'%s' : Should be a positive int}{\f2\fs21 e}{\f2\fs21 ger\\n",argv[1]); \par exit(0); \par \} \par \par /* \par * Generating the random mxm matrices, as well as the \par * random right hand sides. \par */ \par \par fprintf(stderr,"Generating the problem ...\\n"); \par \par a1 = (double *)malloc(m*m*sizeof(double)); \par a2 = (double *)malloc(m*m*sizeof(double)); \par a3 = (double *)malloc(m*m*sizeof(double)); \par a4 = (double *)malloc(m*m*sizeof(double)); \par for (i=0;i %f\\n",b1[i]); \par \} \par \par /* Calling Netsolve for 'dgesv' in a non-blocking fashion */ \par /* For 'dgesv', the right-hand side is overwritten */ \par /* with the solution */ \par \par fprintf(stderr,"Calling NetSolve for 'dgesv', non-blocking :\\n"); \par request = netslnb("dgesv()",m,1,a2,m,pivot,b2,m,&ierr); \par if (request <0) \par \{ \par netslerr(request); \par exit(0); \par \} \par fprintf(stderr,"Request #%d being processed\\n",request); \par fprintf(stderr,"Probing......\\n"); \par info = netslpr(request); \par while(info == NetSolveNotReady) \par \{ \par sleep(4); \par fprintf(stderr,"."); \par fflush(stderr); \par info = netslpr(request); \par \} \par fprintf(stderr,"\\n"); \par if (info == NetSolveOK) \par \{ \par info = netslwt(request); \par \} \par if (info < 0) \par netslerr(info); \par else \par \{ \par if (ierr != 0) \par fprintf(stderr,"Cannot solve for this Matrix and right-hand side\\n"); \par else \par \{ \par fprintf(stderr,"Solution :\\n"); \par for (i=0;i %f\\n",b2[i]); \par \} \par \} \par \par /* Calling Netsolve for 'linsol' in a blocking fashion */ \par /* For 'linsol', the right-hand side is overwritten */ \par /* with the solution */ \par \par fprintf(stderr,"Calling NetSolve for 'linsol', blocking :\\n"); \par info = netsl("linsol()",m,1,a3,m,b3,m); \par if (info <0) \par \{ \par netslerr(info); \par \} \par else \par \{ \par fprintf(stderr,"*************\\n"); \par fprintf(stderr,"** Success **\\n"); \par fprintf(stderr,"*************\\n"); \par fprintf(stderr,"Solution :\\n"); \par for (i=0;i %f\\n",b3[i]); \par \} \par \par /* Calling Netsolve for 'linsol' in a non-blocking fashion */ \par /* For 'linsol', the right-hand side is overwritten */ \par /* with the solution */ \par \par fprintf(stderr,"Calling NetSolve for 'linsol', non-blocking :\\n"); \par request = netslnb("linsol()",m,1,a4,m,b4,m); \par if (info <0) \par \{ \par netslerr(info); \par exit(0); \par \} \par fprintf(stderr,"Request #%d being processed\\n",request); \par fprintf(stderr,"Probing......\\n"); \par info = netslpr(request); \par while(info == NetSolveNotReady) \par \{ \par sleep(4); \par fprintf(stderr,"."); \par fflush(stderr); \par info = netslpr(request); \par \} \par fprintf(stderr,"\\n"); \par if (info == NetSolveOK) \par \{ \par info = netslwt(request); \par \} \par if (info < 0) \par netslerr(info); \par else \par \{ \par fprintf(stderr,"*************\\n"); \par fprintf(stderr,"** Success **\\n"); \par fprintf(stderr,"*************\\n"); \par fprintf(stderr,"Solution :\\n"); \par for (i=0;i %f\\n",b4[i]); \par \} \par \par return 1; \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 \} \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Appendix B. Complete Fortran77 Example}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Appendix B. Complete Fortran77 Example}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart ID_FULLEXAMPLEFORTRAN} {\*\bkmkend ID_FULLEXAMPLEFORTRAN}Appendix B. Complete Fortran77 Example \par }\pard\plain \ql \li960\ri0\sb249\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2\fs21 C Example of the FORTRAN call to NetSolve \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\faauto\rin0\lin960\itap0 {\f2\fs21 C This program sends : \par C \par C - One blocking request for the problem 'dgesv' \par C - One non-blocking request for the problem 'dgesv' \par C \par C and \par C \par C - One blocking request for the problem 'linsol' \par C - One non-blocking request for the problem 'linsol' \par C \par C The problem 'linsol' is a simplified version of 'dgesv' \par C \par C WARNING : The matrix may be singular, in which case NetSolve \par C will print an error message. \par C \par \par PROGRAM EXAMPLE \par \par INCLUDE '../../include/fnetsolve.h' \par \par INTEGER MAX \par PARAMETER (MAX = 500) \par INTEGER M \par DOUBLE PRECISION A1(MAX,MAX) \par DOUBLE PRECISION A2(MAX,MAX) \par DOUBLE PRECISION A3(MAX,MAX) \par DOUBLE PRECISION A4(MAX,MAX) \par DOUBLE PRECISION B1(MAX) \par DOUBLE PRECISION B2(MAX) \par DOUBLE PRECISION B3(MAX) \par DOUBLE PRECISION B4(MAX) \par \par INTEGER PIVOT(MAX) \par INTEGER IERR \par \par INTEGER I,J, II, III \par INTEGER INIT \par INTEGER INFO,REQUEST \par \par EXTERNAL FNETSL, FNETSLNB, FNETSLPB, FNETSLWT \par \par INTRINSIC DBLE, MOD \par \par WRITE(*,*) 'Enter the size of your matrix M =' \par READ(*,*) M \par \par IF(M.GT.MAX) THEN \par WRITE(*,*) 'Too big !!' \par STOP \par ENDIF \par \par C \par C Generating the matrices \par C \par WRITE(*,*) 'Generating the problem ...' \par INIT = 1325 \par DO 10 I = 1,M \par DO 11 J = 1,M \par INIT = MOD(2315*INIT,65536) \par A1(J,I) = (DBLE(INIT) - 32768.D0)/16384.D0 \par A2(J,I) = A1(J,I) \par A3(J,I) = A1(J,I) \par A4(J,I) = A1(J,I) \par 11 CONTINUE \par 10 CONTINUE \par \par \par C \par C Generating the right-hand sides \par C \par DO 12 I = 1,M \par INIT = MOD(2315*INIT,65536) \par B1(I) = (DBLE(INIT) - 32768.D0)/16384.D0 \par B2(I) = B1(I) \par B3(I) = B1(I) \par B4(I) = B1(I) \par 12 CONTINUE \par \par C Calling Netsolve for 'dgesv' in a blocking fashion \par C For 'dgesv', the right-hand side is overwritten \par C with the solution \par \par WRITE(*,*) 'Calling NetSolve for "dgesv", blocking :' \par CALL FNETSL( 'dgesv()',INFO,M,1,A1,MAX,PIVOT,B1,MAX,IERR ) \par IF( INFO.LT.0 ) THEN \par CALL FNETSLERR( INFO ) \par STOP \par END IF \par IF( IERR.NE.0 ) THEN \par WRITE(*,*) 'Cannot solve for this Matrix and right-hand side' \par ELSE \par WRITE(*,*) '*************' \par WRITE(*,*) '** Success **' \par WRITE(*,*) '*************' \par WRITE(*,*) ' Result :' \par DO 13 I = 1,M \par WRITE(*,*) ' --> ',B1(I) \par 13 CONTINUE \par END IF \par \par C Calling Netsolve for 'dgesv' in a non-blocking fashion \par C For 'dgesv', the right-hand side is overwritten \par C with the solution \par \par WRITE(*,*) 'Calling NetSolve for "dgesv", non-blocking :' \par CALL FNETSLNB( 'dgesv()',REQUEST,M,1,A2,MAX,PIVOT,B2,MAX,IERR ) \par IF( REQUEST.LT.0 ) THEN \par CALL FNETSLERR( REQUEST ) \par STOP \par END IF \par WRITE(*,*) 'Request #',INFO,' being processed' \par WRITE(*,*) 'Probing......' \par 14 CONTINUE \par CALL FNETSLPR( REQUEST, INFO ) \par IF( INFO.EQ.NetSolveNotReady ) THEN \par DO 21 II=1,50 \par III = II + 3*II \par 21 CONTINUE \par GO TO 14 \par END IF \par IF( INFO.EQ.NetSolveOK ) \par $ CALL FNETSLWT( REQUEST, INFO ) \par \par IF( IERR.NE.0 ) THEN \par WRITE(*,*) 'Cannot solve for this Matrix and right-hand side' \par ELSE \par WRITE(*,*) '*************' \par WRITE(*,*) '** Success **' \par WRITE(*,*) '*************' \par WRITE(*,*) ' Result :' \par DO 16 I = 1,M \par WRITE(*,*) ' --> ',B2(I) \par 16 CONTINUE \par END IF \par \par C Calling Netsolve for 'linsol' in a blocking fashion \par C For 'linsol', the right-hand side is overwritten \par C with the solution \par \par WRITE(*,*) 'Calling NetSolve for "linsol", blocking :' \par CALL FNETSL( 'linsol()',INFO,M,1,A3,MAX,B3,MAX ) \par IF( INFO.LT.0 ) THEN \par CALL FNETSLERR( INFO ) \par ELSE \par WRITE(*,*) '*************' \par WRITE(*,*) '** Success **' \par WRITE(*,*) '*************' \par WRITE(*,*) ' Result :' \par DO 17 I= 1,M \par WRITE(*,*) ' -->',B3(I) \par 17 CONTINUE \par END IF \par \par C Calling Netsolve for 'linsol' in a non-blocking fashion \par C For 'linsol', the right-hand side is overwritten \par C with the solution \par \par WRITE(*,*) 'Calling NetSolve for "linsol", non-blocking :' \par CALL FNETSLNB( 'linsol()',REQUEST,M,1,A4,MAX,B4,MAX ) \par IF( REQUEST.LT.0 ) THEN \par CALL FNETSLERR( INFO ) \par STOP \par END IF \par WRITE(*,*) 'Request #',REQUEST,' being processed' \par WRITE(*,*) 'Probing......' \par 18 CONTINUE \par CALL FNETSLPR(REQUEST,INFO) \par IF (INFO.EQ.NetSolveNotReady) THEN \par DO 22 II=1,50 \par III = II + 3*II \par 22 CONTINUE \par GO TO 18 \par END IF \par IF( INFO.EQ.NetSolveOK ) \par $ CALL FNETSLWT( REQUEST, INFO ) \par \par IF( INFO.LT.0 ) THEN \par CALL FNETSLERR( INFO ) \par ELSE \par WRITE(*,*) '*************' \par WRITE(*,*) '** Success **' \par WRITE(*,*) '*************' \par WRITE(*,*) ' Result :' \par DO 20 I= 1,M \par WRITE(*,*) ' -->',B4(I) \par 20 CONTINUE \par END IF \par \par STOP \par }\pard \ql \li960\ri0\sl281\slmult0\widctlpar\hyphpar0\faauto\rin0\lin960\itap0 {\f2\fs21 END \par \sect }\sectd \linex0\headery0\footery0\titlepg\sectdefaultcl {\headerl \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { \i\fs20\lang1024\langfe1024\noproof Bibliography}{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\headerr \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof Bibliography}{\fs20\lang1024\langfe1024\noproof \par }}{\footerl \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerr \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}{\headerf \pard\plain \ql \li0\ri0\sb770\sa430\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab \par }}{\footerf \pard\plain \ql \li0\ri0\sb770\sa910\sl-240\slmult0\widctlpar\tqc\tx4680\tqr\tx9360\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20\lang1024\langfe1024\noproof \tab \tab }{ \i\fs20\lang1024\langfe1024\noproof \chpgn }{\fs20\lang1024\langfe1024\noproof \par }}\pard\plain \s1\ql \li0\ri0\sb373\sl647\slmult0\keepn\widctlpar\hyphpar0\faauto\outlinelevel0\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs49\lang1024\langfe1024\noproof {\*\bkmkstart _3044}{\*\bkmkend _3044} Bibliography \par }\pard\plain \ql \fi-480\li1440\ri0\sb249\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1440\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\lang1024\langfe1024\noproof [matlab]\~1992, The MathWorks, Inc., }{ \i\lang1024\langfe1024\noproof MATLAB Reference Guide}{\lang1024\langfe1024\noproof . \par }\pard \ql \fi-480\li1440\ri0\sb120\sl312\slmult0\widctlpar\hyphpar0\faauto\rin0\lin1440\itap0 {\lang1024\langfe1024\noproof [mathematica]\~1996, Wolfram Median, Inc. and Cambridge University Press, }{\i\lang1024\langfe1024\noproof The Mathematica Book, Third Edition}{\lang1024\langfe1024\noproof . \par [netsolve]\~1997, The International Journal of Supercomputer Applications and Performance Computing, }{\i\lang1024\langfe1024\noproof NetSolve: A Network Server for Solving Computational Science Problems}{\lang1024\langfe1024\noproof . \par [ieee-cse]\~1997, 1998, IEEE, IEEE Computational Science & Engineering, }{\i\lang1024\langfe1024\noproof NetSolve's Network Enabled Server: Examples and Applications}{\lang1024\langfe1024\noproof , 57-67, 5(3), Henri Casanova and Jack Dongarra. \par [sequencing]\~2000, Euro-Par 2000: Parallel Processing, }{\i\lang1024\langfe1024\noproof Request Sequencing: Optimizing Communication for the Grid}{\lang1024\langfe1024\noproof , 3-540-67956-1, D. Arnold, D. Bachmann, and J. Dongarra. \par [ns-impl]\~1998, UT Department of Computer Science Technical Report, }{\i\lang1024\langfe1024\noproof NetSolve version 1.2: Design and Implementation}{\lang1024\langfe1024\noproof , Henri Casanova and Jack Dongarra. \par [ns:mathematica]\~1998, UNI \bullet C Technical Report UNIC-98-05, }{\i\lang1024\langfe1024\noproof Mathematica Interface to NetSolve}{\lang1024\langfe1024\noproof , Henri Casanova, Jack Dongarra, A. Karaivanov, and Jerzy Wasniewski. \par [condor1]\~1988, Proceedings of the 8th International Conference of Distributed Computing Systems, }{\i\lang1024\langfe1024\noproof Condor - A Hunter of Idle Workstations}{\lang1024\langfe1024\noproof , 104-111, M. Litzkow, M. Livny, and M. W. Mutka. \par [condor2]\~1990, IEEE, Proceedings of the IEEE Workshop on Experimental Distributed Systems, }{\i\lang1024\langfe1024\noproof Experience with the Condor Distributed Batch System}{\lang1024\langfe1024\noproof , M. Litzkow and M. Livny. \par [ima]\~1998, Springer-Verlag, IMA Volumes in Mathematics and its Applications, Algorithms for Parallel Processing, }{\i\lang1024\langfe1024\noproof Providing Uniform Dynamic Access to Numerical Software}{\lang1024\langfe1024\noproof , 345-355, 105, Henri Casanova and Jack Dongarra. \par [lapack]\~1999, SIAM, }{\i\lang1024\langfe1024\noproof LAPACK Users' Guide, Third Edition}{\lang1024\langfe1024\noproof , 0-89871-447-8, E. Anderson, Z. Bai, C. Bischof, S. Blackford, J. Demmel, J. Dongarra, J. Du Croz, A. Greenbaum, S. Hammarling, A. McKenney, and D. Sorensen. \par }} .