/*************************************************************************************************************************************/ /* */ /* 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