/*************************************************************************************************************************************/
/* */
/* M O D E L E B I D I M E N S I O N N E L D E C O T E S A V E C E R O S I O N : */
/* */
/* */
/* Author of '$xci/CoastL_2D.11$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20011204143305). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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_____POUR_LES_Istore_Iupdate_NE_PAS_VERIFIER_LES_MULTIPLES_UTILISATIONS_DE_L_IMAGE_____IFmageR
/* Introduit le 20060124130301. */
@define PRAGMA_CL_____MODULE_NON_OPTIMISABLE
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_BASE
#include image_image_IMAGESF_EXT
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#include xci/sequence.01.I"
#define EDITER_LES_PARAMETRES_DU_NOYAU \
FAUX \
/* Faut-il editer les parametres du noyau et sortir immediatement ('VRAI') ou exploiter */ \
/* le modele d'erosion de cotes bidimensionnel ('FAUX') ? */
#define LISTER_LE_CONTENU_DU_NOYAU \
FAUX \
/* Faut-il lister le contenu du noyau ('VRAI') ou pas ('FAUX') ? */
#define GENERER_LES_CONDITIONS_INITIALES \
VRAI \
/* Doit-on generer les conditions initiales en tant que premiere image ('VRAI') ou bien */ \
/* le premier resultat du modele ('FAUX') ? */
#define IMPOSER_LES_EXTREMA_DES_CONDITIONS_INITIALES \
FAUX
#define MINIMUM_IMPOSE_POUR_LES_CONDITIONS_INITIALES \
NIVEAU_DE_LA_TERRE_DANS_Ierode__CoastLines_2D
#define MAXIMUM_IMPOSE_POUR_LES_CONDITIONS_INITIALES \
NIVEAU_DE_LA___MER_DANS_Ierode__CoastLines_2D
/* Faut-il imposer ('VRAI') ou pas ('FAUX') les extrema des conditions initiales, et si */
/* 'IL_FAUT(imposer_les_extrema_des_conditions_initiales)', valeurs implicites ? */
#define EDITER_LES_EXTREMA_DES_CONDITIONS_INITIALES \
FAUX \
/* Faut-il editer les extrema des des conditions initiales, ('VRAI') ou pas ('FAUX') ? */
#define NOMBRE_D_ITERATIONS \
UN \
/* Nombre d'iterations. */
#define ALLER_PLUTOT_D_ALTERNANCES_EN_ALTERNANCES \
FAUX \
/* Effectuer un nombre d'iterations donne a l'avance ('FAUX') ou bien aller d'alternance */ \
/* ("erosion-affaiblissement") en alternance ('VRAI') ? */
#define DECREMENTER_LE_MARQUEUR_DES_POINTS_ERODES_APRES_L_EROSION \
VRAI \
/* Pour decrementer 'Ierode__CoastLines_2D_____marqueur_des_points_erodes' apres chaque */ \
/* iteration ('VRAI') ou avant ('FAUX'). En decrementant avant, on garantit ainsi que le */ \
/* niveau de marquage de la mer est strictement superieur a celui de la cote. Ceci a ete */ \
/* introduit le 20040909133200... */
#define DECREMENT_DU_MARQUEUR_DES_POINTS_ERODES \
FZERO \
/* Decrement de 'Ierode__CoastLines_2D_____marqueur_des_points_erodes' avant ou apres */ \
/* chaque iteration... */
#define TAUX_D_AFFAIBLISSEMENT_DE_LA_DURETE_DE_LA_TERRE \
GRO5(FRA10(FRA10(FRA10(FU)))) \
/* Taux d'affaiblissement de la durete de la terre. */
#define FACTEUR_D_ANTI_CORROSITE_DE_LA_MER \
GRO5(FRA10(FU)) \
/* Facteur d'anti-corrosite de la mer. */
#define EDITER_LES_ALTERNANCES_D_EROSION_ET_D_AFFAIBLISSEMENT_DE_LA_TERRE \
FAUX \
/* Faut-il editer les alternances d'erosion et d'affaiblissement de la terre ('VRAI') ou */ \
/* pas ('FAUX') ? */
#define ALTERNER_L_EROSION_ET_L_AFFAIBLISSEMENT_DE_LA_TERRE \
FAUX \
/* Faut-il alterner l'erosion et l'affaiblissement de la terre ('VRAI') ou bien faire les */ \
/* deux en meme temps ('FAUX') ? */
#define FAIRE_EROSION_ET_AFFAIBLISSEMENT_DE_LA_TERRE_EN_CAS_D_ALTERNANCE \
FAUX \
/* Si 'IL_FAUT(alterner_l_erosion_et_l_affaiblissement_de_la_terre)' peut-on, au moment de */ \
/* l'alternance, faire simultanement de l'erosion et de l'affaiblissement de la terre */ \
/* ('VRAI') ou pas ('FAUX') ? */
#define EDITER_LA_LONGUEUR_DE_LA_COTE_COURANTE \
FAUX \
/* Faut-il editer la longueur de la cote courante ('VRAI') ou pas ('FAUX') ? */
#define NOMBRE_DE_CHIFFRES_A_EDITER \
NOMBRE_DE_CHIFFRES \
/* Nombre de chiffres a editer pour les numeros d'image. */
#define CONVERTIR_EN_IMAGES_STANDARDS \
VRAI \
/* Faut-il convertir les images Resultats en images standards ('VRAI') ou les laisser */ \
/* sous forme d'images flottantes ('FAUX') ? */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#include xci/Verhulst.01.I"
/* Introduit le 20040916111805. */
#define NOMBRE_DE_CHIFFRES_NECESSAIRES(dimension) \
ADD2(NOMBRE_DE_CHIFFRES_DECIMAUX(dimension),UN) \
/* Choix du nombre de chiffres necessaires pour editer une dimension. On notera qu'il y */ \
/* a deux 'TRPU(...)', le deuxieme etant destine au signe qui compte pour un caractere. */ \
/* */ \
/* La procedure 'NOMBRE_DE_CHIFFRES_DECIMAUX(...)' fut introduite le 20051210182403. Les */ \
/* deux 'TRPU(...)' furent donc remplaces par 'un 'ADD2(...,UN)'... */
#define DECREMENTATION_DU_MARQUEUR_DES_POINTS_ERODES(decrementer) \
Bblock \
Test(IL_FAUT(decrementer)) \
Bblock \
Test(IL_NE_FAUT_PAS(Ierode__CoastLines_2D_____marquer_les_points_erodes_avec_la_force)) \
Bblock \
DECR(Ierode__CoastLines_2D_____marqueur_des_points_erodes \
,decrement_du_marqueur_des_points_erodes \
); \
/* Gestion du marqueur des points erodes lorsqu'il est utile... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Decrementation du marqueur des points erodes. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M O D E L E B I D I M E N S I O N N E L D E C O T E S A V E C E R O S I O N : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageN),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageD),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageC),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageF),NOM_PIPE));
DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
/* Numero de la premiere image, */
DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE));
/* Numero de la derniere image. */
DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
/* Pas de passage d'un numero d'image a une autre. */
DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES));
/* Nombre de chiffres codant le numero des images de la serie... */
DEFV(Int,INIT(numero_d_image,UNDEF));
/* Numero de l'image courante. */
DEFV(Logical,INIT(editer_les_parametres_du_noyau,EDITER_LES_PARAMETRES_DU_NOYAU));
/* Faut-il editer les parametres du noyau et sortir immediatement ('VRAI') ou exploiter */
/* le modele d'erosion de cotes bidimensionnel ('FAUX') ? */
DEFV(Logical,INIT(lister_le_contenu_du_noyau,LISTER_LE_CONTENU_DU_NOYAU));
/* Faut-il lister le contenu du noyau ('VRAI') ou pas ('FAUX') ? */
DEFV(Logical,INIT(generer_les_conditions_initiales,GENERER_LES_CONDITIONS_INITIALES));
/* Doit-on generer les conditions initiales en tant que premiere image ('VRAI') ou bien */
/* le premier resultat du modele ('FAUX') ? */
DEFV(Logical,INIT(imposer_les_extrema_des_conditions_initiales,IMPOSER_LES_EXTREMA_DES_CONDITIONS_INITIALES));
DEFV(genere_Float,INIT(minimum_impose_pour_les_conditions_initiales,MINIMUM_IMPOSE_POUR_LES_CONDITIONS_INITIALES));
DEFV(genere_Float,INIT(maximum_impose_pour_les_conditions_initiales,MAXIMUM_IMPOSE_POUR_LES_CONDITIONS_INITIALES));
/* Faut-il imposer ('VRAI') ou pas ('FAUX') les extrema des conditions initiales, et si */
/* 'IL_FAUT(imposer_les_extrema_des_conditions_initiales)', valeurs implicites ? */
DEFV(Logical,INIT(editer_les_extrema_des_conditions_initiales,EDITER_LES_EXTREMA_DES_CONDITIONS_INITIALES));
/* Faut-il editer les extrema des des conditions initiales, ('VRAI') ou pas ('FAUX') ? */
DEFV(Positive,INIT(nombre_d_iterations,NOMBRE_D_ITERATIONS));
/* Nombre d'iterations. */
DEFV(Logical,INIT(aller_plutot_d_alternances_en_alternances,ALLER_PLUTOT_D_ALTERNANCES_EN_ALTERNANCES));
/* Effectuer un nombre d'iterations donne a l'avance ('FAUX') ou bien aller d'alternance */
/* ("erosion-affaiblissement") en alternance ('VRAI') ? */
DEFV(Logical,INIT(decrementer_le_marqueur_des_points_erodes_apres_l_erosion
,DECREMENTER_LE_MARQUEUR_DES_POINTS_ERODES_APRES_L_EROSION
)
);
/* Pour decrementer 'Ierode__CoastLines_2D_____marqueur_des_points_erodes' apres chaque */
/* iteration ('VRAI') ou avant ('FAUX'). En decrementant avant, on garantit ainsi que le */
/* niveau de marquage de la mer est strictement superieur a celui de la cote. Ceci a ete */
/* introduit le 20040909133200... */
DEFV(Float,INIT(decrement_du_marqueur_des_points_erodes,DECREMENT_DU_MARQUEUR_DES_POINTS_ERODES));
/* Decrement de 'Ierode__CoastLines_2D_____marqueur_des_points_erodes' avant ou apres */
/* chaque iteration... */
DEFV(Float,INIT(taux_d_affaiblissement_de_la_durete_de_la_terre,TAUX_D_AFFAIBLISSEMENT_DE_LA_DURETE_DE_LA_TERRE));
/* Taux d'affaiblissement de la durete de la terre. */
DEFV(Float,INIT(facteur_d_anti_corrosite_de_la_mer,FACTEUR_D_ANTI_CORROSITE_DE_LA_MER));
/* Facteur d'anti-corrosite de la mer. L'experience montre qu'une valeur faible (par exemple */
/* 0.1) pour l'anti-corrosite de la mer favorise l'existence d'iles et de cotes d'apparence */
/* plus tourmentees, alors qu'une valeur elevee (par exemple 0.9) favorise l'absence d'iles */
/* et produit des cotes plus "simples"... */
DEFV(Logical,INIT(editer_les_alternances_d_erosion_et_d_affaiblissement_de_la_terre
,EDITER_LES_ALTERNANCES_D_EROSION_ET_D_AFFAIBLISSEMENT_DE_LA_TERRE
)
);
/* Faut-il editer les alternances d'erosion et d'affaiblissement de la terre ('VRAI') ou */
/* pas ('FAUX') ? */
DEFV(Logical,INIT(alterner_l_erosion_et_l_affaiblissement_de_la_terre
,ALTERNER_L_EROSION_ET_L_AFFAIBLISSEMENT_DE_LA_TERRE
)
);
/* Faut-il alterner l'erosion et l'affaiblissement de la terre ('VRAI') ou bien faire les */
/* deux en meme temps ('FAUX') ? */
DEFV(Logical,INIT(faire_erosion_et_affaiblissement_de_la_terre_en_cas_d_alternance
,FAIRE_EROSION_ET_AFFAIBLISSEMENT_DE_LA_TERRE_EN_CAS_D_ALTERNANCE
)
);
/* Si 'IL_FAUT(alterner_l_erosion_et_l_affaiblissement_de_la_terre)' peut-on, au moment de */
/* l'alternance, faire simultanement de l'erosion et de l'affaiblissement de la terre */
/* ('VRAI') ou pas ('FAUX') ? */
DEFV(Logical,INIT(editer_la_longueur_de_la_cote_courante,EDITER_LA_LONGUEUR_DE_LA_COTE_COURANTE));
/* Faut-il editer la longueur de la cote courante ('VRAI') ou pas ('FAUX') ? */
DEFV(Int,INIT(nombre_de_chiffres_a_editer,NOMBRE_DE_CHIFFRES_A_EDITER));
/* Nombre de chiffres a editer pour les numeros. */
DEFV(Logical,INIT(convertir_en_images_standards,CONVERTIR_EN_IMAGES_STANDARDS));
/* Faut-il convertir les images Resultats en images standards ('VRAI') ou les laisser */
/* sous forme d'images flottantes ('FAUX') ? */
/*..............................................................................................................................*/
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
GET_ARGUMENT_C("imageN=""N=",nom_imageN);
GET_ARGUMENT_C("imageD=""D=",nom_imageD);
GET_ARGUMENT_C("imageC=""C=",nom_imageC);
GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_C("imageF=""F=",nom_imageF);
GET_ARGUMENT_I("premiere=",premiere_image);
GET_ARGUMENT_I("derniere=",derniere_image);
GET_ARGUMENT_I("pas=",pas_des_images);
GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);
GET_ARGUMENT_L("initiales=",generer_les_conditions_initiales);
GET_ARGUMENT_L("periodiser_X=""periodX=",Ierode__CoastLines_2D_____periodiser_X);
GET_ARGUMENT_L("periodiser_Y=""periodY=",Ierode__CoastLines_2D_____periodiser_Y);
GET_ARGUMENT_L("symetriser_X=""symetrX=",Ierode__CoastLines_2D_____symetriser_X);
GET_ARGUMENT_L("symetriser_Y=""symetrY=",Ierode__CoastLines_2D_____symetriser_Y);
GET_ARGUMENT_L("prolonger_X=""prolX=",Ierode__CoastLines_2D_____prolonger_X);
GET_ARGUMENT_L("prolonger_Y=""prolY=",Ierode__CoastLines_2D_____prolonger_Y);
GET_ARGUMENT_F("niveau_hors_image=""niveau=",Ierode__CoastLines_2D_____niveau_hors_image);
GET_ARGUMENT_L("imposer_extrema=""extrema=",imposer_les_extrema_des_conditions_initiales);
GET_ARGUMENT_F("minimum=",minimum_impose_pour_les_conditions_initiales);
GET_ARGUMENT_F("maximum=",maximum_impose_pour_les_conditions_initiales);
GET_ARGUMENT_L("editer_extrema=",editer_les_extrema_des_conditions_initiales);
GET_ARGUMENT_I("ni=""iterations=",nombre_d_iterations);
/* Le 20050623140540, "n=" et "N=" ont ete remplaces par "ni=" (double definition...). */
GET_ARGUMENT_L("iterations_variables=",aller_plutot_d_alternances_en_alternances);
GET_ARGUMENT_L("noyau=",Ierode__CoastLines_2D_____utiliser_un_noyau);
GET_ARGUMENT_I("demi_dimension=""dd=",Ierode__CoastLines_2D_____demi_dimension_effective_du_noyau);
GET_ARGUMENT_L("editer_noyau=",editer_les_parametres_du_noyau);
GET_ARGUMENT_L("lister_noyau=",lister_le_contenu_du_noyau);
GET_ARGUMENT_F("sX__Y=""sXY=",Ierode__CoastLines_2D_____ponderation_du_point_sX__Y);
GET_ARGUMENT_F("_X_sY=""XsY=",Ierode__CoastLines_2D_____ponderation_du_point__X_sY);
GET_ARGUMENT_F("pX__Y=""pXY=",Ierode__CoastLines_2D_____ponderation_du_point_pX__Y);
GET_ARGUMENT_F("_X_pY=""XpY=",Ierode__CoastLines_2D_____ponderation_du_point__X_pY);
GET_ARGUMENT_I("dx=""dX=",Ierode__CoastLines_2D_____delta_X);
GET_ARGUMENT_I("dy=""dY=",Ierode__CoastLines_2D_____delta_Y);
GET_ARGUMENT_L("global=",Ierode__CoastLines_2D_____utiliser_la_longueur_globale);
GET_ARGUMENT_I("ddx=""ddX="
,Ierode__CoastLines_2D_____demi_dimension_X_du_domaine_de_calcul_de_la_longueur_locale
);
GET_ARGUMENT_I("ddy=""ddY="
,Ierode__CoastLines_2D_____demi_dimension_Y_du_domaine_de_calcul_de_la_longueur_locale
);
GET_ARGUMENT_F("fad=""ad="
,Ierode__CoastLines_2D_____agrandissement_du_domaine_de_calcul_de_la_longueur_locale
);
GET_ARGUMENT_F("amplificateur=",Ierode__CoastLines_2D_____amplificateur_de_la_force);
GET_ARGUMENT_L("force_locale=",Ierode__CoastLines_2D_____la_force_depend_du_niveau_local_de_la_mer);
GET_ARGUMENT_L("marquer_force=",Ierode__CoastLines_2D_____marquer_les_points_erodes_avec_la_force);
GET_ARGUMENT_F("points_erodes=""mpe=",Ierode__CoastLines_2D_____marqueur_des_points_erodes);
GET_ARGUMENT_L("decrementer_apres=""dap=",decrementer_le_marqueur_des_points_erodes_apres_l_erosion);
GET_ARGUMENT_N("decrementer_avant=""dav=",decrementer_le_marqueur_des_points_erodes_apres_l_erosion);
GET_ARGUMENT_F("dmpe=""decrement_points_erodes=",decrement_du_marqueur_des_points_erodes);
GET_ARGUMENT_F("terre=""durete=""affaiblissement=",taux_d_affaiblissement_de_la_durete_de_la_terre);
GET_ARGUMENT_F("mer=""anti_corrosite=",facteur_d_anti_corrosite_de_la_mer);
GET_ARGUMENT_L("editer_alternances=",editer_les_alternances_d_erosion_et_d_affaiblissement_de_la_terre);
GET_ARGUMENT_L("alterner=",alterner_l_erosion_et_l_affaiblissement_de_la_terre);
GET_ARGUMENT_L("simultane=",faire_erosion_et_affaiblissement_de_la_terre_en_cas_d_alternance);
GET_ARGUMENT_I("voisinsA="
,Ierode__CoastLines_2D_____nombre_de_voisins_mer_d_un_point_terre_amorcant_l_erosion
);
GET_ARGUMENT_I("voisinsF="
,Ierode__CoastLines_2D_____nombre_minimal_de_voisins_mer_d_un_point_terre_forcant_l_erosion
);
GET_ARGUMENT_F("Fvoisins=",Ierode__CoastLines_2D_____facteur_du_nombre_d_etats_de_type___mer);
GET_ARGUMENT_F("Tvoisins=",Ierode__CoastLines_2D_____translateur_du_nombre_d_etats_de_type___mer);
GET_ARGUMENT_F("epaisseur=",Ierode__CoastLines_2D_____facteur_d_epaisseur_de_la_cote);
GET_ARGUMENT_I("points=""convolution=",Ierode__CoastLines_2D_____nombre_de_points_du_noyau_de_convolution);
GET_ARGUMENT_L("editer_longueur=",editer_la_longueur_de_la_cote_courante);
GET_ARGUMENT_I("nombre=""nc=""nchiffres=",nombre_de_chiffres_a_editer);
/* Le 20050623140540, "chiffres=" a ete remplace par "nchiffres=" (double definition...) et */
/* "n=" a ete remplace par "nc=" (double definition...). */
GET_ARGUMENT_L("convertir=",convertir_en_images_standards);
)
);
Test(IL_FAUT(alterner_l_erosion_et_l_affaiblissement_de_la_terre))
Bblock
Eblock
ATes
Bblock
Test(IL_FAUT(aller_plutot_d_alternances_en_alternances))
Bblock
PRINT_ATTENTION("la progression d'alternance en alternance ne peut avoir lieu que s'il y a bien alternance");
PRINT_ATTENTION("la progression d'alternance en alternance est donc inhibee");
EGAL(aller_plutot_d_alternances_en_alternances,FAUX);
/* Et oui, car sinon, cela bouclerait... */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ETes
Test(IL_FAUT(editer_les_parametres_du_noyau))
Bblock
CAL3(Prme4("Xmin=%d Xmax=%d Ymin=%d Ymax=%d\n"
,PINTE(Ierode__CoastLines_2D_____XYmin),PINTE(Ierode__CoastLines_2D_____XYmax)
,PINTE(Ierode__CoastLines_2D_____XYmin),PINTE(Ierode__CoastLines_2D_____XYmax)
)
);
CAL3(Prme4("XminR=%d XmaxR=%d YminR=%d YmaxR=%d\n"
,PINTE(Ierode__CoastLines_2D_____XYmin),PINTE(Ierode__CoastLines_2D_____XYmax)
,PINTE(Ierode__CoastLines_2D_____XYmin),PINTE(Ierode__CoastLines_2D_____XYmax)
)
);
CALS(Fsauts_de_lignes(UN));
CAL3(Prme4("XYmaxNe %d %d %d %d\n"
,PINTE(Ierode__CoastLines_2D_____XYmin),PINTE(Ierode__CoastLines_2D_____XYmax)
,PINTE(Ierode__CoastLines_2D_____XYmin),PINTE(Ierode__CoastLines_2D_____XYmax)
)
);
/* ATTENTION : on ne devra pas etre surpris par les valeurs ainsi obtenues. Par exemple, on */
/* obtiendra : */
/* */
/* XYmax 128 128 */
/* */
/* avec la valeur 64 pour 'DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ierode__CoastLines_2D', en */
/* se rappelant que l'on passe a 'DimNo_Ierode__CoastLines_2D' par un 'DOUP(...)'. Les */
/* extrema ainsi obtenus (128) different d'une unite de ceux fournis par 'Suq' (127) et */
/* les parites des deux dimensions respectives (129 et 128) sont elles-aussi differentes... */
/* */
/* ATTENTION : passage de 'XYmax' a 'XYmaxNe' le 20020909112359. */
/* */
/* Pour l'usage de 'PINTE(...)' voir 'v $xil/defi_K2$vv$DEF 20230311135805' qui a ete */
/* introduit pour ces impressions le 20230311143843... */
Eblock
ATes
Bblock
CALi(IFinitialisation(IFmageR,FZERO));
/* Initialisation de l'image Resultat flottante (dans tous les cas car elle est calculee */
/* meme si 'IL_FAUT(convertir_en_images_standards)'). */
Test(IL_FAUT(convertir_en_images_standards))
Bblock
CALi(Inoir(ImageR));
/* Initialisation de l'image Resultat standard si elle est utile... */
Eblock
ATes
Bblock
Eblock
ETes
Test(IFNE_chaine(nom_imageN,NOM_PIPE))
Bblock
PUSH_DIMENSIONS_2D;
SET_DIMENSIONS_2D_SANS_VALIDATION(Ierode__CoastLines_2D_____XYmin,Ierode__CoastLines_2D_____XYmax
,Ierode__CoastLines_2D_____XYmin,Ierode__CoastLines_2D_____XYmax
);
/* Le noyau va etre recupere comme une "petite" image dont les dimensions sont definies */
/* par {Ierode__CoastLines_2D_____XYmin,Ierode__CoastLines_2D_____XYmax} et ce */
/* independemment de 'Ierode__CoastLines_2D_____demi_dimension_effective_du_noyau'... */
Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(PIerode__CoastLines_2D_____noyau,nom_imageN))))
/* Chargement de l'image du noyau... */
/* */
/* ATTENTION : on notera que l'image 'nom_imageN' doit avoir comme taille la taille */
/* maximale du noyau correspondant a 'v $xiii/di_image$DEF DimNo_Ierode__CoastLines_2D', */
/* et non pas celle qui correspond a la taille effective de ce meme noyau */
/* 'v $xiii/di_image$FON Ierode__CoastLines_2D_____demi_dimension_effective_du_noyau'. */
/* */
/* ATTENTION : on notera de plus que l'on passe par 'PIerode__CoastLines_2D_____noyau' car, */
/* en effet, 'Ierode__CoastLines_2D_____noyau' n'est pas un vrai 'albumF' puisqu'il n'est */
/* cree par une allocation dynamique et variable... */
Bblock
EGAL(Ierode__CoastLines_2D_____initialiser_le_noyau,FAUX);
/* Evidemment, l'initialisation est faite... */
Test(IL_FAUT(lister_le_contenu_du_noyau))
Bblock
begin_imageQ(DoIn,Ierode__CoastLines_2D_____XYmin_effectif,Ierode__CoastLines_2D_____XYmax_effectif,PasY
,DoIn,Ierode__CoastLines_2D_____XYmin_effectif,Ierode__CoastLines_2D_____XYmax_effectif,PasX
)
Bblock
CAL3(Prme5("noyau(%+0*d,%+0*d)=%+.^^^\n"
,NOMBRE_DE_CHIFFRES_NECESSAIRES(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ierode__CoastLines_2D),X
,NOMBRE_DE_CHIFFRES_NECESSAIRES(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ierode__CoastLines_2D),Y
,ACCES_NOYAU_DANS_Ierode__CoastLines_2D(X,Y)
)
);
/* Le 20060105153507, le format "16g" est passe a "^^g" pour plus de souplesse... */
/* */
/* Le 20091123123046, le format "^^g" est passe a "^^^" pour plus de souplesse... */
Eblock
end_imageQ(EDoI,EDoI)
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
INITIALISATION_EVENTUELLE_DU_NOYAU_DANS_Ierode__CoastLines_2D;
/* Initialisation du noyau en cas d'erreur... */
Eblock
ETes
PULL_DIMENSIONS_2D;
/* Restauration des dimensions de travail... */
Eblock
ATes
Bblock
Eblock
ETes
LOAD_D_UNE_IMAGE_FLOTTANTE_DE_PARAMETRAGE(IFmageA1
,nom_imageD
,taux_d_affaiblissement_de_la_durete_de_la_terre
,"taux d'affaiblissement global de durete"
);
LOAD_D_UNE_IMAGE_FLOTTANTE_DE_PARAMETRAGE(IFmageA3
,nom_imageC
,facteur_d_anti_corrosite_de_la_mer
,"facteur global de corrosite"
);
Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(IFmageA,nom_imageA))))
Bblock
DEFV(Logical,INIT(c_est_la_premiere_iteration,VRAI));
/* Afin de pouvoir faire la difference entre la premiere iteration et les suivantes... */
DEFV(genere_Float,INIT(niveau_minimum_de_IFmageA,minimum_impose_pour_les_conditions_initiales));
DEFV(genere_Float,INIT(niveau_maximum_de_IFmageA,maximum_impose_pour_les_conditions_initiales));
/* Extrema du champ initial ('IFmageA'). */
Test(IL_NE_FAUT_PAS(imposer_les_extrema_des_conditions_initiales))
Bblock
CALS(IFnivo_extrema(IFmageA
,ADRESSE(niveau_minimum_de_IFmageA)
,ADRESSE(niveau_maximum_de_IFmageA)
)
);
/* Recherche des extrema de 'IFmageA'. */
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(editer_les_extrema_des_conditions_initiales))
Bblock
CAL3(Prme1("minimum des conditions initiales=%+.^^^\n",niveau_minimum_de_IFmageA));
CAL3(Prme1("maximum des conditions initiales=%+.^^^\n",niveau_maximum_de_IFmageA));
/* Edition des extrema de 'IFmageA'. */
/* */
/* Le 20060105153507, le format "16g" est passe a "^^g" pour plus de souplesse... */
/* */
/* Le 20091123123046, le format "^^g" est passe a "^^^" pour plus de souplesse... */
Eblock
ATes
Bblock
Eblock
ETes
EGAL(Ierode__CoastLines_2D_____niveau_de_la___mer,niveau_maximum_de_IFmageA);
EGAL(Ierode__CoastLines_2D_____niveau_de_la_terre,niveau_minimum_de_IFmageA);
/* Mise a jour du modele... */
Test(IL_NE_FAUT_PAS(Ierode__CoastLines_2D_____marquer_les_points_erodes_avec_la_force))
Bblock
Test(IFOU(SONT_DE_MEME_SIGNE(NEUT(Ierode__CoastLines_2D_____marqueur_des_points_erodes)
,Ierode__CoastLines_2D_____niveau_de_la_terre
)
,SONT_DE_MEME_SIGNE(SOUS(Ierode__CoastLines_2D_____marqueur_des_points_erodes
,MUL2(PRED(MUL2(NBRE(premiere_image,derniere_image),nombre_d_iterations))
,decrement_du_marqueur_des_points_erodes
)
)
,Ierode__CoastLines_2D_____niveau_de_la_terre
)
)
)
Bblock
PRINT_ATTENTION("il va y avoir confusion entre le marqueur des points erodes et le niveau de la terre");
CAL3(Prme1("niveau de la terre................=%+.^^^\n",Ierode__CoastLines_2D_____niveau_de_la_terre));
/* Le 20060105153507, le format "16g" est passe a "^^g" pour plus de souplesse... */
/* */
/* Le 20091123123046, le format "^^g" est passe a "^^^" pour plus de souplesse... */
CAL3(Prme1("nombre total d'iterations.........=%d\n"
,MUL2(NBRE(premiere_image,derniere_image),nombre_d_iterations)
)
);
CAL3(Prme1("marqueur initial des points erodes=%+.^^^\n"
,NEUT(Ierode__CoastLines_2D_____marqueur_des_points_erodes)
)
);
/* Le 20060105153507, le format "16g" est passe a "^^g" pour plus de souplesse... */
/* */
/* Le 20091123123046, le format "^^g" est passe a "^^^" pour plus de souplesse... */
CAL3(Prme1("marqueur final des points erodes..=%+.^^^\n"
,SOUS(Ierode__CoastLines_2D_____marqueur_des_points_erodes
,MUL2(PRED(MUL2(NBRE(premiere_image,derniere_image),nombre_d_iterations))
,decrement_du_marqueur_des_points_erodes
)
)
)
);
/* Le 20060105153507, le format "16g" est passe a "^^g" pour plus de souplesse... */
/* */
/* Le 20091123123046, le format "^^g" est passe a "^^^" pour plus de souplesse... */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images)
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imagesR),NOM_PIPE));
Test(IFET(IL_FAUT(generer_les_conditions_initiales),IFEQ(numero_d_image,premiere_image)))
Bblock
CALS(IFmove(IFmageR,IFmageA));
Eblock
ATes
Bblock
DEFV(Logical,INIT(iterer_l_erosion,VRAI));
/* Le 20020213104540 l'iteration de l'erosion est devenue un 'Tant(...)' a la place d'un */
/* 'Repe(...)' pour permettre un nombre variable d'iterations... */
DEFV(Int,INIT(compteur_des_iterations_d_erosion,PREMIERE_ITERATION_D_UN_Repe));
/* Afin de simuler un 'Repe(...)' a nombre variable d'iterations... */
Tant(IL_FAUT(iterer_l_erosion))
Bblock
Test(IFOU(EST_VRAI(c_est_la_premiere_iteration)
,IFET(EST_FAUX(c_est_la_premiere_iteration)
,IZGT(Ierode__CoastLines_2D_____longueur_de_la_cote_courante)
)
)
)
Bblock
DEFV(Float,INIT(taux_d_affaiblissement_de_la_durete_de_la_terre_effectif
,taux_d_affaiblissement_de_la_durete_de_la_terre
)
);
DEFV(Float,INIT(facteur_d_anti_corrosite_de_la_mer_effectif
,facteur_d_anti_corrosite_de_la_mer
)
);
/* Parametres respectifs de la "terre" et de la "mer" effectivement utilises... */
DEFV(Logical,INIT(acceder_eventuellement_a_nom_imageD,VRAI));
DEFV(Logical,INIT(acceder_eventuellement_a_nom_imageC,VRAI));
/* A priori, il est licite d'acceder aux images 'nom_imageD' et 'nom_imageC' (si elles */
/* existent...). */
Test(IL_FAUT(alterner_l_erosion_et_l_affaiblissement_de_la_terre))
Bblock
Test(EST_VRAI(c_est_la_premiere_iteration))
Bblock
EGAL(taux_d_affaiblissement_de_la_durete_de_la_terre_effectif,FZERO);
/* Dans le cas de la premiere iteration, il est evidemment impossible de tester */
/* 'Ierode__CoastLines_2D_____nombre_de_points_erodes_a_l_iteration_courante'. */
/* La terre ne doit alors pas etre affaiblie... */
EGAL(acceder_eventuellement_a_nom_imageD,FAUX);
/* Il est alors illicite d'acceder a l'image 'nom_imageD'... */
Eblock
ATes
Bblock
Test(IZEQ(Ierode__CoastLines_2D_____nombre_de_points_erodes_a_l_iteration_courante))
Bblock
/* Cas ou la mer n'a erode aucun point de la terre : la terre va etre affaiblie, avec ou */
/* pas erosion par la mer simultanement... */
Test(IL_FAUT(editer_les_alternances_d_erosion_et_d_affaiblissement_de_la_terre))
Bblock
CAL3(Prme3("iteration %d de l'image %0*d : "
,compteur_des_iterations_d_erosion
,nombre_de_chiffres_a_editer
,numero_d_image
)
);
CALS(FPrme0("alternance 'erosion-affaiblissement'\n"));
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(faire_erosion_et_affaiblissement_de_la_terre_en_cas_d_alternance))
Bblock
/* Erosion simultanee par la mer... */
Eblock
ATes
Bblock
EGAL(facteur_d_anti_corrosite_de_la_mer_effectif,FZERO);
/* Pas d'erosion simultanee par la mer... */
EGAL(acceder_eventuellement_a_nom_imageC,FAUX);
/* Il est alors illicite d'acceder a l'image 'nom_imageC'... */
Eblock
ETes
Test(IL_FAUT(aller_plutot_d_alternances_en_alternances))
Bblock
EGAL(iterer_l_erosion,FAUX);
/* Le nombre d'iterations est variable et limite par l'alternance "erosion-affaiblissement". */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
/* Cas ou la mer a erode au moins un point de la terre : */
EGAL(taux_d_affaiblissement_de_la_durete_de_la_terre_effectif,FZERO);
/* La terre ne subit alors pas d'affaiblissement, mais uniquement de l'erosion... */
EGAL(acceder_eventuellement_a_nom_imageD,FAUX);
/* Il est alors illicite d'acceder a l'image 'nom_imageD'... */
Eblock
ETes
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
Test(IFET(EST_VRAI(acceder_eventuellement_a_nom_imageD),IFNE_chaine(nom_imageD,NOM_PIPE)))
Bblock
CALi(IFmove(IFmageA2,IFmageA1));
/* Recuperation de 'nom_imageD' lorsque cela est licite et possible... */
Eblock
ATes
Bblock
CALi(IFinitialisation(IFmageA2,taux_d_affaiblissement_de_la_durete_de_la_terre_effectif));
/* Initialisation du taux d'affaiblissement de la durete de la terre a priori... */
Eblock
ETes
Test(IFET(EST_VRAI(acceder_eventuellement_a_nom_imageC),IFNE_chaine(nom_imageC,NOM_PIPE)))
Bblock
CALi(IFmove(IFmageA4,IFmageA3));
/* Recuperation de 'nom_imageC' lorsque cela est licite et possible... */
Eblock
ATes
Bblock
CALi(IFinitialisation(IFmageA4,facteur_d_anti_corrosite_de_la_mer_effectif));
/* Initialisation du facteur d'anti-corrosite de la mer a priori... */
Eblock
ETes
Test(IL_FAUT(editer_la_longueur_de_la_cote_courante))
Bblock
CAL3(Prme3("iteration %d de l'image %0*d : "
,compteur_des_iterations_d_erosion
,nombre_de_chiffres_a_editer
,numero_d_image
)
);
Eblock
ATes
Bblock
Eblock
ETes
#define decrementer_apres_l_erosion \
decrementer_le_marqueur_des_points_erodes_apres_l_erosion \
/* Pour raccourcir certaines lignes qui suivent... */
DECREMENTATION_DU_MARQUEUR_DES_POINTS_ERODES(NOTL(decrementer_apres_l_erosion));
CALS(Ierode__CoastLines_2D_a_taux_facteur_locaux(IFmageR
,IFmageA
,Ierode__CoastLines_2D_____imageA_convoluee_initiale
,IFmageA2
,IFmageA4
,editer_la_longueur_de_la_cote_courante
)
);
/* Et calcul de la generation suivante, avec : */
/* */
/* taux_d_affaiblissement_de_la_durete_de_la_terre = IFmageA2 (= IFmageA1), */
/* facteur_d_anti_corrosite_de_la_mer = IFmageA4 (= IFmageA3). */
/* */
CALS(IFmove(IFmageA,IFmageR));
/* Preparation de l'iteration suivante... */
DECREMENTATION_DU_MARQUEUR_DES_POINTS_ERODES(NEUL(decrementer_apres_l_erosion));
#undef decrementer_apres_l_erosion
Eblock
ATes
Bblock
Eblock
ETes
Test(EST_VRAI(c_est_la_premiere_iteration))
Bblock
EGAL(c_est_la_premiere_iteration,FAUX);
/* Pour les iterations suivantes... */
Eblock
ATes
Bblock
Eblock
ETes
INCR(compteur_des_iterations_d_erosion,I);
/* Simulation du 'Repe(...)' d'erosion... */
Test(IFET(IL_NE_FAUT_PAS(aller_plutot_d_alternances_en_alternances)
,IFGT(compteur_des_iterations_d_erosion,nombre_d_iterations)
)
)
Bblock
EGAL(iterer_l_erosion,FAUX);
/* On a fait le nombre d'iterations demandees... */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ETan
Eblock
ETes
EGAL(nom_imagesR
,chain_Aconcaten2_sauf_nom_pipe(nom_imageR
,chain_numero(numero_d_image,nombre_de_chiffres)
)
);
Test(IL_FAUT(convertir_en_images_standards))
Bblock
CALS(Ifloat_std_avec_le_vrai_zero(ImageR,IFmageR,niveau_minimum_de_IFmageA,niveau_maximum_de_IFmageA));
/* Renormalisation avec forcage des extrema en utilisant ceux de l'image initiale 'IFmageA'. */
/* ATTENTION, jusqu'au 20020108124607, c'etait 'Ifloat_std(...)' qui etait utilise, ce qui */
/* n'etait pas tres logique puisqu'il est important de conserver le zero... */
CALi(Iupdate_image(nom_imagesR,ImageR));
Eblock
ATes
Bblock
CALi(IupdateF_image(nom_imagesR,IFmageR));
Eblock
ETes
CALZ_FreCC(nom_imagesR);
Eblock
EDoI
Test(IFET(IFNE_chaine(nom_imageF,NOM_PIPE),IL_FAUT(convertir_en_images_standards)))
Bblock
CALi(IupdateF_image(nom_imageF,IFmageR));
/* Dans le cas ou la sortie est du type "image standard", la possibilite est offerte de */
/* generer les conditions Finales en mode "non standard" afin qu'elles puissent servir */
/* eventuellement de conditions initiales dans un autre calcul... */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
Eblock
ETes
Eblock
ETes
RETU_Commande;
Eblock
ECommande