## TAMC man page

tamc - TAMC Tangent linear and Adjoint Model Compiler## SYNOPSIS

tamc [OPTIONS] <files>## DESCRIPTION

TAMCis a source to source translator for Fortran-77 pro- grams. It constructs code to compute derivatives in the forward and reverse mode. The input must correspond to the ANSI FORTRAN-77 standard. Some FORTRAN-90 extensions are already implemented (DO ENDDO, WHERE). Old style Fortran statements (assigned goto, arithmetic if, computed goto) will not be accepted. The GOTO command will be accepted but a warning will be given if it occurs inside an active routine, because in this case the adjoint code cannot be constructed. Other restriction are due to the simple scanner and parser.## OPTIONS

All switches are turned on by the option and turned off by the option having a no in front. -help A short description about the options is given.-l<file>This option sets the name of a listing file on which TAMC will write flow information about each routine (default no listing). -u Set all variables undefined by default. -i2 Make integers be two bytes by default -i4 Make integers be four bytes by default -i8 Make integers be eight bytes by default -r4 Make reals be four bytes by default -r8 Make reals be eight bytes by default -e Accept extended source lines, up to 132 characters long.-N<col>Specifies the line width, in columns. -U Distinguish between upper and lower case letters. -V Print version and date Specifies the maximal number of errors being docu- mented.-toplevel<name>Define the name of the subroutine to be differenti- ated (top level routine). If the name is MODEL or FUNC all arguments of it will also be arguments of the adjoint subroutine ADMODEL. This ensures a preliminary known argument list of MODEL (used by tamlink).-input<names>Define the independent variables (blank separated list of names, given as a string). If this option is missing all arguments of the top level routine are assumed to be independent. The dependent vari- ables are differentiated with respect to the inde- pendent variables.-output<names>Define the dependent variables (blank separated list of names, given as a string). If this option is missing all arguments of the top level routine are assumed to be dependent. The corresponding adjoint variables are NOT initialized, because they contain the vector, which is multiplied by the jacobian matrix. -reverse Contruct code to compute derivatives in the reverse mode. -adjoint This option is a synonym for -reverse. -forward Contruct code to compute derivatives in forward mode. The code computes the dependent variables and the derivatives of the independent variables (tangent linear adn function code). -pure By default, the adjoint top level routine computes the dependent variables and the derivatives. Using this option, the adjoint code computes derivatives only. If tapes are used, they must be written pre- viously by a call of the modified top-level rou- tine.-jacobian<int>Per default TAMC generates code, which computes the product of the Jacobian with one vector from the left (-adjoint, -reverse, reverse mode) or the the reverse mode is used and this number is set to the number of dependent variables the full Jacobian will be computed. Using the forward mode and sup- plying the number of independent variables, the full Jacobian will be computed. In both cases the derivative variables must be initialized according to the identity matrix. -append Append index of extra dimension instead of prepend- ing it. -ldg Add leading dimension arguments. -arglist If set all arguments of the given toplevel routine will be arguments of the adjoint toplevel routine. Thus, the argument list does not depend on the required variables of the adjoint code. This option is on for toplevel routines MODEL and FUNC.-unit<int>Lowest unit numbers used for direct access I/O to store and restore variables. If -nokeepopen is given this unit number will be used for every file. -closetapes If an tape is implemented by a file, the file will only be opened once an closed onced. If this option is given the file will be opened before every read/write and closed afterwards. This saves buffer memory, but may be slower. -split Expressions are split into unary and binary opera- tions before adjoint code is generated. Using this options common subexpressions are avoided by intro- ducing auxiliary variables. -depend A data dependence analysis is applied by default. It detects loop carried data depen- dencies and categories the loops. Adjoint code is then generated accordingly. Switching off this analysis will result in unnecessary recomputations.-auxmark<mark>Whenever auxiliary variables are introduced, there names consist of an existing name and this mark (default 'h'). The mark is always appended to the name. The names of adjoint variables, common blocks, and routines consist of the original name and this mark. The default setting 'ad' means, the adjoint variable to the variable x will be adx.-modmark<mark>The names of modified subroutines consist of the original name and this mark. The default setting 'md' means, the modified subroutine SUB will get the name MDSUB.-ftlmark<mark>The names of tangent linear variables, common blocks, and routines consist of the original name and this mark. The default setting 'g_' means, the tangent linear variable to the variable x will be g_x. -postfix The mark of derivative variables leads the original name by default. If set, the mark will be appended. Eg the adjoint variable of x will be xad. -f90 Read and write Fortran-90 extensions to Fortran-77. This option enables -vector, -doendo, -dowhile, and -dynamic. In addition instead of the BLAS1 subrou- tine SSUM (DSUM) the intrinsic Fortran-90 function SUM is used in the adjoint code. -hpf Reads and writes High Performance Fortran. This options also enables Fortran-90 extensions (-f90). Right now only INDEPENDENT, DISTRIBUTION, and SHADOW directives are handled. -fixed All input files are in fixed format independent of their extension. -free All input files are in Fortran-90 free format. By default only files with extension .f90 or .F90 are read in free format. This option also enables For- tran-90 extensions (-f90). -dynamic If the Fortran compiler supports dynamic arrays TAMC may generate local arrays with dimensions given as arguments. -vector Generate Fortran-90 array assignments. -doendo Generate Fortran-90 DO ENDDO statements. Generate Fortran-90 DO WHILE ENDDO statements. -ivdep Write CDIR$ IVDEP directives (default off). -direc Directives readable by TAMC are written to the specified file. -info If this option is turned off information will no longer be given. -warning If this option is turned of warnings will be sup- pressed. -warn_step If an condition depends on the independent vari- ables directly or indirectly, the mapping to the dependent variables may be non differentiable. Please note, intrinsic function ABS, MIN, MAX will not be noticed yet.## DIRECTIVES

Directives may be placed in the source code. They all start with CADJ in the first 4 rows. Thus a standard For- tran compiler will accept them as a comment.CADJSUBROUTINE<name>ADNAME=identSet the name of the corresponding adjoint subrou- tine. CADJ SUBROUTINE <name> MODNAME = ident Set the name of a modified subroutine. CADJ SUBROUTINE <name> FTLNAME = ident Set the name of the corresponding tangent linear subroutine. CADJ SUBROUTINE <name> INPUT = <ints> CADJ SUBROUTINE <name> OUTPUT = <ints> CADJ SUBROUTINE <name> ACTIVE = <ints> CADJ SUBROUTINE <name> DEPEND = <ints> Set the flow of an subroutine not given to TAMC. This is useful to specify the flow of library rou- tines. The arguments referenced by the routine are specified by the keyword INPUT. Arguments computed by the routine are specified by the keyword OUTPUT. If the routine has an corresponding adjoint, then ACTIVE defines the active arguments and DEPEND CADJ SUBROUTINE <name> COMMON <cname> INPUT = <ints> CADJ SUBROUTINE <name> COMMON <cname> OUTPUT = <ints> CADJ SUBROUTINE <name> COMMON <cname> ACTIVE = <ints> CADJ SUBROUTINE <name> COMMON <cname> DEPEND = <ints> The flow information through common block can be specified by these directives. Their meaning is similar to those given above. CADJ INIT <tape> = <string> Defines a tape on disk. For every variable stored on this tape a direct access file will be created. Note, the string is used as the first part of file names created. CADJ INIT <tape> = MEMORY Defines a tape implemented as dynamic memory. CADJ INIT <tape> = COMMON, <const_int_expr> Defines a tape implemented by common blocks. The constant integer expression <const_int_expr> defines the maximal number of records for one vari- able stored on that tape. This number is used to define the dimension of a common block variable holding the stored values. If the number is to small unpredictable runtime errors might occur. CADJ STORE <vars> = <tape> [, KEY = <expr>] [, BYTE = <int>] This directive defines the place where the vari- able(s) should be stored during function computa- tion. Code will be generated to store and restore the variable using the specified tape. Recomputa- tions start at the tape initialization. The list of variables <vars> must be separated by commas. Computing the key of a record may be time consuming if a call to the subroutine getkey is generated. You can define your own key algorithm by using the KEY keyword, where <expr> is the expression to be used as key. Please note, in this case it is up to you to guarantee an unambiguous key. The BYTE extension can be used to define the preci- sion (4 or 8) to be used for storing. Currently this influences only variables stored on common blocks. CADJ LOOP = PARALLEL cuted in parallel, insert the directive in front of the loop. The TAMC will construct adjoint code under the assumption of non existing dependencies. The generated adjoint loop will computes the adjoint kernel in the original order. CADJ LOOP = ITERATION <vars> Alternative adjoint code will be generated by TAMC for loops doing an iteration to solve an equation for variables <vars> (comma separated list). By inserting the directive, the TAMC assumes the equa- tion is solved exactly with respect to machine pre- cision. The generated adjoint loop is also an iteration, it solves the corresponding adjoint equations. The advantage of the alternative adjoint code is, that no variables must be stored. At the moment the code is only correct for linear equations.## FILES

if -reverse or -adjoint is given <file>_ad.f adjoint and modified code if -forward is given <file>_ftl.f function and tangent linear code## LIBRARIES

libtamc.a TAMC library## SEE ALSO

tamlink(1)R. Giering: "TAMC users manual", Max-Planck-Institut fuer Meteorologie, Hamburg R. Giering, T. Kaminski: "Recipes for Adjoint Code Con- struction", Max-Planck-Institut fuer Meteorologie, Ham- burg, Report No. 212, 1996. R. Giering: "AMC: Ein Werkzeug zum automatischen Differen- zieren von Fortran Programmen", Forschung und wis- senschaftliches Rechnen, GWDG-Bericht Nr. 42, 1996, Goet- tingen. R. Giering, T. Kaminski: "Recipes for Adjoint Code Con- struction", ACM transaction on Mathematical Software, Vol- ume 24, Number 4, Pages 437-474, 1998## AUTHOR

Man(1) output converted with man2html