package org.spaceroots.rkcheck;

import java.util.TreeSet;
import java.util.Iterator;

/**
 * This application computes the order conditions of Runge-Kutta
 * methods.
 * @version $Id: ComputeOrderConditions.java,v 1.4 2004/05/23 19:41:19 luc Exp $
 * @author L. Maisonobe

 */

public class ComputeOrderConditions {

  /** Entry point of the application.
   * @param args application arguments
   */
  public static void main(String[] args) {

    try {

      int     maxOrder              = -1;
      boolean outputTeXEquations    = false;
      boolean outputMaximaEquations = false;
      boolean interpolatorCondition = false;
      for (int i = 0; i < args.length; ++i) {
        if (args[i].equals("-h")) {
          usage(0);
        } else if (args[i].equals("-t")) {
          outputTeXEquations    = true;
          outputMaximaEquations = false;
        } else if (args[i].equals("-m")) {
          outputTeXEquations    = false;
          outputMaximaEquations = true;
        } else if (args[i].equals("-i")) {
          interpolatorCondition = true;
        } else {
          maxOrder = Integer.parseInt(args[i]);
        }
      }

      if (maxOrder < 0) {
        usage(1);
      }

      DerivationTreesSetGenerator generator = new DerivationTreesSetGenerator();

      if (outputTeXEquations) {
        System.out.println("\\documentclass[a4paper,10pt,leqno]{article}");
        System.out.println("\\usepackage{amsmath}");
        System.out.println("\\numberwithin{equation}{section}");
        System.out.println("\\addtolength{\\oddsidemargin}{-70pt}");
        System.out.println("\\addtolength{\\marginparwidth}{-60pt}");
        System.out.println("\\addtolength{\\textwidth}{160pt}");
        System.out.println("\\begin{document}");
        System.out.println("\\tableofcontents");
        System.out.println("\\section*{homogeneity conditions ($s-1$ equations)}");
        System.out.println("\\begin{equation*}");
        System.out.println("\\sum_{j=1}^{j=s}a_{i,j} = c_{i}");
        System.out.println("\\end{equation*}");
        for (int i = 1; i <= maxOrder; ++i) {
          TreeSet set = generator.getTreesSet(i);
          System.out.println();
          System.out.print("\\section{conditions for order " + i);
          if (set.size() == 1) {
            System.out.print(" (1 equation)");
          } else {
            System.out.print(" (" + set.size() + " equations)");
          }
          System.out.println("}");
          for (Iterator iter = set.iterator(); iter.hasNext();) {
            System.out.println("\\begin{equation}");
            DerivationTree dt = (DerivationTree) iter.next();
            System.out.println(dt.orderConditionAsTeXString(interpolatorCondition));
            System.out.println("\\end{equation}");
          }
        }
        System.out.println("\\end{document}");
      } else if (outputMaximaEquations) {
        for (int i = 1; i <= maxOrder; ++i) {
          System.out.println();
          System.out.println("/* trees for order " + i + " */");
          TreeSet set = generator.getTreesSet(i);
          int j = 1;
          for (Iterator iter = set.iterator(); iter.hasNext(); ++j) {
            DerivationTree dt = (DerivationTree) iter.next();
            System.out.println("condEqn[" + i + "," + j + "] : "
                               + dt.orderConditionAsMaximaString(interpolatorCondition)
                               + ";");
          }
        }
      } else {
        for (int i = 1; i <= maxOrder; ++i) {
          System.out.println();
          System.out.println("trees for order " + i);
          TreeSet set = generator.getTreesSet(i);
          for (Iterator iter = set.iterator(); iter.hasNext();) {
            DerivationTree dt = (DerivationTree) iter.next();
            System.out.println(" " + dt);
          }
        }
      }

    } catch (NumberFormatException e) {
      System.err.println("unable to parse number " + e.getMessage());
      System.exit(1);
    }
  }

  /** Display usage and exit.
   * @param exit exit code
   */
  private static void usage(int exit) {
    System.out.println("usage: java ComputeOrderConditions [-h] [-t|-m] [-i] maxOrder");
    System.exit(exit);
  }

}

 

Ads help maintain this website.