/[MITgcm]/manual/s_autodiff/text/doc_ad_2.tex
ViewVC logotype

Diff of /manual/s_autodiff/text/doc_ad_2.tex

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.15 by heimbach, Wed Apr 24 11:01:46 2002 UTC revision 1.18 by heimbach, Mon Aug 1 22:31:36 2005 UTC
# Line 1  Line 1 
1  % $Header$  % $Header$
2  % $Name$  % $Name$
3    
4    Author: Patrick Heimbach
5    
6  {\sf Automatic differentiation} (AD), also referred to as algorithmic  {\sf Automatic differentiation} (AD), also referred to as algorithmic
7  (or, more loosely, computational) differentiation, involves  (or, more loosely, computational) differentiation, involves
8  automatically deriving code to calculate  automatically deriving code to calculate
# Line 42  Jacobian matrices of the forward code's Line 44  Jacobian matrices of the forward code's
44  %**********************************************************************  %**********************************************************************
45  \section{Some basic algebra}  \section{Some basic algebra}
46  \label{sec_ad_algebra}  \label{sec_ad_algebra}
47    \begin{rawhtml}
48    <!-- CMIREDIR:sec_ad_algebra: -->
49    \end{rawhtml}
50  %**********************************************************************  %**********************************************************************
51    
52  Let $ \cal{M} $ be a general nonlinear, model, i.e. a  Let $ \cal{M} $ be a general nonlinear, model, i.e. a
# Line 676  Schematic view of intermediate dump and Line 681  Schematic view of intermediate dump and
681  %**********************************************************************  %**********************************************************************
682  \section{TLM and ADM generation in general}  \section{TLM and ADM generation in general}
683  \label{sec_ad_setup_gen}  \label{sec_ad_setup_gen}
684    \begin{rawhtml}
685    <!-- CMIREDIR:sec_ad_setup_gen: -->
686    \end{rawhtml}
687  %**********************************************************************  %**********************************************************************
688    
689  In this section we describe in a general fashion  In this section we describe in a general fashion
690  the parts of the code that are relevant for automatic  the parts of the code that are relevant for automatic
691  differentiation using the software tool TAMC.  differentiation using the software tool TAF.
692    
693  \input{part5/doc_ad_the_model}  \input{part5/doc_ad_the_model}
694    
695  The basic flow is depicted in \ref{fig:adthemodel}.  The basic flow is depicted in \ref{fig:adthemodel}.
696  If the option {\tt ALLOW\_AUTODIFF\_TAMC} is defined, the driver routine  If CPP option {\tt ALLOW\_AUTODIFF\_TAMC} is defined, the driver routine
697  {\it the\_model\_main}, instead of calling {\it the\_main\_loop},  {\it the\_model\_main}, instead of calling {\it the\_main\_loop},
698  invokes the adjoint of this routine, {\it adthe\_main\_loop},  invokes the adjoint of this routine, {\it adthe\_main\_loop},
699  which is the toplevel routine in terms of reverse mode computation.  which is the toplevel routine in terms of automatic differentiation.
700  The routine {\it adthe\_main\_loop} has been generated by TAMC.  The routine {\it adthe\_main\_loop} has been generated by TAF.
701  It contains both the forward integration of the full model,  It contains both the forward integration of the full model, the
702    cost function calculation,
703  any additional storing that is required for efficient checkpointing,  any additional storing that is required for efficient checkpointing,
704  and the reverse integration of the adjoint model.  and the reverse integration of the adjoint model.
705  The structure of {\it adthe\_main\_loop} has been strongly  
706  simplified for clarification; in particular, no checkpointing  [DESCRIBE IN A SEPARATE SECTION THE WORKING OF THE TLM]
707    
708    In Fig. \ref{fig:adthemodel}
709    the structure of {\it adthe\_main\_loop} has been strongly
710    simplified to focus on the essentials; in particular, no checkpointing
711  procedures are shown here.  procedures are shown here.
712  Prior to the call of {\it adthe\_main\_loop}, the routine  Prior to the call of {\it adthe\_main\_loop}, the routine
713  {\it ctrl\_unpack} is invoked to unpack the control vector  {\it ctrl\_unpack} is invoked to unpack the control vector
# Line 709  the driver routine {\it grdchk\_main} is Line 722  the driver routine {\it grdchk\_main} is
722  the gradient has been computed via the adjoint  the gradient has been computed via the adjoint
723  (cf. Section \ref{section_grdchk}).  (cf. Section \ref{section_grdchk}).
724    
725    %------------------------------------------------------------------
726    
727    \subsection{General setup
728    \label{section_ad_setup}}
729    
730    In order to configure AD-related setups the following packages need
731    to be enabled:
732    {\it
733    \begin{table}[h!]
734    \begin{tabular}{l}
735    autodiff \\
736    ctrl \\
737    cost \\
738    grdchk \\
739    \end{tabular}
740    \end{table}
741    }
742    The packages are enabled by adding them to your experiment-specific
743    configuration file
744    {\it packages.conf} (see Section ???).
745    
746    The following AD-specific CPP option files need to be customized:
747    %
748    \begin{itemize}
749    %
750    \item {\it ECCO\_CPPOPTIONS.h} \\
751    This header file collects CPP options for the packages
752    {\it autodiff, cost, ctrl} as well as AD-unrelated options for
753    the external forcing package {\it exf}.
754    \footnote{NOTE: These options are not set in their package-specific
755    headers such as {\it COST\_CPPOPTIONS.h}, but are instead collected
756    in the single header file {\it ECCO\_CPPOPTIONS.h}.
757    The package-specific header files serve as simple
758    placeholders at this point.}
759    %
760    \item {\it tamc.h} \\
761    This header configures the splitting of the time stepping loop
762    w.r.t. the 3-level checkpointing (see section ???).
763    
764    %
765    \end{itemize}
766    
767    %------------------------------------------------------------------
768    
769    \subsection{Building the AD code
770    \label{section_ad_build}}
771    
772    The build process of an AD code is very similar to building
773    the forward model. However, depending on which AD code one wishes
774    to generate, and on which AD tool is available (TAF or TAMC),
775    the following {\tt make} targets are available:
776    
777    \begin{table}[h!]
778    {\footnotesize
779    \begin{tabular}{ccll}
780    ~ & {\it AD-target} & {\it output} & {\it description} \\
781    \hline
782    \hline
783    (1) & {\tt <MODE><TOOL>only} & {\tt <MODE>\_<TOOL>\_output.f}  &
784    generates code for $<$MODE$>$ using $<$TOOL$>$ \\
785    ~ & ~ & ~ & no {\tt make} dependencies on {\tt .F .h} \\
786    ~ & ~ & ~ & useful for compiling on remote platforms \\
787    \hline
788    (2) & {\tt <MODE><TOOL>} & {\tt <MODE>\_<TOOL>\_output.f}  &
789    generates code for $<$MODE$>$ using $<$TOOL$>$ \\
790    ~ & ~ & ~ & includes {\tt make} dependencies on {\tt .F .h} \\
791    ~ & ~ & ~ & i.e. input for $<$TOOL$>$ may be re-generated \\
792    \hline
793    (3) & {\tt <MODE>all} & {\tt mitgcmuv\_<MODE>}  &
794    generates code for $<$MODE$>$ using $<$TOOL$>$ \\
795    ~ & ~ & ~ & and compiles all code \\
796    ~ & ~ & ~ & (use of TAF is set as default) \\
797    \hline
798    \hline
799    \end{tabular}
800    }
801    \end{table}
802    %
803    Here, the following placeholders are used
804    %
805    \begin{itemize}
806    %
807    \item [$<$TOOL$>$]
808    %
809    \begin{itemize}
810    %
811    \item {\tt TAF}
812    \item {\tt TAMC}
813    %
814    \end{itemize}
815    %
816    \item [$<$MODE$>$]
817    %
818    \begin{itemize}
819    %
820    \item {\tt ad} generates the adjoint model (ADM)
821    \item {\tt ftl} generates the tangent linear model (TLM)
822    \item {\tt svd} generates both ADM and TLM for \\
823    singular value decomposition (SVD) type calculations
824    %
825    \end{itemize}
826    %
827    \end{itemize}
828    
829    For example, to generate the adjoint model using TAF after routines ({\tt .F})
830    or headers ({\tt .h}) have been modified, but without compilation,
831    type {\tt make adtaf};
832    or, to generate the tangent linear model using TAMC without
833    re-generating the input code, type {\tt make ftltamconly}.
834    
835    
836    A typical full build process to generate the ADM via TAF would
837    look like follows:
838    \begin{verbatim}
839    % mkdir build
840    % cd build
841    % ../../../tools/genmake2 -mods=../code_ad
842    % make depend
843    % make adall
844    \end{verbatim}
845    
846    %------------------------------------------------------------------
847    
848    \subsection{The AD build process in detail
849    \label{section_ad_build_detail}}
850    
851    The {\tt make <MODE>all} target consists of the following procedures:
852    
853    \begin{enumerate}
854    %
855    \item
856    A header file {\tt AD\_CONFIG.h} is generated which contains a CPP option
857    on which code ought to be generated. Depending on the {\tt make} target,
858    the contents is
859    \begin{itemize}
860    \item
861    {\tt \#define ALLOW\_ADJOINT\_RUN}
862    \item
863    {\tt \#define ALLOW\_TANGENTLINEAR\_RUN}
864    \item
865    {\tt \#define ALLOW\_ECCO\_OPTIMIZATION}
866    \end{itemize}
867    %
868    \item
869    A single file {\tt <MODE>\_input\_code.f} is concatenated
870    consisting of all {\tt .f} files that are part of the list {\bf AD\_FILES}
871    and all {\tt .flow} files that are part of the list {\bf AD\_FLOW\_FILES}.
872    %
873    \item
874    The AD tool is invoked with the {\bf <MODE>\_<TOOL>\_FLAGS}.
875    The default AD tool flags in {\tt genmake2} can be overrwritten by
876    an {\tt adjoint\_options} file (similar to the platform-specific
877    {\tt build\_options}, see Section ???.
878    The AD tool writes the resulting AD code into the file
879    {\tt <MODE>\_input\_code\_ad.f}
880    %
881    \item
882    A short sed script {\tt adjoint\_sed} is applied to
883    {\tt <MODE>\_input\_code\_ad.f}
884    to reinstate {\bf myThid} into the CALL argument list of active file I/O.
885    The result is written to file {\tt <MODE>\_<TOOL>\_output.f}.
886    %
887    \item
888    All routines are compiled and an executable is generated
889    (see Table ???).
890    %
891    \end{enumerate}
892    
893    \subsubsection{The list AD\_FILES and {\tt .list} files}
894    
895    Not all routines are presented to the AD tool.
896    Routines typically hidden are diagnostics routines which
897    do not influence the cost function, but may create
898    artificial flow dependencies such as I/O of active variables.
899    
900    {\tt genmake2} generates a list (or variable) {\bf AD\_FILES}
901    which contains all routines that are shown to the AD tool.
902    This list is put together from all files with suffix {\tt .list}
903    that {\tt genmake2} finds in its search directories.
904    The list file for the core MITgcm routines is in {\tt model/src/}
905    is called {\tt model\_ad\_diff.list}.
906    Note that no wrapper routine is shown to TAF. These are either
907    not visible at all to the AD code, or hand-written AD code
908    is available (see next section).
909    
910    Each package directory contains its package-specific
911    list file {\tt <PKG>\_ad\_diff.list}. For example,
912    {\tt pkg/ptracers/} contains the file {\tt ptracers\_ad\_diff.list}.
913    Thus, enabling a package will automatically extend the
914    {\bf AD\_FILES} list of {\tt genmake2} to incorporate the
915    package-specific routines.
916    Note that you will need to regenerate the {\tt Makefile} if
917    you enable a package (e.g. by adding it to {\tt packages.conf})
918    and a {\tt Makefile} already exists.
919    
920    \subsubsection{The list AD\_FLOW\_FILES and {\tt .flow} files}
921    
922    TAMC and TAF can evaluate user-specified directives
923    that start with a specific syntax ({\tt CADJ}, {\tt C\$TAF}, {\tt !\$TAF}).
924    The main categories of directives are STORE directives and
925    FLOW directives. Here, we are concerned with flow directives,
926    store directives are treated elsewhere.
927    
928    Flow directives enable the AD tool to evaluate how it should treat
929    routines that are 'hidden' by the user, i.e. routines which are
930    not contained in the {\bf AD\_FILES} list (see previous section),
931    but which are called in part of the code that the AD tool does see.
932    The flow directive tell the AD tool
933    %
934    \begin{itemize}
935    %
936    \item which subroutine arguments are input/output
937    \item which subroutine arguments are active
938    \item which subroutine arguments are required to compute the cost
939    \item which subroutine arguments are dependent
940    %
941    \end{itemize}
942    %
943    The syntax for the flow directives can be found in the
944    AD tool manuals.
945    
946    {\tt genmake2} generates a list (or variable) {\bf AD\_FLOW\_FILES}
947    which contains all files with suffix{\tt .flow} that it finds
948    in its search directories.
949    The flow directives for the core MITgcm routines of
950    {\tt eesupp/src/} and {\tt model/src/}
951    reside in {\tt pkg/autodiff/}.
952    This directory also contains hand-written adjoint code
953    for the MITgcm WRAPPER (see Section ???).
954    
955    Flow directives for package-specific routines are contained in
956    the corresponding package directories in the file
957    {\tt <PKG>\_ad.flow}, e.g. ptracers-specific directives are in
958    {\tt ptracers\_ad.flow}.
959    
960    \subsubsection{Store directives for 3-level checkpointing}
961    
962    The storing that is required at each period of the
963    3-level checkpointing is controled by three
964    top-level headers.
965    
966    \begin{verbatim}
967    do ilev_3 = 1, nchklev_3
968    #  include ``checkpoint_lev3.h''
969       do ilev_2 = 1, nchklev_2
970    #     include ``checkpoint_lev2.h''
971          do ilev_1 = 1, nchklev_1
972    #        include ``checkpoint_lev1.h''
973    
974    ...
975    
976          end do
977       end do
978    end do
979    \end{verbatim}
980    
981    All files {\tt checkpoint\_lev?.h} are contained in directory
982    {\tt pkg/autodiff/}.
983    
984    
985    \subsubsection{Changing the default AD tool flags: ad\_options files}
986    
987    
988    \subsubsection{Hand-written adjoint code}
989    
990    %------------------------------------------------------------------
991    
992  \subsection{The cost function (dependent variable)  \subsection{The cost function (dependent variable)
993  \label{section_cost}}  \label{section_cost}}
994    
# Line 726  in the next section. Line 1006  in the next section.
1006    
1007  \input{part5/doc_cost_flow}  \input{part5/doc_cost_flow}
1008    
1009  \subsubsection{genmake and CPP options}  \subsubsection{Enabling the package}
1010  %  
 \begin{itemize}  
 %  
 \item  
1011  \fbox{  \fbox{
1012  \begin{minipage}{12cm}  \begin{minipage}{12cm}
1013  {\it genmake}, {\it CPP\_OPTIONS.h}, {\it ECCO\_CPPOPTIONS.h}  {\it packages.conf}, {\it ECCO\_CPPOPTIONS.h}
1014  \end{minipage}  \end{minipage}
1015  }  }
1016  \end{itemize}  \begin{itemize}
 %  
 The directory {\it pkg/cost} can be included to the  
 compile list in 3 different ways (cf. Section \ref{???}):  
1017  %  %
1018  \begin{enumerate}  \item
1019    The package is enabled by adding {\it cost} to your file {\it packages.conf}
1020    (see Section ???)
1021  %  %
1022  \item {\it genmake}: \\  \item
1023  Change the default settings in the file {\it genmake} by adding  
1024  {\bf cost} to the {\bf enable} list (not recommended).  
1025  %  \end{itemize}
 \item {\it .genmakerc}: \\  
 Customize the settings of {\bf enable}, {\bf disable} which are  
 appropriate for your experiment in the file {\it .genmakerc}  
 and add the file to your compile directory.  
 %  
 \item genmake-options: \\  
 Call {\it genmake} with the option  
 {\tt genmake -enable=cost}.  
1026  %  %
1027  \end{enumerate}  
1028  N.B.: In general the following packages ought to be enabled  N.B.: In general the following packages ought to be enabled
1029  simultaneously: {\it autodiff, cost, ctrl}.  simultaneously: {\it autodiff, cost, ctrl}.
1030  The basic CPP option to enable the cost function is {\bf ALLOW\_COST}.  The basic CPP option to enable the cost function is {\bf ALLOW\_COST}.

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.18

  ViewVC Help
Powered by ViewVC 1.1.22