/[ascend]/trunk/doc/howto-plot.lyx
ViewVC logotype

Annotation of /trunk/doc/howto-plot.lyx

Parent Directory Parent Directory | Revision Log Revision Log


Revision 825 - (hide annotations) (download) (as text)
Mon Aug 21 23:41:31 2006 UTC (18 years, 3 months ago) by johnpye
Original Path: trunk/doc/lyxFinal/howto-plot.lyx
File MIME type: application/x-lyx
File size: 25182 byte(s)
Copying documentation into code tree
1 johnpye 825 #LyX 1.4.1 created this file. For more info see http://www.lyx.org/
2     \lyxformat 245
3     \begin_document
4     \begin_header
5     \textclass book
6     \language english
7     \inputencoding auto
8     \fontscheme default
9     \graphics default
10     \paperfontsize default
11     \spacing single
12     \papersize a4paper
13     \use_geometry false
14     \use_amsmath 2
15     \cite_engine basic
16     \use_bibtopic false
17     \paperorientation portrait
18     \secnumdepth 3
19     \tocdepth 3
20     \paragraph_separation indent
21     \defskip medskip
22     \quotes_language english
23     \papercolumns 1
24     \papersides 2
25     \paperpagestyle default
26     \tracking_changes false
27     \output_changes true
28     \end_header
29    
30     \begin_body
31    
32     \begin_layout Chapter
33     Plotting
34     \begin_inset LatexCommand \index{plotting}
35    
36     \end_inset
37    
38     data sampled from complex models
39     \begin_inset LatexCommand \label{cha:plot}
40    
41     \end_inset
42    
43    
44     \end_layout
45    
46     \begin_layout Standard
47     Often you need a plot of data sampled from arbitrary locations in a model
48     that are not naturally grouped in a single easily plotted vector.
49     The
50     \family typewriter
51     plot.a4l
52     \family default
53    
54     \begin_inset LatexCommand \index{plot.a4l}
55    
56     \end_inset
57    
58     library provides models (
59     \family typewriter
60     plt_curve
61     \family default
62    
63     \begin_inset LatexCommand \index{plt\_curve}
64    
65     \end_inset
66    
67     ,
68     \family typewriter
69     plt_plot_symbol
70     \family default
71    
72     \begin_inset LatexCommand \index{plt\_plot\_symbol}
73    
74     \end_inset
75    
76     , and
77     \family typewriter
78     plt_plot_integer
79     \family default
80    
81     \begin_inset LatexCommand \index{plt\_plot\_integer}
82    
83     \end_inset
84    
85     ) that can be used with the Browser's Display Plot button.
86     In this chapter we see how to create such a plot using the ASCEND statement
87     ALIASES/IS_A to sample data from a mechanical system of stretched springs,
88     masses, anchors, and fingers.
89     Creating plots of time series data output from ASCEND's initial value solver
90     LSODE is discussed in Chapter\InsetSpace ~
91    
92     \begin_inset LatexCommand \vref{cha:ivp}
93    
94     \end_inset
95    
96     .
97     \end_layout
98    
99     \begin_layout Standard
100     Chemical engineers who can tolerate distillation models should visit the
101     file
102     \family typewriter
103     plotcol.a4c
104     \family default
105     in the models library for more complicated examples of plotting and visit
106     the model
107     \family typewriter
108     simple_column_profiles
109     \family default
110    
111     \begin_inset LatexCommand \index{simple\_column\_profiles}
112    
113     \end_inset
114    
115     in
116     \family typewriter
117     column.a4l
118     \family default
119    
120     \begin_inset LatexCommand \index{column.a4l}
121    
122     \end_inset
123    
124     for more complicated examples of sampling data.
125     Reading this chapter first may be of help in interpreting those models.
126     \end_layout
127    
128     \begin_layout Section
129     The graph we want
130     \end_layout
131    
132     \begin_layout Standard
133     We want to plot the positions X1 to X3 of the connecting hooks h1, h2, and
134     h3 in a mechanical system as shown in Figure\InsetSpace ~
135    
136     \begin_inset LatexCommand \ref{fig:plot.springSystem}
137    
138     \end_inset
139    
140    
141     \noun off
142     .
143     The anchor, hooks, springs, and finger (we could replace either spring
144     with a block mass, also) are all separate objects which we have modeled
145     very simply.
146     These models are given at the end of the chapter and can also be found
147     (with improvements) in
148     \family typewriter
149     \noun default
150     force1d.a4c
151     \begin_inset LatexCommand \index{force1d.a4c}
152    
153     \end_inset
154    
155    
156     \family default
157     \noun off
158     , a model file in the distributed ASCEND libraries.
159    
160     \end_layout
161    
162     \begin_layout Standard
163     \begin_inset Float figure
164     wide false
165     sideways false
166     status open
167    
168     \begin_layout Standard
169    
170     \noun off
171     \InsetSpace ~
172     \InsetSpace ~
173     \InsetSpace ~
174     \InsetSpace ~
175     \InsetSpace ~
176     \InsetSpace ~
177     \InsetSpace ~
178     \InsetSpace ~
179     \InsetSpace ~
180     \InsetSpace ~
181     \InsetSpace ~
182     \InsetSpace ~
183     \InsetSpace ~
184     \InsetSpace ~
185     \InsetSpace ~
186     \InsetSpace ~
187     \InsetSpace ~
188     \InsetSpace ~
189     \InsetSpace ~
190     \InsetSpace ~
191     \InsetSpace ~
192     \InsetSpace ~
193     \InsetSpace ~
194     \InsetSpace ~
195     \InsetSpace ~
196     \InsetSpace ~
197    
198     \begin_inset Graphics
199     filename howto-plotFig1.eps
200     scale 80
201     BoundingBox 0bp 0bp 400bp 200bp
202    
203     \end_inset
204    
205    
206     \end_layout
207    
208     \begin_layout Caption
209     Spring test model
210     \begin_inset LatexCommand \index{spring test model}
211    
212     \end_inset
213    
214     system,
215     \family typewriter
216     st
217     \family default
218    
219     \begin_inset LatexCommand \label{fig:plot.springSystem}
220    
221     \end_inset
222    
223    
224     \end_layout
225    
226     \end_inset
227    
228    
229     \end_layout
230    
231     \begin_layout Standard
232     Plotting is usually a post-solution analysis
233     \begin_inset LatexCommand \index{post-solution analysis}
234    
235     \end_inset
236    
237     tool, so our plots should not be entangled with the basic models or with
238     the total mechanical system model,
239     \family typewriter
240     st
241     \family default
242     .
243     We might want to explain the system
244     \family typewriter
245     st
246     \family default
247     to someone and this could be hard to do if the code is cluttered up with
248     plot information.
249     \end_layout
250    
251     \begin_layout Section
252     Constructing a plot curve
253     \end_layout
254    
255     \begin_layout Standard
256     The plot library models follow object-oriented thinking carefully, perhaps
257     a little too carefully.
258     A
259     \family typewriter
260     plt_plot_integer
261     \family default
262     is a plottable model built out of plt_curves which are in turn built out
263     of arrays of data points from the user.
264     Constructing these data arrays is the only significant challenge in using
265     the plot models.
266     Begin by building a new model with the system st as a part:
267     \end_layout
268    
269     \begin_layout LyX-Code
270     MODEL plot_spring_test;
271     \end_layout
272    
273     \begin_layout LyX-Code
274     st IS_A spring_test;
275     \end_layout
276    
277     \begin_layout LyX-Code
278     Plot_X IS_A plt_plot_integer(curve_set,curves);
279     \end_layout
280    
281     \begin_layout LyX-Code
282     END plot_spring_test;
283     \end_layout
284    
285     \begin_layout Standard
286     We want to create a
287     \family typewriter
288     plt_curve
289     \family default
290     from the array of hook numbers
291     \family typewriter
292     y_data[1..3]
293     \family default
294     plotted against horizontal hook position
295     \family typewriter
296     x_data[1..3]
297     \family default
298     .
299     There are obvious problems with the model above:
300     \family typewriter
301     curves
302     \family default
303     and
304     \family typewriter
305     curve_set
306     \family default
307     are used without being defined, and there is no mention of
308     \family typewriter
309     x_data
310     \family default
311     or
312     \family typewriter
313     y_data
314     \family default
315     .
316    
317     \end_layout
318    
319     \begin_layout Standard
320     Begin by using an ALIASES
321     \begin_inset LatexCommand \index{ALIASES}
322    
323     \end_inset
324    
325     /IS_A statement to construct the array of positions
326     \family typewriter
327     x_data
328     \family default
329     from the variables X stored in the hooks of model
330     \family typewriter
331     st
332     \family default
333     .
334     \end_layout
335    
336     \begin_layout LyX-Code
337     x_data[Xset] ALIASES (st.h1.X,st.h2.X,st.h3.X)
338     \end_layout
339    
340     \begin_layout LyX-Code
341     WHERE Xset IS_A set OF integer_constant;
342     \end_layout
343    
344     \begin_layout Standard
345     This statement creates a set,
346     \family typewriter
347     Xset
348     \family default
349     , indexing a new array
350     \family typewriter
351     x_data
352     \family default
353     with elements collected from
354     \family typewriter
355     st
356     \family default
357     .
358     Since the value of
359     \family typewriter
360     Xset
361     \family default
362     is not specified, it becomes by default the set [1,2,3].
363     \end_layout
364    
365     \begin_layout Standard
366     Now we need the hook numbers,
367     \family typewriter
368     y_data
369     \family default
370     .
371     These do not exist in
372     \family typewriter
373     st
374     \family default
375     , so we create them.
376     We will set the numeric values of these in the
377     \family typewriter
378     default_self
379     \family default
380     method.
381     We will include method in the final model, but do not show it here.
382     \end_layout
383    
384     \begin_layout LyX-Code
385     y_data[Xset] IS_A real;
386     \end_layout
387    
388     \begin_layout Standard
389     Having both
390     \family typewriter
391     y_data
392     \family default
393     and
394     \family typewriter
395     x_data
396     \family default
397     , we can construct a curve from them:
398     \end_layout
399    
400     \begin_layout LyX-Code
401     X_curve IS_A plt_curve(Xset,y_data,x_data);
402     \end_layout
403    
404     \begin_layout Section
405     Constructing the array of curves
406     \end_layout
407    
408     \begin_layout Standard
409     We have a curve, but the
410     \family typewriter
411     plt_plot_integer
412     \family default
413     model
414     \family typewriter
415     Plot_x
416     \family default
417     expects an array of curves and the set indexing this array as input.
418     We can make both from
419     \family typewriter
420     X_curve
421     \family default
422     easily using, once again, an ALIASES/IS_A statement.
423     \end_layout
424    
425     \begin_layout LyX-Code
426     curves[curve_set] ALIASES (X_curve)
427     \end_layout
428    
429     \begin_layout LyX-Code
430     WHERE curve_set IS_A set OF integer_constant;
431     \end_layout
432    
433     \begin_layout Standard
434     All the pieces are now in place, so we have the final model:
435     \end_layout
436    
437     \begin_layout LyX-Code
438     MODEL plot_spring_test;
439     \end_layout
440    
441     \begin_layout LyX-Code
442    
443     \end_layout
444    
445     \begin_layout LyX-Code
446     (* create our system model and plot.
447     *)
448     \end_layout
449    
450     \begin_layout LyX-Code
451     st IS_A spring_test;
452     \end_layout
453    
454     \begin_layout LyX-Code
455     Plot_X IS_A plt_plot_integer(curve_set,curves);
456     \end_layout
457    
458     \begin_layout LyX-Code
459    
460     \end_layout
461    
462     \begin_layout LyX-Code
463     (* Gather the sampled data into an array *)
464     \end_layout
465    
466     \begin_layout LyX-Code
467     x_data[Xset] ALIASES (st.h1.X,st.h2.X,st.h3.X)
468     \end_layout
469    
470     \begin_layout LyX-Code
471     WHERE Xset IS_A set OF integer_constant;
472     \end_layout
473    
474     \begin_layout LyX-Code
475     (* Create the Y coordinates *)
476     \end_layout
477    
478     \begin_layout LyX-Code
479     y_data[Xset] IS_A real;
480     \end_layout
481    
482     \begin_layout LyX-Code
483    
484     \end_layout
485    
486     \begin_layout LyX-Code
487     (* create the curve *)
488     \end_layout
489    
490     \begin_layout LyX-Code
491     X_curve IS_A plt_curve(Xset,y_data,x_data);
492     \end_layout
493    
494     \begin_layout LyX-Code
495     (* Make X_curve into the array for plt_plot_integer *)
496     \end_layout
497    
498     \begin_layout LyX-Code
499     curves[curve_set] ALIASES (X_curve) WHERE
500     \end_layout
501    
502     \begin_layout LyX-Code
503     curve_set IS_A set OF integer_constant;
504     \end_layout
505    
506     \begin_layout LyX-Code
507     METHOD default_self;
508     \end_layout
509    
510     \begin_layout LyX-Code
511     RUN st.default_self;
512     \end_layout
513    
514     \begin_layout LyX-Code
515     st.s1.L0 := 0.2{m}; (* make st more interesting *)
516     \end_layout
517    
518     \begin_layout LyX-Code
519     RUN Plot_X.default_self;
520     \end_layout
521    
522     \begin_layout LyX-Code
523     RUN X_curve.default_self;
524     \end_layout
525    
526     \begin_layout LyX-Code
527     FOR i IN Xset DO
528     \end_layout
529    
530     \begin_layout LyX-Code
531     y_data[i] := i;
532     \end_layout
533    
534     \begin_layout LyX-Code
535     END FOR;
536     \end_layout
537    
538     \begin_layout LyX-Code
539     X_curve.legend := 'meter';
540     \end_layout
541    
542     \begin_layout LyX-Code
543     Plot_X.title := 'Hook locations';
544     \end_layout
545    
546     \begin_layout LyX-Code
547     Plot_X.XLabel := 'location';
548     \end_layout
549    
550     \begin_layout LyX-Code
551     Plot_X.YLabel := 'hook #';
552     \end_layout
553    
554     \begin_layout LyX-Code
555     END default_self;
556     \end_layout
557    
558     \begin_layout LyX-Code
559     END plot_spring_test;
560     \end_layout
561    
562     \begin_layout Section
563     Resulting position plot
564     \end_layout
565    
566     \begin_layout Standard
567     We can compile the plot model and obtain the graph in with the following
568     short script.
569     \end_layout
570    
571     \begin_layout LyX-Code
572     READ FILE force1d.a4c;
573     \end_layout
574    
575     \begin_layout LyX-Code
576     COMPILE pst OF plot_spring_test;
577     \end_layout
578    
579     \begin_layout LyX-Code
580     BROWSE {pst};
581     \end_layout
582    
583     \begin_layout LyX-Code
584     RUN {pst.st.reset};
585     \end_layout
586    
587     \begin_layout LyX-Code
588     SOLVE {pst.st} WITH QRSlv;
589     \end_layout
590    
591     \begin_layout LyX-Code
592     PLOT {pst.Plot_X} ;
593     \end_layout
594    
595     \begin_layout LyX-Code
596     SHOW LAST;
597     \end_layout
598    
599     \begin_layout Standard
600     We can also obtain the plot by moving to
601     \family typewriter
602     pst.Plot_X
603     \family default
604     in the Browser window and then pushing the Display
605     \begin_inset Formula $\rightarrow$
606     \end_inset
607    
608     Plot button or then typing "Alt-d p".
609     We see the hooks are positioned near 0, 230, and 370 mm.
610     We also see that xgraph
611     \begin_inset LatexCommand \index{xgraph}
612    
613     \end_inset
614    
615     sometimes makes less than pretty graphs (Figure
616     \begin_inset LatexCommand \ref{fig:plot.plotXforSpring}
617    
618     \end_inset
619    
620     ).
621     \end_layout
622    
623     \begin_layout Standard
624     \begin_inset Float figure
625     wide false
626     sideways false
627     status open
628    
629     \begin_layout Standard
630     \begin_inset Graphics
631     filename howto-plotFig2.eps
632     BoundingBox 30bp 0bp 480bp 460bp
633    
634     \end_inset
635    
636    
637     \end_layout
638    
639     \begin_layout Caption
640     \begin_inset LatexCommand \label{fig:plot.plotXforSpring}
641    
642     \end_inset
643    
644     Plot_X in plot_spring_test
645     \end_layout
646    
647     \end_inset
648    
649    
650     \end_layout
651    
652     \begin_layout Section
653     1-D mechanical hook, spring, mass, anchor, and finger models
654     \end_layout
655    
656     \begin_layout Standard
657     The models used in this chapter are very simple versions of masses and springs
658     horizontally at rest, but possibly under tension, stretched between an
659     anchor and a finger.
660     Only the code absolutely necessary for this example is given here; the
661     full code with methods and additional comments is given in
662     \family typewriter
663     force1d.a4c
664     \family default
665     , an ASCEND modeling example in the library.
666    
667     \end_layout
668    
669     \begin_layout Standard
670     These models could easily be extended to include mass, momentum, and acceleratio
671     n in two or three dimensions.
672     Most of the methods in the
673     \family typewriter
674     force1d.a4c
675     \family default
676     models are unedited from the code generated by the ASCEND Library button
677     Edit
678     \begin_inset Formula $\rightarrow$
679     \end_inset
680    
681     Suggest method
682     \begin_inset LatexCommand \index{method, Suggest method}
683    
684     \end_inset
685    
686    
687     \begin_inset LatexCommand \index{Suggest method tool}
688    
689     \end_inset
690    
691     .
692     If you improve on these models, please share them with us and the rest
693     of the ASCEND community.
694     \end_layout
695    
696     \begin_layout LyX-Code
697     REQUIRE "atoms.a4l";
698     \end_layout
699    
700     \begin_layout LyX-Code
701     CONSTANT spring_constant REFINES real_constant DIMENSION M/T^2;
702     \end_layout
703    
704     \begin_layout LyX-Code
705     CONSTANT position_constant REFINES real_constant DIMENSION L;
706     \end_layout
707    
708     \begin_layout LyX-Code
709     ATOM position REFINES distance DEFAULT 0{m};
710     \end_layout
711    
712     \begin_layout LyX-Code
713     END position;
714     \end_layout
715    
716     \begin_layout LyX-Code
717    
718     \end_layout
719    
720     \begin_layout LyX-Code
721     MODEL hook;
722     \end_layout
723    
724     \begin_layout LyX-Code
725     F_left, F_right IS_A force;
726     \end_layout
727    
728     \begin_layout LyX-Code
729     F_left = F_right;
730     \end_layout
731    
732     \begin_layout LyX-Code
733     X IS_A position;
734     \end_layout
735    
736     \begin_layout LyX-Code
737     METHODS
738     \end_layout
739    
740     \begin_layout LyX-Code
741     METHOD default_self;
742     \end_layout
743    
744     \begin_layout LyX-Code
745     (* ATOM defaults are fine *)
746     \end_layout
747    
748     \begin_layout LyX-Code
749     END default_self;
750     \end_layout
751    
752     \begin_layout LyX-Code
753     METHOD specify;
754     \end_layout
755    
756     \begin_layout LyX-Code
757     F_right.fixed := TRUE;
758     \end_layout
759    
760     \begin_layout LyX-Code
761     END specify;
762     \end_layout
763    
764     \begin_layout LyX-Code
765     METHOD specify_float;
766     \end_layout
767    
768     \begin_layout LyX-Code
769     END specify_float;
770     \end_layout
771    
772     \begin_layout LyX-Code
773     END hook;
774     \end_layout
775    
776     \begin_layout LyX-Code
777    
778     \end_layout
779    
780     \begin_layout LyX-Code
781     MODEL massless_spring(
782     \end_layout
783    
784     \begin_layout LyX-Code
785     k IS_A spring_constant;
786     \end_layout
787    
788     \begin_layout LyX-Code
789     h_left WILL_BE hook;
790     \end_layout
791    
792     \begin_layout LyX-Code
793     h_right WILL_BE hook;
794     \end_layout
795    
796     \begin_layout LyX-Code
797     ) WHERE (
798     \end_layout
799    
800     \begin_layout LyX-Code
801     h_left, h_right WILL_NOT_BE_THE_SAME;
802     \end_layout
803    
804     \begin_layout LyX-Code
805     );
806     \end_layout
807    
808     \begin_layout LyX-Code
809     L0, dx IS_A distance;
810     \end_layout
811    
812     \begin_layout LyX-Code
813     h_right.X = h_left.X + L0 + dx;
814     \end_layout
815    
816     \begin_layout LyX-Code
817     F = k * dx;
818     \end_layout
819    
820     \begin_layout LyX-Code
821     h_left.F_right = F;
822     \end_layout
823    
824     \begin_layout LyX-Code
825     h_right.F_left = F;
826     \end_layout
827    
828     \begin_layout LyX-Code
829     F IS_A force;
830     \end_layout
831    
832     \begin_layout LyX-Code
833     METHODS
834     \end_layout
835    
836     \begin_layout LyX-Code
837     METHOD default_self;
838     \end_layout
839    
840     \begin_layout LyX-Code
841     dx := 1{cm};
842     \end_layout
843    
844     \begin_layout LyX-Code
845     L0 := 10{cm};
846     \end_layout
847    
848     \begin_layout LyX-Code
849     END default_self;
850     \end_layout
851    
852     \begin_layout LyX-Code
853     METHOD specify;
854     \end_layout
855    
856     \begin_layout LyX-Code
857     L0.fixed := TRUE;
858     \end_layout
859    
860     \begin_layout LyX-Code
861     RUN h_left.reset;
862     \end_layout
863    
864     \begin_layout LyX-Code
865     RUN h_right.reset;
866     \end_layout
867    
868     \begin_layout LyX-Code
869     h_left.F_right.fixed := FALSE;
870     \end_layout
871    
872     \begin_layout LyX-Code
873     h_left.X.fixed := TRUE;
874     \end_layout
875    
876     \begin_layout LyX-Code
877     END specify;
878     \end_layout
879    
880     \begin_layout LyX-Code
881     METHOD specify_float;
882     \end_layout
883    
884     \begin_layout LyX-Code
885     L0.fixed := TRUE;
886     \end_layout
887    
888     \begin_layout LyX-Code
889     RUN h_left.specify_float;
890     \end_layout
891    
892     \begin_layout LyX-Code
893     RUN h_right.specify_float;
894     \end_layout
895    
896     \begin_layout LyX-Code
897     END specify_float;
898     \end_layout
899    
900     \begin_layout LyX-Code
901     END massless_spring;
902     \end_layout
903    
904     \begin_layout LyX-Code
905    
906     \end_layout
907    
908     \begin_layout LyX-Code
909     MODEL massless_block(
910     \end_layout
911    
912     \begin_layout LyX-Code
913     h_left WILL_BE hook;
914     \end_layout
915    
916     \begin_layout LyX-Code
917     h_right WILL_BE hook;
918     \end_layout
919    
920     \begin_layout LyX-Code
921     ) WHERE (
922     \end_layout
923    
924     \begin_layout LyX-Code
925     h_left, h_right WILL_NOT_BE_THE_SAME;
926     \end_layout
927    
928     \begin_layout LyX-Code
929     );
930     \end_layout
931    
932     \begin_layout LyX-Code
933     width IS_A distance;
934     \end_layout
935    
936     \begin_layout LyX-Code
937     h_left.F_right = h_right.F_left;
938     \end_layout
939    
940     \begin_layout LyX-Code
941     h_right.X = h_left.X + width;
942     \end_layout
943    
944     \begin_layout LyX-Code
945     X "center of the block" IS_A position;
946     \end_layout
947    
948     \begin_layout LyX-Code
949     X = width/2 + h_left.X;
950     \end_layout
951    
952     \begin_layout LyX-Code
953     METHODS
954     \end_layout
955    
956     \begin_layout LyX-Code
957     METHOD default_self;
958     \end_layout
959    
960     \begin_layout LyX-Code
961     width := 3{cm};
962     \end_layout
963    
964     \begin_layout LyX-Code
965     END default_self;
966     \end_layout
967    
968     \begin_layout LyX-Code
969     METHOD specify;
970     \end_layout
971    
972     \begin_layout LyX-Code
973     width.fixed := TRUE;
974     \end_layout
975    
976     \begin_layout LyX-Code
977     RUN h_left.reset;
978     \end_layout
979    
980     \begin_layout LyX-Code
981     h_left.F_right.fixed := FALSE;
982     \end_layout
983    
984     \begin_layout LyX-Code
985     h_left.X.fixed := TRUE;
986     \end_layout
987    
988     \begin_layout LyX-Code
989     RUN h_right.reset;
990     \end_layout
991    
992     \begin_layout LyX-Code
993     END specify;
994     \end_layout
995    
996     \begin_layout LyX-Code
997     METHOD specify_float;
998     \end_layout
999    
1000     \begin_layout LyX-Code
1001     width.fixed := TRUE;
1002     \end_layout
1003    
1004     \begin_layout LyX-Code
1005     RUN h_left.specify_float;
1006     \end_layout
1007    
1008     \begin_layout LyX-Code
1009     RUN h_right.specify_float;
1010     \end_layout
1011    
1012     \begin_layout LyX-Code
1013     END specify_float;
1014     \end_layout
1015    
1016     \begin_layout LyX-Code
1017     END massless_block;
1018     \end_layout
1019    
1020     \begin_layout LyX-Code
1021    
1022     \end_layout
1023    
1024     \begin_layout LyX-Code
1025     MODEL anchor(
1026     \end_layout
1027    
1028     \begin_layout LyX-Code
1029     x IS_A position_constant;
1030     \end_layout
1031    
1032     \begin_layout LyX-Code
1033     h_right WILL_BE hook;
1034     \end_layout
1035    
1036     \begin_layout LyX-Code
1037     );
1038     \end_layout
1039    
1040     \begin_layout LyX-Code
1041     h_right.X = x;
1042     \end_layout
1043    
1044     \begin_layout LyX-Code
1045     F = h_right.F_left;
1046     \end_layout
1047    
1048     \begin_layout LyX-Code
1049     F IS_A force;
1050     \end_layout
1051    
1052     \begin_layout LyX-Code
1053     METHODS
1054     \end_layout
1055    
1056     \begin_layout LyX-Code
1057     METHOD default_self;
1058     \end_layout
1059    
1060     \begin_layout LyX-Code
1061     END default_self;
1062     \end_layout
1063    
1064     \begin_layout LyX-Code
1065     METHOD specify;
1066     \end_layout
1067    
1068     \begin_layout LyX-Code
1069     RUN h_right.reset;
1070     \end_layout
1071    
1072     \begin_layout LyX-Code
1073     END specify;
1074     \end_layout
1075    
1076     \begin_layout LyX-Code
1077     METHOD specify_float;
1078     \end_layout
1079    
1080     \begin_layout LyX-Code
1081     END specify_float;
1082     \end_layout
1083    
1084     \begin_layout LyX-Code
1085     END anchor;
1086     \end_layout
1087    
1088     \begin_layout LyX-Code
1089    
1090     \end_layout
1091    
1092     \begin_layout LyX-Code
1093     MODEL finger(
1094     \end_layout
1095    
1096     \begin_layout LyX-Code
1097     h1 WILL_BE hook;
1098     \end_layout
1099    
1100     \begin_layout LyX-Code
1101     );
1102     \end_layout
1103    
1104     \begin_layout LyX-Code
1105     pull IS_A force;
1106     \end_layout
1107    
1108     \begin_layout LyX-Code
1109     h1.F_right = pull;
1110     \end_layout
1111    
1112     \begin_layout LyX-Code
1113     METHODS
1114     \end_layout
1115    
1116     \begin_layout LyX-Code
1117     METHOD default_self;
1118     \end_layout
1119    
1120     \begin_layout LyX-Code
1121     pull := 3{N};
1122     \end_layout
1123    
1124     \begin_layout LyX-Code
1125     END default_self;
1126     \end_layout
1127    
1128     \begin_layout LyX-Code
1129     END finger;
1130     \end_layout
1131    
1132     \begin_layout LyX-Code
1133    
1134     \end_layout
1135    
1136     \begin_layout LyX-Code
1137     MODEL finger_test;
1138     \end_layout
1139    
1140     \begin_layout LyX-Code
1141     NOTES 'ascii-picture' SELF {
1142     \end_layout
1143    
1144     \begin_layout LyX-Code
1145     ___ __
1146     \end_layout
1147    
1148     \begin_layout LyX-Code
1149    
1150     \backslash
1151    
1152     \backslash
1153     --O--/
1154     \backslash
1155     /
1156     \backslash
1157     /
1158     \backslash
1159     /
1160     \backslash
1161     /
1162     \backslash
1163     /--O--| |--O(_
1164     \backslash
1165    
1166     \end_layout
1167    
1168     \begin_layout LyX-Code
1169     |___|
1170     \backslash
1171    
1172     \backslash
1173    
1174     \end_layout
1175    
1176     \begin_layout LyX-Code
1177     (reference)-h1-(s1)-h2-(m1)-h3-(pinky)
1178     \end_layout
1179    
1180     \begin_layout LyX-Code
1181     }
1182     \end_layout
1183    
1184     \begin_layout LyX-Code
1185     END NOTES;
1186     \end_layout
1187    
1188     \begin_layout LyX-Code
1189     h1 IS_A hook;
1190     \end_layout
1191    
1192     \begin_layout LyX-Code
1193     s1 IS_A massless_spring(100{kg/s^2},h1,h2);
1194     \end_layout
1195    
1196     \begin_layout LyX-Code
1197     h2 IS_A hook;
1198     \end_layout
1199    
1200     \begin_layout LyX-Code
1201     m1 IS_A massless_block(h2,h3);
1202     \end_layout
1203    
1204     \begin_layout LyX-Code
1205     h3 IS_A hook;
1206     \end_layout
1207    
1208     \begin_layout LyX-Code
1209     pinky IS_A finger(h3);
1210     \end_layout
1211    
1212     \begin_layout LyX-Code
1213     METHODS
1214     \end_layout
1215    
1216     \begin_layout LyX-Code
1217     METHOD default_self;
1218     \end_layout
1219    
1220     \begin_layout LyX-Code
1221     RUN h1.default_self;
1222     \end_layout
1223    
1224     \begin_layout LyX-Code
1225     RUN h2.default_self;
1226     \end_layout
1227    
1228     \begin_layout LyX-Code
1229     RUN h3.default_self;
1230     \end_layout
1231    
1232     \begin_layout LyX-Code
1233     RUN m1.default_self;
1234     \end_layout
1235    
1236     \begin_layout LyX-Code
1237     RUN pinky.default_self;
1238     \end_layout
1239    
1240     \begin_layout LyX-Code
1241     RUN reference.default_self;
1242     \end_layout
1243    
1244     \begin_layout LyX-Code
1245     RUN s1.default_self;
1246     \end_layout
1247    
1248     \begin_layout LyX-Code
1249     END default_self;
1250     \end_layout
1251    
1252     \begin_layout LyX-Code
1253     METHOD specify;
1254     \end_layout
1255    
1256     \begin_layout LyX-Code
1257     RUN m1.specify_float;
1258     \end_layout
1259    
1260     \begin_layout LyX-Code
1261     RUN pinky.reset;
1262     \end_layout
1263    
1264     \begin_layout LyX-Code
1265     RUN reference.specify_float;
1266     \end_layout
1267    
1268     \begin_layout LyX-Code
1269     RUN s1.specify_float;
1270     \end_layout
1271    
1272     \begin_layout LyX-Code
1273     END specify;
1274     \end_layout
1275    
1276     \begin_layout LyX-Code
1277     END finger_test;
1278     \end_layout
1279    
1280     \begin_layout LyX-Code
1281    
1282     \end_layout
1283    
1284     \begin_layout LyX-Code
1285     MODEL spring_test;
1286     \end_layout
1287    
1288     \begin_layout LyX-Code
1289     NOTES 'ascii-picture' SELF {
1290     \end_layout
1291    
1292     \begin_layout LyX-Code
1293    
1294     \backslash
1295    
1296     \backslash
1297     --O--/
1298     \backslash
1299     /
1300     \backslash
1301     /
1302     \backslash
1303     /
1304     \backslash
1305     /
1306     \backslash
1307     /--O--
1308     \backslash
1309     /
1310     \backslash
1311     /
1312     \backslash
1313     --O(
1314     \backslash
1315    
1316     \end_layout
1317    
1318     \begin_layout LyX-Code
1319     (reference)-h1-(s1)-h2-(s2)-h3-(pinky)
1320     \end_layout
1321    
1322     \begin_layout LyX-Code
1323     }
1324     \end_layout
1325    
1326     \begin_layout LyX-Code
1327     END NOTES;
1328     \end_layout
1329    
1330     \begin_layout LyX-Code
1331     reference IS_A anchor(0.0{m},h1);
1332     \end_layout
1333    
1334     \begin_layout LyX-Code
1335     h1 IS_A hook;
1336     \end_layout
1337    
1338     \begin_layout LyX-Code
1339     s1 IS_A massless_spring(100{kg/s^2},h1,h2);
1340     \end_layout
1341    
1342     \begin_layout LyX-Code
1343     h2 IS_A hook;
1344     \end_layout
1345    
1346     \begin_layout LyX-Code
1347     s2 IS_A massless_spring(75{kg/s^2},h2,h3);
1348     \end_layout
1349    
1350     \begin_layout LyX-Code
1351     h3 IS_A hook;
1352     \end_layout
1353    
1354     \begin_layout LyX-Code
1355     pinky IS_A finger(h3);
1356     \end_layout
1357    
1358     \begin_layout LyX-Code
1359     METHODS
1360     \end_layout
1361    
1362     \begin_layout LyX-Code
1363     METHOD default_self;
1364     \end_layout
1365    
1366     \begin_layout LyX-Code
1367     RUN h1.default_self;
1368     \end_layout
1369    
1370     \begin_layout LyX-Code
1371     RUN h2.default_self;
1372     \end_layout
1373    
1374     \begin_layout LyX-Code
1375     RUN h3.default_self;
1376     \end_layout
1377    
1378     \begin_layout LyX-Code
1379     RUN s2.default_self;
1380     \end_layout
1381    
1382     \begin_layout LyX-Code
1383     RUN pinky.default_self;
1384     \end_layout
1385    
1386     \begin_layout LyX-Code
1387     RUN reference.default_self;
1388     \end_layout
1389    
1390     \begin_layout LyX-Code
1391     RUN s1.default_self;
1392     \end_layout
1393    
1394     \begin_layout LyX-Code
1395     END default_self;
1396     \end_layout
1397    
1398     \begin_layout LyX-Code
1399     METHOD specify;
1400     \end_layout
1401    
1402     \begin_layout LyX-Code
1403     RUN pinky.reset;
1404     \end_layout
1405    
1406     \begin_layout LyX-Code
1407     RUN reference.specify_float;
1408     \end_layout
1409    
1410     \begin_layout LyX-Code
1411     RUN s1.specify_float;
1412     \end_layout
1413    
1414     \begin_layout LyX-Code
1415     RUN s2.specify_float;
1416     \end_layout
1417    
1418     \begin_layout LyX-Code
1419     END specify;
1420     \end_layout
1421    
1422     \begin_layout LyX-Code
1423     END spring_test;
1424     \end_layout
1425    
1426     \begin_layout LyX-Code
1427    
1428     \end_layout
1429    
1430     \begin_layout LyX-Code
1431     REQUIRE "plot.a4l";
1432     \end_layout
1433    
1434     \begin_layout LyX-Code
1435     MODEL plot_spring_test;
1436     \end_layout
1437    
1438     \begin_layout LyX-Code
1439    
1440     \end_layout
1441    
1442     \begin_layout LyX-Code
1443     (* create our model *)
1444     \end_layout
1445    
1446     \begin_layout LyX-Code
1447     st IS_A spring_test;
1448     \end_layout
1449    
1450     \begin_layout LyX-Code
1451    
1452     \end_layout
1453    
1454     \begin_layout LyX-Code
1455     (* Now gather the sampled data into an array for plotting *)
1456     \end_layout
1457    
1458     \begin_layout LyX-Code
1459     x_data[Xset] ALIASES (st.h1.X,st.h2.X,st.h3.X)
1460     \end_layout
1461    
1462     \begin_layout LyX-Code
1463     WHERE Xset IS_A set OF integer_constant;
1464     \end_layout
1465    
1466     \begin_layout LyX-Code
1467    
1468     \end_layout
1469    
1470     \begin_layout LyX-Code
1471     (* Now create the Y coordinates of the plot since there is no
1472     \end_layout
1473    
1474     \begin_layout LyX-Code
1475     * natural Y coordinate in our MODEL.
1476     \end_layout
1477    
1478     \begin_layout LyX-Code
1479     *)
1480     \end_layout
1481    
1482     \begin_layout LyX-Code
1483     y_data[Xset] IS_A real; (* all will be assigned to 1.0 *)
1484     \end_layout
1485    
1486     \begin_layout LyX-Code
1487    
1488     \end_layout
1489    
1490     \begin_layout LyX-Code
1491     X_curve IS_A plt_curve(Xset,y_data,x_data);
1492     \end_layout
1493    
1494     \begin_layout LyX-Code
1495    
1496     \end_layout
1497    
1498     \begin_layout LyX-Code
1499     (* Make X_curve into the expected array for plt_plot *)
1500     \end_layout
1501    
1502     \begin_layout LyX-Code
1503     curves[curve_set] ALIASES (X_curve) WHERE
1504     \end_layout
1505    
1506     \begin_layout LyX-Code
1507     curve_set IS_A set OF integer_constant;
1508     \end_layout
1509    
1510     \begin_layout LyX-Code
1511    
1512     \end_layout
1513    
1514     \begin_layout LyX-Code
1515     Plot_X IS_A plt_plot_integer(curve_set,curves);
1516     \end_layout
1517    
1518     \begin_layout LyX-Code
1519     METHODS
1520     \end_layout
1521    
1522     \begin_layout LyX-Code
1523     METHOD default_self;
1524     \end_layout
1525    
1526     \begin_layout LyX-Code
1527     RUN st.default_self;
1528     \end_layout
1529    
1530     \begin_layout LyX-Code
1531     st.s1.L0 := 0.2{m};
1532     \end_layout
1533    
1534     \begin_layout LyX-Code
1535     RUN X_curve.default_self;
1536     \end_layout
1537    
1538     \begin_layout LyX-Code
1539     RUN Plot_X.default_self;
1540     \end_layout
1541    
1542     \begin_layout LyX-Code
1543     FOR i IN Xset DO
1544     \end_layout
1545    
1546     \begin_layout LyX-Code
1547     y_data[i] := i;
1548     \end_layout
1549    
1550     \begin_layout LyX-Code
1551     END FOR;
1552     \end_layout
1553    
1554     \begin_layout LyX-Code
1555     X_curve.legend := 'meter';
1556     \end_layout
1557    
1558     \begin_layout LyX-Code
1559     Plot_X.title := 'Hook locations';
1560     \end_layout
1561    
1562     \begin_layout LyX-Code
1563     Plot_X.XLabel := 'location {m}';
1564     \end_layout
1565    
1566     \begin_layout LyX-Code
1567     Plot_X.YLabel := 'hook #';
1568     \end_layout
1569    
1570     \begin_layout LyX-Code
1571     END default_self;
1572     \end_layout
1573    
1574     \begin_layout LyX-Code
1575     END plot_spring_test;
1576     \end_layout
1577    
1578     \begin_layout Standard
1579    
1580     \end_layout
1581    
1582     \end_body
1583     \end_document

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22