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

  ViewVC Help
Powered by ViewVC 1.1.22