$$$$ HBM_POST * HBM_POST PROCEDUR BP208322 16/09/01 21:15:04 9010 * ************************************************************************ * CREATION : 09/07/2015 * * OBJET : - Traduit la table de resultats frequentiels fournis par * CONTINU en resultats temporels * * ENTREE : * * TABHBM = TABLE * * . 'N_HARMONIQUE' = nombre d'harmoniques * . 'RESULTATS' . i . 'POINT_MESURE' = resultats attendus * . 'COMPOSANTES' exprimé sur ddl temporel * . 'COULEUR' * . 'TITRE' * . 'INDICES_HBM' = liste des indices j associé au * i^eme resultat * . 'RESULTATS_HBM' . j . 'POINT_MESURE' = resultats attendus * . 'COMPOSANTES' exprimé sur ddl frequentiel * . 'COULEUR' * . 'TITRE' * * * SORTIE : * * TABHBM * . 'RESULTATS' . i . 'RESULTATS' = evolution X(w) * * TABHBM * . 'RESULTATS' . i . 'RESULTATS_TEMPORELS' . iw = evolution x(t/T) * . 'RESULTATS' . i . 'RESULTATS_TEMPORELS' . -iw = evolution 1/w * dx/dt(t/T * * *********************************************************************** DEBPROC HBM_POST TABHBM*'TABLE' LMOT1/'LISTMOTS'; ************************************************************************ * * * RECUPERATION DES DONNEES D'ENTREE + VALEURS PAR DEFAUT * * * ************************************************************************ * table des resultats temporels SI (NON (EXIS TABHBM 'RESULTATS')); MESS 'Il manque les RESULTATS'; erre 21; SINON; TRES1 = TABHBM . 'RESULTATS'; FINSI; * table des resultats frequentiels SI (NON (EXIS TABHBM 'RESULTATS_HBM')); MESS 'Il manque les RESULTATS_HBM'; erre 21; SINON; TRES2 = TABHBM . 'RESULTATS_HBM'; FINSI; * type des resultats temporels a calculer SI (NON (EXIS LMOT1)); LMOT1 = MOTS 'MAXI'; FINSI; FLMAXI = EXIS LMOT1 'MAXI'; FLTEMP = EXIS LMOT1 'TEMP'; FLVITE = EXIS LMOT1 'VITE'; * si recuperation des resultats temporels, lesquels ? SI FLTEMP; SI (exis TABHBM 'PAS_SAUVES'); SI (ega (TYPE TABHBM . 'PAS_SAUVES') 'ENTIER'); ISAUV = TABHBM . 'PAS_SAUVES'; SINON; si (ega TABHBM . 'PAS_SAUVES' 'TOUS'); ISAUV = 1; finsi; si (ega TABHBM . 'PAS_SAUVES' 'AUCUN'); ISAUV = NPAS; finsi; FINSI; SINON; ISAUV = 10; FINSI; FINSI; SI (NON (EXIS TABHBM 'N_HARMONIQUE')); MESS 'Il manque le nombre d harmonique N_HARMONIQUE'; erre 21; SINON; nhbm = TABHBM . 'N_HARMONIQUE'; FINSI; SI (NON (EXIS TABHBM 'TEMPS_PROG')); MESS 'Il manque TEMPS_PROG !'; erre 21; SINON; wprog = TABHBM . 'TEMPS_PROG'; FINSI; * discretisation temporelle a adopter SI (NON (EXIS TABHBM 'N_PT_POST')); * on considère qu'il faut nbp=2**7=128 pour la plus petite harmonique ! nbp = 2**7; n_pt = nbp * nhbm; TABHBM . 'N_PT_POST' = n_pt; SINON; n_pt = TABHBM . 'N_PT_POST'; FINSI; ************************************************************************ * * * PREPARATION DES FONCTIONS DU TEMPS * * * ************************************************************************ * discretisation temporelle : tamp = prog 0. PAS (360. / n_pt) 360.; tadim = (1./360.) * tamp; namp = dime tamp; * creation d'une table des fonctions temporelles : TTPROG = tabl; TTPROG . 't/T' = tadim; * harmonique 0 : { ... 1 ... } ihbm = 1; TTPROG . ihbm = prog namp*1; repe BHBM nhbm; * harmonique k : ktamp = &BHBM * tamp; * harmonique k : { ... cos kwt_i ... } ihbm = ihbm + 1; TTPROG . ihbm = cos ktamp; * harmonique k : { ... sin kwt_i ... } ihbm = ihbm + 1; TTPROG . ihbm = sin ktamp; fin BHBM; * on ainsi construit : * TTPROG . 1 = { ... 1 ...} * . 2*k = { ... cos kwt ...} * . 2*k+1 = { ... sin kwt ...} * pour k = 1 ... nhbm * creation d'une table des derivees des fonctions temporelles : si FLVITE; TTVITE = tabl; TTVITE . 't/T' = tadim; * harmonique 0 : ihbm = 1; TTVITE . ihbm = prog namp*0; repe BHBM nhbm; * harmonique k : ktamp = &BHBM * tamp; ihbm = ihbm + 1; TTVITE . ihbm = -1.* &BHBM * (sin ktamp); ihbm = ihbm + 1; TTVITE . ihbm = &BHBM * (cos ktamp); fin BHBM; * on ainsi construit : * TTVITE . 1 = { ... 0 ...} * . 2*k = { ... -k sin kwt ...} * . 2*k+1 = { ... k cos kwt ...} * pour k = 1 ... nhbm * rem : on n'a pas multiplié par kw mais seulement par k * --> ce qui signifie qu'on sort 1/w dx/dt quote = (EXTR (CHAI '''') 1 1); finsi; * preparation des resultats SI (NON (EXIS TRES1 'RESULTATS')); TRES1 . 'RESULTATS' = TABL; FINSI; evtot = VIDE 'EVOLUTIO'; ************************************************************************ * * * BOUCLE SUR LES RESULTATS * * * ************************************************************************ ires1 = 0; nres1 = DIME TRES1; REPE BRES1 nres1; ires1 = ires1 + 1; * Le resultat existe t'il ? SI (NON (EXIS TRES1 ires1)); ITER BRES1; FINSI; coul1 = TRES1 . ires1 . 'COULEUR'; tit1 = TRES1 . ires1 . 'TITRE'; SI FLTEMP; TRES1 . ires1 . 'RESULTATS_TEMPORELS' = TABL; FINSI; * BOUCLE sur les frequences d'excitation ******************************* SI FLMAXI; umaxp = prog; FINSI; nfreq = dime wprog; ifreq = 0; REPE BFFREQ nfreq; ifreq = ifreq + 1; * BOUCLE sur les indices de la table frequentielle ******************* SI (NON (EXIS TRES1 . ires1 'INDICES_HBM')); MESS 'INDICES_HBM absent pour le 'ires1'ème résultat demandé !'; ERRE 21; FINSI; n_HBM = DIME TRES1 . ires1 . 'INDICES_HBM'; * harmonique 0 : ihbm = 1; jres2 = EXTR TRES1 . ires1 . 'INDICES_HBM' ihbm; uval1 = EXTR TRES2 . jres2 . 'RESULTATS' ifreq; * on cree la listreel uval1p= prog uval1 ; * harmonique k : repe BHBM nhbm; * cos kwt ihbm = ihbm + 1; jres2c = EXTR TRES1 . ires1 . 'INDICES_HBM' ihbm; uval1c = EXTR TRES2 . jres2c . 'RESULTATS' ifreq; * sin kwt ihbm = ihbm + 1; jres2s = EXTR TRES1 . ires1 . 'INDICES_HBM' ihbm; uval1s = EXTR TRES2 . jres2s . 'RESULTATS' ifreq; * on met dans la listreel uval1p = uval1p et uval1c et uval1s; fin BHBM; * COmbinaison LIneaire de : * + TTPROG . 1 = { ... 1 ...} * . 2*k = { ... cos kwt ...} * . 2*k+1 = { ... sin kwt ...} * * uval1p = { U0 U^cos_k=1 U^sin_k=1 ... U^cos_k=nhbm U^sin_k=nhbm } uytp = COLI TTPROG uval1p; * Sauvegarde des resultats temporels ? SI FLTEMP; SI (MULT ifreq ISAUV); TRES1 . ires1 . 'RESULTATS_TEMPORELS' . ifreq = EVOL coul1 'MANU' 't/T' tadim tit1 uytp; SI FLVITE; vytp = COLI TTVITE uval1p; tit2 = chai 'tit1'quote'/\w'; TRES1 . ires1 . 'RESULTATS_TEMPORELS' . (-1 * ifreq) = EVOL coul1 'MANU' 't/T' tadim tit2 vytp; FINSI; FINSI; FINSI; SI FLMAXI; umaxp = umaxp et (MAXI uytp 'ABS') ; FINSI; FIN BFFREQ; *********************** fin de boucle sur les pas de frequences calcules SI FLMAXI; TRES1 . 'RESULTATS' . ires1 = umaxp; evtot = evtot et (EVOL coul1 'MANU' '\w' wprog (chai 'max|'tit1'(t)|') umaxp); FINSI; FIN BRES1; ******************** fin de boucle sur les resultats temporels a traiter SI FLMAXI; TRES1 . 'RESULTATS_EVOL' = evtot; FINSI; FINPROC ;