ETHZ_Logo RAMSES_Logo_Right   RAMSES   RAMSES_Logo_Left Systems Ecology  
Start    search button      Modules:   A-Z   Function   Layer        QuickRefs:   DM   AuxLib   AuxLibE   SciLib   EasyMW   MW   ISIS   RMSLib

DEFINITION MODULE ComplexLib;

  (*******************************************************************

    Module  ComplexLib     (Version 0.5)

      Copyright (c) 1987-2006 by Alex Itten and ETH Zurich.

    Purpose   Basic operations on complex variables using
              extended reals (SANE).

    Remarks   There exist two implementations of this module
              (Definition and Implementation). The present version
              uses the SANE type Extended showing higher precision and
              better convergence of the used Newton-Horner algorithm.
              The alternative implementation uses the standard
              type REAL and is about 10 times faster.


    Programming

      o Design
        Alex Itten                22/05/1987

      o Implementation
        Alex Itten                22/05/1987


    ETH Zurich
    Systems Ecology
    CHN E 35.1
    Universitaetstrasse 16
    8092 Zurich
    SWITZERLAND

    URLs:
        <mailto:RAMSES@env.ethz.ch>
        <http://www.sysecol.ethz.ch>
        <http://www.sysecol.ethz.ch/SimSoftware/RAMSES>


    Last revision of definition:  22/05/1987  AI

  *******************************************************************)


  FROM ExtMathLib  IMPORT EXTREAL;

  TYPE Complex      = RECORD              (* extended Type for intermediate *)
                        re,im  : EXTREAL; (* results (80 Bit REAL) *)
                      END;

  VAR (* The following variables are only read-omly variables ! use them only
          as constants and for assignments *)

      one,                   (*  re:1. ; im:0. ); *)
      zero,                  (*  re:0. ; im:0. ); *)
      imagUnit: Complex;     (*  re:0. ; im:1. ); *)

  (* If you use consequently the following two procedures SetCom and
     GetCom you will achieve to be independant from the implementation of
     the type Complex (imaginary and real part of type REAL or EXTREAL). So it
     will be possible to use either the MacMETH compiler 1.0 or 2.0 without
     be forced to change the source code *)

  PROCEDURE SetCom( VAR z: Complex; re,im: REAL);
   (* Sets the real and imaginary part of an complex variable c to
      the specified values. *)

  PROCEDURE GetCom(z: Complex; VAR re,im: REAL);
   (* Get the real and imaginary part of an complex variable c.
      Use This procedure also to convert between ComplexLib.Complex and
      ComplexLib.Complex if you need them both *)

  (* basic operations on the type Complex *)

  PROCEDURE PolToKart(betr,phi: REAL; VAR z:Complex);
   (* Conversion of a Complex variable from the polar to the cartesian
   description. *)

  PROCEDURE KartToPol(z:Complex; VAR betr,phi: REAL);
   (* Conversion of a Complex variable from the cartesian to the polar
   description. *)

  PROCEDURE MultCom(a,b: Complex;VAR z : Complex);
   (* MultCom(a,b,c)       : c := a * b *)

  PROCEDURE  DivCom(a,b: Complex;VAR z : Complex);
   (* DivCom(a,b,c)        : c := a / b *)

  PROCEDURE  AddCom(a,b: Complex;VAR z : Complex);
   (* AddCom(a,b,c)        : c := a + b *)

  PROCEDURE  SubCom(a,b: Complex;VAR z : Complex);
   (* SubCom(a,b,c)        : c := a - b *)

  PROCEDURE  NegCom(VAR z : Complex);
   (* NegCom(z)        : z := -z        *)

  PROCEDURE  ExpCom(VAR z : Complex);
   (* ExpCom(z)        : z := Exp(z)    *)

  PROCEDURE  SkalCom(VAR z: Complex; r: REAL);
   (* SkalCom(c,r: REAL)   : c := c * r *)

  PROCEDURE RandomCom(VAR z:Complex);
   (* generates a random complex number.
      not yet implemented! *)

  PROCEDURE SetToZero(VAR z:Complex);
   (* sets the complex variable a to:
    re  = 0.0
    im  = 0.0 *)

END ComplexLib.

  Contact RAMSES@env.ethz.ch Last updated: 25-Jul-2011 [Top of page]