/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   C E R T A I N E S   D E R I V E E S   F O R M E L L E S   A   L ' O R D R E   N  :             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Ce fichier '$I' contient a son niveau                                                                          */
/*                  un certain nombre de derivees d'operateur.                                                                       */
/*                  Il est traite directement par 'v $xcc/cpp$Z'                                                                     */
/*                  via 'v $xcp/DerivFormel$K .xcp.DerivFormel.I'.                                                                   */
/*                  De cette facon la derivation de ces operateurs                                                                   */
/*                  peut se faire car, en effet, ces dernieres se                                                                    */
/*                  trouvent au niveau le plus bas des 'include's                                                                    */
/*                  ('v $xcc/cpp$Z 20101213093204').                                                                                 */
/*                                                                                                                                   */
/*                    On notera un avantage important a cette facon                                                                  */
/*                  de proceder : les operateurs ainsi definis peuvent                                                               */
/*                  etre l'objet du 'GooF', ce qui ne serait pas possible                                                            */
/*                  autrement...                                                                                                     */
/*                                                                                                                                   */
/*                    Ce fichier '$I' est traite comme un '$K' (par                                                                  */
/*                  'v $xcc/cpp$Z'), mais etant donne qu'il sert                                                                     */
/*                  d'intermediaire pour generer lui-meme des '$I's,                                                                 */
/*                  c'est ainsi qu'il fut baptise...                                                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xcp/DerivFormel$I' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 20101221135750).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I R E C T I V E S   S P E C I F I Q U E S   D E   C O M P I L A T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
@define   PRAGMA_CPP_____MODULE_DERIVABLE
                                        /* Essentiel pour acceder a 'v $xcc/cpp$Z DordreN'...                                        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
@define   PRAGMA_CPP_____DEFINE_AU_PREALABLE                "NoGeneration_____maths_defen_DerivFormel_1_DEF"
                                        /* Introduit le 20161213215500 et transforme en un 'PRAGMA' le 20161214125944 car, en effet, */
                                        /* la formulation :                                                                          */
                                        /*                                                                                           */
                                        /*                  #define   NoGeneration_____maths_defen_DerivFormel_1_DEF                 */
                                        /*                                                                                           */
                                        /* etait ignoree dans 'v $xcc/cpp$Z'...                                                      */
#include  INCLUDES_MINI
                                        /* Le 20161218105902, 'INCLUDES_MINI' a remplace 'INCLUDES_BASE' car, en effet, cela suffit  */
                                        /* et de plus cela resoud le probleme 'v $xcc/cpp$Z 20161217101315'...                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S   " U N I V E R S E L L E S "  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

                                        /* Ces definitions sont placees en '$PASSE_2' : en fait cela est relativement arbitraire     */
                                        /* a la condition que cela ne soit pas '$PASSE_1'. La conversion en '$PASSE_1' est faite     */
                                        /* explicitement par 'v $xcc/cpp$Z 20101221144436'...                                        */

                                        /* Le 20101223203957 je note que les noms ne peuvent etre 'd_MACRO(...)' ou 'MACRO(...)'     */
                                        /* est celui d'un operateur a deriver car, en effet, il y a conflit avec le derivateur       */
                                        /* formel de 'v $xcc/cpp$Z'. Ainsi un nom tel 'D_MACRO(...)' sera parfait ou mieux, le       */
                                        /* 20110105092947 'd1_MACRO(...)' fut adopte pour "Derivee Premiere -1-".                    */

=define   d1_INTERPOLATION_CUBIQUE(Forg,d_Forg,DForg,d_DForg,Fext,d_Fext,DFext,d_DFext,lambda,d_lambda)                                 \
                    %d#INTERPOLATION_CUBIQUE(Forg,DForg                                                                                 \
                                            ,Fext,DFext                                                                                 \
                                            ,lambda                                                                                     \
                                             )%
                                        /* Derivee a l'ordre 1 de 'INTERPOLATION_CUBIQUE(...)'.                                      */
                                        /*                                                                                           */
                                        /* Le 20101223172434 fut introduit le couple {%,%} ('v $xcp/TabRecursive$K K_POUR_CENT')     */
                                        /* afin de faciliter la tabulation du code genere...                                         */
                                        /*                                                                                           */
                                        /* La "qualite" de l'operateur 'd1_INTERPOLATION_CUBIQUE(...)' peut etre validee grace au    */
                                        /* programme 'v $xtc/DerivFormel.01$c'...                                                    */

=define   d1_ADD2(x,d_x,y,d_y)                                                                                                          \
                    %d#ADD2(x,y)%
=define   d2_ADD2(x,d_x,d_d_x,y,d_y,d_d_y)                                                                                              \
                    %d#d#ADD2(x,y)%
                                        /* Somme de deux facteurs "simples" (c'est-a-dire des variables et non pas des               */
                                        /* expressions...). Ceci fut introduit le 20161216102525 (surtout a des fins de test...).    */
                                        /*                                                                                           */
                                        /* Le 20161217102804, je me demande si les arguments {d_x,d_y} sont utiles...                */

=define   d1_ADD3(x,d_x,y,d_y,z,d_z)                                                                                                    \
                    %d#ADD3(x,y,z)%
=define   d2_ADD3(x,d_x,d_d_x,y,d_y,d_d_y,z,d_z,d_d_z)                                                                                  \
                    %d#d#ADD3(x,y,z)%
                                        /* Somme de trois facteurs "simples" (c'est-a-dire des variables et non pas des              */
                                        /* expressions...). Ceci fut introduit le 20161216102525 (surtout a des fins de test...).    */
                                        /*                                                                                           */
                                        /* Le 20161217102804, je me demande si les arguments {d_x,d_y,d_z} sont utiles...            */

=define   d1_ADD4(x,d_x,y,d_y,z,d_z,t,d_t)                                                                                              \
                    %d#ADD4(x,y,z,t)%
=define   d2_ADD4(x,d_x,d_d_x,y,d_y,d_d_y,z,d_z,d_d_z,t,d_t,d_d_t)                                                                      \
                    %d#d#ADD4(x,y,z,t)%
                                        /* Somme de quatre facteurs "simples" (c'est-a-dire des variables et non pas des             */
                                        /* expressions...). Ceci fut introduit le 20161216102525 (surtout a des fins de test...).    */
                                        /*                                                                                           */
                                        /* Le 20161217102804, je me demande si les arguments {d_x,d_y,d_z,d_t} sont utiles...        */

=define   d1_MUL2(x,d_x,y,d_y)                                                                                                          \
                    %d#MUL2(x,y)%
=define   d2_MUL2(x,d_x,d_d_x,y,d_y,d_d_y)                                                                                              \
                    %d#d#MUL2(x,y)%
                                        /* Produit de deux facteurs "simples" (c'est-a-dire des variables et non pas des             */
                                        /* expressions...). Ceci fut introduit le 20161216102525 (surtout a des fins de test...).    */
                                        /*                                                                                           */
                                        /* Le 20161217102804, je me demande si les arguments {d_x,d_y} sont utiles...                */

=define   d1_MUL3(x,d_x,y,d_y,z,d_z)                                                                                                    \
                    %d#MUL3(x,y,z)%
=define   d2_MUL3(x,d_x,d_d_x,y,d_y,d_d_y,z,d_z,d_d_z)                                                                                  \
                    %d#d#MUL3(x,y,z)%
                                        /* Produit de trois facteurs "simples" (c'est-a-dire des variables et non pas des            */
                                        /* expressions...). Ceci fut introduit le 20101228191219 (surtout a des fins de test...)     */
                                        /* et complete le 20110105095023 avec la derivee seconde.                                    */
                                        /*                                                                                           */
                                        /* Le 20161217102804, je me demande si les arguments {d_x,d_y,d_z} sont utiles...            */

=define   d1_MUL4(x,d_x,y,d_y,z,d_z,t,d_t)                                                                                              \
                    %d#MUL4(x,y,z,t)%
=define   d2_MUL4(x,d_x,d_d_x,y,d_y,d_d_y,z,d_z,d_d_z,t,d_t,d_d_t)                                                                      \
                    %d#d#MUL4(x,y,z,t)%
                                        /* Produit de quatre facteurs "simples" (c'est-a-dire des variables et non pas des           */
                                        /* expressions...). Ceci fut introduit le 20101228191219 (surtout a des fins de test...)     */
                                        /* et complete le 20110105095023 avec la derivee seconde.                                    */

                                        /* Ces definitions sont placees en '$PASSE_2' : en fait cela est relativement arbitraire     */
                                        /* a la condition que cela ne soit pas '$PASSE_1'. La conversion en '$PASSE_1' est faite     */
                                        /* explicitement par 'v $xcc/cpp$Z 20101221144436'...                                        */

                                        /* Le 20101223203957 je note que les noms ne peuvent etre 'd_MACRO(...)' ou 'MACRO(...)'     */
                                        /* est celui d'un operateur a deriver car, en effet, il y a conflit avec le derivateur       */
                                        /* formel de 'v $xcc/cpp$Z'. Ainsi un nom tel 'D_MACRO(...)' sera parfait ou mieux, le       */
                                        /* 20110105092947 'd1_MACRO(...)' fut adopte pour "Derivee Premiere -1-".                    */

                                        /* On notera le 20161207161106 que j'ai essaye de mettre ici :                               */
                                        /*                                                                                           */
                                        /*                  -define   OPERATEUR(x,y)                                              \  */
                                        /*                            EXP2(ADD2(x,y))                                                */
                                        /*                  =define   d1_OPERATEUR(x,d_x,y,d_y)                                   \  */
                                        /*                            %d#OPERATEUR(x,y)%                                             */
                                        /*                                                                                           */
                                        /* (le 'EXP2(ADD2(x,y))' etant tout a fait arbitraire)                                       */
                                        /*                                                                                           */
                                        /* mais cela ne marche pas a cause de 'v $xcc/cpp$Z $CA.......$module$W.$fichierA'           */
                                        /* execute en 'passe E' car, en effet, alors le '-define   OPERATEUR(' se retrouve deux      */
                                        /* fois dans le resultat ('$module$w') de la concatenation par le '$CA' ci-dessus, alors     */
                                        /* que, par exemple, '-define   INTERPOLATION_CUBIQUE(' ne s'y retrouve qu'une seule fois    */
                                        /* puisqu'il est defini a l'exterieur de '$fichierA'...                                      */
                                        /*                                                                                           */
                                        /* Le 20161217102804, je me demande si les arguments {d_x,d_y,d_z,d_t} sont utiles...        */

=define   d1_ADD2_MUL2(condition,x,d_x,y,d_y)                                                                                           \
                    %OPC2(condition,d#ADD2,d#MUL2,x,y)%
=define   d2_ADD2_MUL2(condition,x,d_x,d_d_x,y,d_y,d_d_y)                                                                               \
                    %OPC2(condition,d#d#ADD2,d#d#MUL2,x,y)%
                                        /* Derivee introduite le 20161216102525 pour voir ce qu'il se passe avec les 'OPC?(...)'...  */
                                        /*                                                                                           */
                                        /* Le 20161217102804, je me demande si les arguments {d_x,d_y} sont utiles...                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S   " S P E C I F I Q U E S "  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrs/huit.11.1.I"
                                        /* Definition de l'equation de la courbe en "8" dans le plan {OX,OY} destinee a              */
                                        /* 'v $xrs/huit.11$K' (introduit le 20161207094703).                                         */

=define   d1_XPlan_xrs_huit_11(u,v)                                                                                                     \
                    %d#XPlan_xrs_huit_11(u,v)%
=define   d1_YPlan_xrs_huit_11(u,v)                                                                                                     \
                    %d#YPlan_xrs_huit_11(u,v)%
                                        /* Definition des deux derivees (introduit le 20161207094703).                               */
                                        /*                                                                                           */
                                        /* Le 20161208100302, afin d'etre homogene avec le nom de leurs derivees, 'XPlan(u,v)' et    */
                                        /* 'YPlan(u,v)' ont ete rebaptises 'XPlan_xrs_huit_11(u,v)' et 'YPlan_xrs_huit_11(u,v)'      */
                                        /* respectivement...                                                                         */

#include  xrs/cylindre.31.1.I"
                                        /* Definition de l'equation de l'helice destinee a 'v $xrs/cylindre.31$K' (introduit         */
                                        /* le 20170130125404).                                                                       */

=define   d1_XEspace_xrs_cylindre_31(u,v)                                                                                               \
                    %d#XEspace_xrs_cylindre_31(u,v)%
=define   d1_YEspace_xrs_cylindre_31(u,v)                                                                                               \
                    %d#YEspace_xrs_cylindre_31(u,v)%
=define   d1_ZEspace_xrs_cylindre_31(u,v)                                                                                               \
                    %d#ZEspace_xrs_cylindre_31(u,v)%
                                        /* Definition des trois derivees (introduit le 20170130125404).                              */

#include  xrs/epicycloide.11.1.I"
                                        /* Definition de l'equation de la courbe "epycycloidale" dans le plan {OX,OY} destinee a     */
                                        /* 'v $xrs/epicycloide.11$K' (introduit le 20161212104641).                                  */

=define   d1_XPlan_xrs_epicycloide_11(u,v)                                                                                              \
                    %d#XPlan_xrs_epicycloide_11(u,v)%
=define   d1_YPlan_xrs_epicycloide_11(u,v)                                                                                              \
                    %d#YPlan_xrs_epicycloide_11(u,v)%
                                        /* Definition des deux derivees (introduit le 20161212104641).                               */

#include  xrs/helicoide.11.1.I"
                                        /* Definition de l'equation de l'helice destinee a 'v $xrs/helicoide.11$K' (introduit        */
                                        /* le 20161226101433).                                                                       */

=define   d1_XEspace_xrs_helicoide_11(u,v)                                                                                              \
                    %d#XEspace_xrs_helicoide_11(u,v)%
=define   d1_YEspace_xrs_helicoide_11(u,v)                                                                                              \
                    %d#YEspace_xrs_helicoide_11(u,v)%
=define   d1_ZEspace_xrs_helicoide_11(u,v)                                                                                              \
                    %d#ZEspace_xrs_helicoide_11(u,v)%
                                        /* Definition des trois derivees (introduit le 20161226101433).                              */

#include  xrs/epicycloide.21.1.I"
                                        /* Definition de l'equation de la courbe "epycycloidale" dans l'espace {OX,OY,OZ} destinee a */
                                        /* 'v $xrs/epicycloide.21$K' (introduit le 20161230093222).                                  */

=define   d1_XEspace_xrs_epicycloide_21(u,v)                                                                                            \
                    %d#XEspace_xrs_epicycloide_21(u,v)%
=define   d1_YEspace_xrs_epicycloide_21(u,v)                                                                                            \
                    %d#YEspace_xrs_epicycloide_21(u,v)%
=define   d1_ZEspace_xrs_epicycloide_21(u,v)                                                                                            \
                    %d#ZEspace_xrs_epicycloide_21(u,v)%
                                        /* Definition des trois derivees (introduit le 20161230093222).                              */

#include  xrs/epicycloide.31.1.I"
                                        /* Definition de l'equation de la courbe "epycycloidale" dans l'espace {OX,OY,OZ} destinee a */
                                        /* 'v $xrs/epicycloide.31$K' (introduit le 20170110130649).                                  */

=define   d1_XEspace_xrs_epicycloide_31(u,v)                                                                                            \
                    %d#XEspace_xrs_epicycloide_31(u,v)%
=define   d1_YEspace_xrs_epicycloide_31(u,v)                                                                                            \
                    %d#YEspace_xrs_epicycloide_31(u,v)%
=define   d1_ZEspace_xrs_epicycloide_31(u,v)                                                                                            \
                    %d#ZEspace_xrs_epicycloide_31(u,v)%
                                        /* Definition des trois derivees (introduit le 20170110130649).                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   C E R T A I N E S   D E R I V E E S   F O R M E L L E S   A   L ' O R D R E   N  :             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.