1
$\begingroup$

For example:

expr = (a0 D11+(a0^2 D11)/2+(a1^2 D11)/4+(a2^2 D11)/4+(a3^2 D11)/4+(a4^2 D11)/4+(a5^2 D11)/4+(a6^2 D11)/4+(a7^2 D11)/4+(a8^2 D11)/4+(d0^2 D11)/2+(d1^2 D11)/4+b0 D12+(b0^2 D12)/2+(b1^2 D12)/4+(b2^2 D12)/4+(b3^2 D12)/4+(b4^2 D12)/4+(b5^2 D12)/4+(b6^2 D12)/4+(b7^2 D12)/4+(b8^2 D12)/4+c0 D13+(c0^2 D13)/2+(c1^2 D13)/4+(c2^2 D13)/4+(c3^2 D13)/4+(c4^2 D13)/4+d0 D14+b0 d0 D14+(b1 d1 D14)/2+(b2 D14 d2)/2+(D11 d2^2)/4+(b3 D14 d3)/2+(D11 d3^2)/4+(b4 D14 d4)/2+(D11 d4^2)/4+(b5 D14 d5)/2+(D11 d5^2)/4+(b6 D14 d6)/2+(D11 d6^2)/4+(b7 D14 d7)/2+(D11 d7^2)/4+(b8 D14 d8)/2+(D11 d8^2)/4+(a1 D14 e1)/2+(D12 e1^2)/4+(a2 D14 e2)/2+(D12 e2^2)/4+(a3 D14 e3)/2+(D12 e3^2)/4+(a4 D14 e4)/2+(D12 e4^2)/4+(a5 D14 e5)/2+(D12 e5^2)/4+(a6 D14 e6)/2+(D12 e6^2)/4+(a7 D14 e7)/2+(D12 e7^2)/4+(a8 D14 e8)/2+(D12 e8^2)/4+(D13 f0^2)/2+(D13 f1^2)/4+(D13 f2^2)/4+(D13 f3^2)/4+(D13 f4^2)/4+(D13 f5^2)/4+(D13 f6^2)/4+(D13 f7^2)/4+(D13 f8^2)/4+(D12 g0^2)/2+(D12 g1^2)/4+(D12 g2^2)/4+(D12 g3^2)/4+(D12 g4^2)/4+(D12 g5^2)/4+(D12 g6^2)/4+(D12 g7^2)/4+(D12 g8^2)/4+D14 g0 h0+(D11 h0^2)/2+(D14 g1 h1)/2+(D11 h1^2)/4+(D14 g2 h2)/2+(D11 h2^2)/4+(D14 g3 h3)/2+(D11 h3^2)/4+(D14 g4 h4)/2+(D11 h4^2)/4+(D13 j0^2)/2+(D13 j1^2)/4+(D13 j2^2)/4+(D13 j3^2)/4+(D13 j4^2)/4+(D13 j5^2)/4+(D13 j6^2)/4+(D13 j7^2)/4+(D13 j8^2)/4+(a1 D11+a0 a1 D11+(a1 a3 D11)/2+(a2 a4 D11)/2+(a3 a5 D11)/2+(a4 a6 D11)/2+(a5 a7 D11)/2+(a6 a8 D11)/2+d0 d1 D11+b1 D12+b0 b1 D12+(b1 b3 D12)/2+(b2 b4 D12)/2+(b3 b5 D12)/2+(b4 b6 D12)/2+(b5 b7 D12)/2+(b6 b8 D12)/2+c1 D13+c0 c1 D13+(c1 c3 D13)/2+(c2 c4 D13)/2+b1 d0 D14+d1 D14+b0 d1 D14+(b3 d1 D14)/2+(b4 D14 d2)/2+(d1 D11 d3)/2+(b1 D14 d3)/2+(b5 D14 d3)/2+(b2 D14 d4)/2+(b6 D14 d4)/2+(D11 d2 d4)/2+(b3 D14 d5)/2+(b7 D14 d5)/2+(D11 d3 d5)/2+(b4 D14 d6)/2+(b8 D14 d6)/2+(D11 d4 d6)/2+(b5 D14 d7)/2+(D11 d5 d7)/2+(b6 D14 d8)/2+(D11 d6 d8)/2+D14 e1+a0 D14 e1+(a3 D14 e1)/2+(a4 D14 e2)/2+(a1 D14 e3)/2+(a5 D14 e3)/2+(D12 e1 e3)/2+(a2 D14 e4)/2+(a6 D14 e4)/2+(D12 e2 e4)/2+(a3 D14 e5)/2+(a7 D14 e5)/2+(D12 e3 e5)/2+(a4 D14 e6)/2+(a8 D14 e6)/2+(D12 e4 e6)/2+(a5 D14 e7)/2+(D12 e5 e7)/2+(a6 D14 e8)/2+(D12 e6 e8)/2+D13 f0 f1+(D13 f1 f3)/2+(D13 f2 f4)/2+(D13 f3 f5)/2+(D13 f4 f6)/2+(D13 f5 f7)/2+(D13 f6 f8)/2+D12 g0 g1+(D12 g1 g3)/2+(D12 g2 g4)/2+(D12 g3 g5)/2+(D12 g4 g6)/2+(D12 g5 g7)/2+(D12 g6 g8)/2+D14 g1 h0+D14 g0 h1+(D14 g3 h1)/2+D11 h0 h1+(D14 g4 h2)/2+(D14 g1 h3)/2+(D14 g5 h3)/2+(D11 h1 h3)/2+(D14 g2 h4)/2+(D14 g6 h4)/2+(D11 h2 h4)/2+D13 j0 j1+(D13 j1 j3)/2+(D13 j2 j4)/2+(D13 j3 j5)/2+(D13 j4 j6)/2+(D13 j5 j7)/2+(D13 j6 j8)/2) Cos[angle n])

In this expression, one part is constant and other part is multiplied by Cos[angle n]. I derived this result using Collect but do not know how to further convert it into fortran form or otherwise how first i convert expression so that later on, I can use Collect to print coefficient? Also one more point, Collect[expr, {Cos[n*angle], Sin[n*angle]}] this expression is for Cos and Sin terms, How we can use Collect to print the constant part also?

$\endgroup$
1
$\begingroup$

One possibility is the following: Suppose you put this into a file called f.m :

If[FindFile["FeynCalc`"] === $Failed,
   (* as explained here: https://github.com/FeynCalc/feyncalc/wiki/Installation  *)
   Import["http://users.ph.tum.de/ga57tah/feyncalc/FeynCalcInstallNightly.m"]
];

Needs["FeynCalc`"];

(* assuming you use Fortran 90 or newer*)
$FortranContinuationCharacter = "";

expr=(a0 D11+(a0^2 D11)/2+(a1^2 D11)/4+(a2^2 D11)/4+(a3^2 D11)/4+(a4^2 D11)/4+(a5^2 D11)/4+(a6^2 D11)/4+(a7^2 D11)/4+(a8^2 D11)/4+(d0^2 D11)/2+(d1^2 D11)/4+b0 D12+(b0^2 D12)/2+(b1^2 D12)/4+(b2^2 D12)/4+(b3^2 D12)/4+(b4^2 D12)/4+(b5^2 D12)/4+(b6^2 D12)/4+(b7^2 D12)/4+(b8^2 D12)/4+c0 D13+(c0^2 D13)/2+(c1^2 D13)/4+(c2^2 D13)/4+(c3^2 D13)/4+(c4^2 D13)/4+d0 D14+b0 d0 D14+(b1 d1 D14)/2+(b2 D14 d2)/2+(D11 d2^2)/4+(b3 D14 d3)/2+(D11 d3^2)/4+(b4 D14 d4)/2+(D11 d4^2)/4+(b5 D14 d5)/2+(D11 d5^2)/4+(b6 D14 d6)/2+(D11 d6^2)/4+(b7 D14 d7)/2+(D11 d7^2)/4+(b8 D14 d8)/2+(D11 d8^2)/4+(a1 D14 e1)/2+(D12 e1^2)/4+(a2 D14 e2)/2+(D12 e2^2)/4+(a3 D14 e3)/2+(D12 e3^2)/4+(a4 D14 e4)/2+(D12 e4^2)/4+(a5 D14 e5)/2+(D12 e5^2)/4+(a6 D14 e6)/2+(D12 e6^2)/4+(a7 D14 e7)/2+(D12 e7^2)/4+(a8 D14 e8)/2+(D12 e8^2)/4+(D13 f0^2)/2+(D13 f1^2)/4+(D13 f2^2)/4+(D13 f3^2)/4+(D13 f4^2)/4+(D13 f5^2)/4+(D13 f6^2)/4+(D13 f7^2)/4+(D13 f8^2)/4+(D12 g0^2)/2+(D12 g1^2)/4+(D12 g2^2)/4+(D12 g3^2)/4+(D12 g4^2)/4+(D12 g5^2)/4+(D12 g6^2)/4+(D12 g7^2)/4+(D12 g8^2)/4+D14 g0 h0+(D11 h0^2)/2+(D14 g1 h1)/2+(D11 h1^2)/4+(D14 g2 h2)/2+(D11 h2^2)/4+(D14 g3 h3)/2+(D11 h3^2)/4+(D14 g4 h4)/2+(D11 h4^2)/4+(D13 j0^2)/2+(D13 j1^2)/4+(D13 j2^2)/4+(D13 j3^2)/4+(D13 j4^2)/4+(D13 j5^2)/4+(D13 j6^2)/4+(D13 j7^2)/4+(D13 j8^2)/4+(a1 D11+a0 a1 D11+(a1 a3 D11)/2+(a2 a4 D11)/2+(a3 a5 D11)/2+(a4 a6 D11)/2+(a5 a7 D11)/2+(a6 a8 D11)/2+d0 d1 D11+b1 D12+b0 b1 D12+(b1 b3 D12)/2+(b2 b4 D12)/2+(b3 b5 D12)/2+(b4 b6 D12)/2+(b5 b7 D12)/2+(b6 b8 D12)/2+c1 D13+c0 c1 D13+(c1 c3 D13)/2+(c2 c4 D13)/2+b1 d0 D14+d1 D14+b0 d1 D14+(b3 d1 D14)/2+(b4 D14 d2)/2+(d1 D11 d3)/2+(b1 D14 d3)/2+(b5 D14 d3)/2+(b2 D14 d4)/2+(b6 D14 d4)/2+(D11 d2 d4)/2+(b3 D14 d5)/2+(b7 D14 d5)/2+(D11 d3 d5)/2+(b4 D14 d6)/2+(b8 D14 d6)/2+(D11 d4 d6)/2+(b5 D14 d7)/2+(D11 d5 d7)/2+(b6 D14 d8)/2+(D11 d6 d8)/2+D14 e1+a0 D14 e1+(a3 D14 e1)/2+(a4 D14 e2)/2+(a1 D14 e3)/2+(a5 D14 e3)/2+(D12 e1 e3)/2+(a2 D14 e4)/2+(a6 D14 e4)/2+(D12 e2 e4)/2+(a3 D14 e5)/2+(a7 D14 e5)/2+(D12 e3 e5)/2+(a4 D14 e6)/2+(a8 D14 e6)/2+(D12 e4 e6)/2+(a5 D14 e7)/2+(D12 e5 e7)/2+(a6 D14 e8)/2+(D12 e6 e8)/2+D13 f0 f1+(D13 f1 f3)/2+(D13 f2 f4)/2+(D13 f3 f5)/2+(D13 f4 f6)/2+(D13 f5 f7)/2+(D13 f6 f8)/2+D12 g0 g1+(D12 g1 g3)/2+(D12 g2 g4)/2+(D12 g3 g5)/2+(D12 g4 g6)/2+(D12 g5 g7)/2+(D12 g6 g8)/2+D14 g1 h0+D14 g0 h1+(D14 g3 h1)/2+D11 h0 h1+(D14 g4 h2)/2+(D14 g1 h3)/2+(D14 g5 h3)/2+(D11 h1 h3)/2+(D14 g2 h4)/2+(D14 g6 h4)/2+(D11 h2 h4)/2+D13 j0 j1+(D13 j1 j3)/2+(D13 j2 j4)/2+(D13 j3 j5)/2+(D13 j4 j6)/2+(D13 j5 j7)/2+(D13 j6 j8)/2) Cos[angle n]);

(* see http://www.feyncalc.org/FeynCalcBook/Collect2/ *)
new = Collect2[expr, {Sin, Cos}];

(* see http://www.feyncalc.org/FeynCalcBook/Write2/ *)
Write2["out.f", res = new, FormatType -> FortranForm, StringReplace -> {"Cos" -> "cos"}];

FilePrint @ "out.f"

Then, e.g. on Linux:

In[1]:= <<f.m
downloading http://users.ph.tum.de/ga57tah/feyncalc/fcnightly-head.zip   please wait
Downloading 2 MB from http://users.ph.tum.de/ga57tah/feyncalc/fcnightly-head.zip
Downloading done, installing FeynCalc to /home/rolfm/.Mathematica/Applications
installation of FeynCalc ready.
loading FeynCalc
Loading FeynCalc from /home/rolfm/.Mathematica/Applications/FeynCalc/
$PrePrint is set to FeynCalcForm. Use FI and FC to change the display format.
FeynCalc 9.0.0. For help, type ?FeynCalc, use the help browser or visit www.feyncalc.org.
        res = 2.5D-1*(4D0*a0*D11 + 2D0*a0**2*D11 + a1**2*D11 +
          a2**2*D11 + a3**2*D11 + a4**2*D11 + a5**2*D11 +
          a6**2*D11 + a7**2*D11 + a8**2*D11 +
          2D0*d0**2*D11 + d1**2*D11 + 4D0*b0*D12 +
          2D0*b0**2*D12 + b1**2*D12 + b2**2*D12 +
          b3**2*D12 + b4**2*D12 + b5**2*D12 + b6**2*D12 +
          b7**2*D12 + b8**2*D12 + 4D0*c0*D13 +
          2D0*c0**2*D13 + c1**2*D13 + c2**2*D13 +
          c3**2*D13 + c4**2*D13 + 4D0*d0*D14 +
          4D0*b0*d0*D14 + 2D0*b1*d1*D14 + 2D0*b2*D14*d2 +
          D11*d2**2 + 2D0*b3*D14*d3 + D11*d3**2 +
          2D0*b4*D14*d4 + D11*d4**2 + 2D0*b5*D14*d5 +
          D11*d5**2 + 2D0*b6*D14*d6 + D11*d6**2 +
          2D0*b7*D14*d7 + D11*d7**2 + 2D0*b8*D14*d8 +
          D11*d8**2 + 2D0*a1*D14*e1 + D12*e1**2 +
          2D0*a2*D14*e2 + D12*e2**2 + 2D0*a3*D14*e3 +
          D12*e3**2 + 2D0*a4*D14*e4 + D12*e4**2 +
          2D0*a5*D14*e5 + D12*e5**2 + 2D0*a6*D14*e6 +
          D12*e6**2 + 2D0*a7*D14*e7 + D12*e7**2 +
          2D0*a8*D14*e8 + D12*e8**2 + 2D0*D13*f0**2 +
          D13*f1**2 + D13*f2**2 + D13*f3**2 + D13*f4**2 +
          D13*f5**2 + D13*f6**2 + D13*f7**2 + D13*f8**2 +
          2D0*D12*g0**2 + D12*g1**2 + D12*g2**2 +
          D12*g3**2 + D12*g4**2 + D12*g5**2 + D12*g6**2 +
          D12*g7**2 + D12*g8**2 + 4D0*D14*g0*h0 +
          2D0*D11*h0**2 + 2D0*D14*g1*h1 + D11*h1**2 +
          2D0*D14*g2*h2 + D11*h2**2 + 2D0*D14*g3*h3 +
          D11*h3**2 + 2D0*D14*g4*h4 + D11*h4**2 +
          2D0*D13*j0**2 + D13*j1**2 + D13*j2**2 +
          D13*j3**2 + D13*j4**2 + D13*j5**2 + D13*j6**2 +
          D13*j7**2 + D13*j8**2) +
       5.D-1*(2D0*a1*D11 + 2D0*a0*a1*D11 + a1*a3*D11 +
          a2*a4*D11 + a3*a5*D11 + a4*a6*D11 + a5*a7*D11 +
          a6*a8*D11 + 2D0*d0*d1*D11 + 2D0*b1*D12 +
          2D0*b0*b1*D12 + b1*b3*D12 + b2*b4*D12 +
          b3*b5*D12 + b4*b6*D12 + b5*b7*D12 + b6*b8*D12 +
          2D0*c1*D13 + 2D0*c0*c1*D13 + c1*c3*D13 +
          c2*c4*D13 + 2D0*b1*d0*D14 + 2D0*d1*D14 +
          2D0*b0*d1*D14 + b3*d1*D14 + b4*D14*d2 +
          d1*D11*d3 + b1*D14*d3 + b5*D14*d3 + b2*D14*d4 +
          b6*D14*d4 + D11*d2*d4 + b3*D14*d5 + b7*D14*d5 +
          D11*d3*d5 + b4*D14*d6 + b8*D14*d6 + D11*d4*d6 +
          b5*D14*d7 + D11*d5*d7 + b6*D14*d8 + D11*d6*d8 +
          2D0*D14*e1 + 2D0*a0*D14*e1 + a3*D14*e1 +
          a4*D14*e2 + a1*D14*e3 + a5*D14*e3 + D12*e1*e3 +
          a2*D14*e4 + a6*D14*e4 + D12*e2*e4 + a3*D14*e5 +
          a7*D14*e5 + D12*e3*e5 + a4*D14*e6 + a8*D14*e6 +
          D12*e4*e6 + a5*D14*e7 + D12*e5*e7 + a6*D14*e8 +
          D12*e6*e8 + 2D0*D13*f0*f1 + D13*f1*f3 +
          D13*f2*f4 + D13*f3*f5 + D13*f4*f6 + D13*f5*f7 +
          D13*f6*f8 + 2D0*D12*g0*g1 + D12*g1*g3 +
          D12*g2*g4 + D12*g3*g5 + D12*g4*g6 + D12*g5*g7 +
          D12*g6*g8 + 2D0*D14*g1*h0 + 2D0*D14*g0*h1 +
          D14*g3*h1 + 2D0*D11*h0*h1 + D14*g4*h2 +
          D14*g1*h3 + D14*g5*h3 + D11*h1*h3 + D14*g2*h4 +
          D14*g6*h4 + D11*h2*h4 + 2D0*D13*j0*j1 +
          D13*j1*j3 + D13*j2*j4 + D13*j3*j5 + D13*j4*j6 +
          D13*j5*j7 + D13*j6*j8)*cos(angle*n)
$\endgroup$
0
$\begingroup$

Using the value of expr from your question, you can extract the coefficient of the $\cos$ function and the constant part as follows:

coscoefficient = Coefficient[expr, Cos[angle n]];
constantpart = expr - coscoefficient * Cos[angle n];

You can check that indeed your expression expr can be reconstructed from those two parts:

constantpart + Cos[angle n]*coscoefficient == expr

(* Out: True *)

You can then reformat these two parts into Fortran format using FortranForm. In order to avoid line breaks in the converted code, you can set the PageWidth of the current output stream to Infinity as follows:

SetOptions[$Output, PageWidth -> Infinity]
FortranForm@coscoefficient

a1*D11 + a0*a1*D11 + (a1*a3*D11)/2. + (a2*a4*D11)/2. + (a3*a5*D11)/2. + (a4*a6*D11)/2. + (a5*a7*D11)/2. + (a6*a8*D11)/2. + d0*d1*D11 + b1*D12 + b0*b1*D12 + (b1*b3*D12)/2. + (b2*b4*D12)/2. + (b3*b5*D12)/2. + (b4*b6*D12)/2. + (b5*b7*D12)/2. + (b6*b8*D12)/2. + c1*D13 + c0*c1*D13 + (c1*c3*D13)/2. + (c2*c4*D13)/2. + b1*d0*D14 + d1*D14 + b0*d1*D14 + (b3*d1*D14)/2. + (b4*D14*d2)/2. + (d1*D11*d3)/2. + (b1*D14*d3)/2. + (b5*D14*d3)/2. + (b2*D14*d4)/2. + (b6*D14*d4)/2. + (D11*d2*d4)/2. + (b3*D14*d5)/2. + (b7*D14*d5)/2. + (D11*d3*d5)/2. + (b4*D14*d6)/2. + (b8*D14*d6)/2. + (D11*d4*d6)/2. + (b5*D14*d7)/2. + (D11*d5*d7)/2. + (b6*D14*d8)/2. + (D11*d6*d8)/2. + D14*e1 + a0*D14*e1 + (a3*D14*e1)/2. + (a4*D14*e2)/2. + (a1*D14*e3)/2. + (a5*D14*e3)/2. + (D12*e1*e3)/2. + (a2*D14*e4)/2. + (a6*D14*e4)/2. + (D12*e2*e4)/2. + (a3*D14*e5)/2. + (a7*D14*e5)/2. + (D12*e3*e5)/2. + (a4*D14*e6)/2. + (a8*D14*e6)/2. + (D12*e4*e6)/2. + (a5*D14*e7)/2. + (D12*e5*e7)/2. + (a6*D14*e8)/2. + (D12*e6*e8)/2. + D13*f0*f1 + (D13*f1*f3)/2. + (D13*f2*f4)/2. + (D13*f3*f5)/2. + (D13*f4*f6)/2. + (D13*f5*f7)/2. + (D13*f6*f8)/2. + D12*g0*g1 + (D12*g1*g3)/2. + (D12*g2*g4)/2. + (D12*g3*g5)/2. + (D12*g4*g6)/2. + (D12*g5*g7)/2. + (D12*g6*g8)/2. + D14*g1*h0 + D14*g0*h1 + (D14*g3*h1)/2. + D11*h0*h1 + (D14*g4*h2)/2. + (D14*g1*h3)/2. + (D14*g5*h3)/2. + (D11*h1*h3)/2. + (D14*g2*h4)/2. + (D14*g6*h4)/2. + (D11*h2*h4)/2. + D13*j0*j1 + (D13*j1*j3)/2. + (D13*j2*j4)/2. + (D13*j3*j5)/2. + (D13*j4*j6)/2. + (D13*j5*j7)/2. + (D13*j6*j8)/2.

$\endgroup$
  • $\begingroup$ After using FortranForm@coscoefficient, i do not want Hyphens (- ) in each line of expression. Thanks $\endgroup$ – Amandeep May 11 '15 at 20:46
  • $\begingroup$ @Amandeep I see. Those hyphens are introduced by FortranForm to account for line breaks, but one can avoid them by changing the page width option. I have just added that in my answer. Let me know if that works for you. $\endgroup$ – MarcoB May 12 '15 at 11:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.