File: cfortr.dmo

package info (click to toggle)
maxima 5.6-17
  • links: PTS
  • area: main
  • in suites: woody
  • size: 30,572 kB
  • ctags: 47,715
  • sloc: ansic: 154,079; lisp: 147,553; asm: 45,843; tcl: 16,744; sh: 11,057; makefile: 7,198; perl: 1,842; sed: 334; fortran: 24; awk: 5
file content (63 lines) | stat: -rw-r--r-- 3,207 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*-*-MACSYMA-*-*/
if properties(cray_fortran) = [] then load(cfortr)$
/* CRAY_FORTRAN behaves much as does FORTRAN.  One small difference is
   that FORTRAN does not generate ALOG when it encounters LOG :        */
eqn1:x[i]=t[i]*log(ti[i]^2/te[i])-co;
cray_fortran(eqn1)$
exp1:3/2*sqrt(r-s)-5/3;
cray_fortran(rnew=exp1)$
/* We can generate the appropriate DATA statements so as to make sense
   out of the last formatted output by doing:                          */
generate_data_section()$
/* Generally, we would wait until all calls to CRAY_FORTRAN had been made
   before calling GENERATE_DATA_SECTION.  However, there are probably
   specific cases where it would make sense to call it for each SUBROUTINE
   being generated.

   If the equations to be output are strictly of integer type, the flag
   FORT_FLOAT should be turned off.                                     */
eqns2:[k=28*n/m-356+3*i^3,l=45*(n-m)*(i+j)^11];
block([fort_float:false],map('cray_fortran,eqns2))$
/* If we wish to obtain string output, the flag FORT_STRING should be
   turned on.  This is then used to construct FORTRAN logicals.        */
a:t\(k\)*u\(k\)/v\(k\);
b:g\(k\)^5*h\(k\)^2;
fort_string:true$
cray_fortran(b);
exp1:q\(k\)*cvmgt(r\(k\)*t\(k\),s\(k\)*t\(k\),
		  concat(cray_fortran(a),".ge.",cray_fortran(b)));
fort_string:false$
cray_fortran(exp1)$
/* To cause integer exponents to be turned into floating-point numbers,
   turn on the flag FORT_POWER_FLOAT .                                  */
exp2:g-h^3*t^13/s^7+b^2;
block([fort_power_float:true],cray_fortran(exp2))$
/* Consider now a problem where the body of a DO-LOOP is being generated.
   If formal subscripts are attached to the variable names and they
   happen to be different from the DO-LOOP index, it is necessary to
   change them.  This we do by setting up FORTRAN_SUBST_LIST appropriately. */
eqns3:[t\(k\)=a\(k\)*(b1\(i\,j\)+exb1\(i\,j\))-exp(-hnu/ti\(i\,j\)),
       u\(k\)=b\(k\)*(b2\(i\,j\)+exb2\(i\,j\))*(b3\(i\,j\)+exb3\(i\,j\)),
       v\(k\)=(b1\(i\,j\)+exb1\(i\,j\))*(b3\(i\,j\)+exb3\(i\,j\))^2,
       w\(k\)=(b2\(i\,j\)+exb2\(i\,j\))/sqrt((b1\(i\,j\)+exb1\(i\,j\))^2+
               (b2\(i\,j\)+exb2\(i\,j\))^2+(b3\(i\,j\)+exb3\(i\,j\))^2),
       x\(k\)=sqrt((b1\(i\,j\)+exb1\(i\,j\))^2+
               (b2\(i\,j\)+exb2\(i\,j\))^2+(b3\(i\,j\)+exb3\(i\,j\))^2)
              *sqrt(b1\(i\,j\)+exb1\(i\,j\))-exp(-hnu/ti\(i\,j\))];
fortran_subst_list:[exploden(?"(K)")=exploden(?"(J)")]$
/* In order to illustrate the capability to send the FORTRAN output to a
   separate file as well, we set up the file GCOOK;SCRAT OUT for this
   output.  Additionally, we use COMMENT_FORTRAN to annotate the file.    */
open_fortran_file("sys$scratch:scrat.out")$
comment_fortran("The following list corresponds to the FORTRAN which follows")$
comment_fortran(eqns3)$
map('cray_fortran,eqns3)$
close_fortran_file()$
/* printfile("gcook\;scrat out")$ 
delfile("gcook\;scrat out")$ */
?type\-file(?"sys$scratch:scrat.out")$
/* Finally, we illustrated the capability of the package for dealing with
   very large equations.                                                  */
allowed_length:400$
exp3:expand((r-s)^40-t*u+v)$
cray_fortran(q\(k\)=exp3)$