Aller au contenu
CIVILMANIA
BELLAMINE

FORMATION : CALCUL DES PONTS DALLE PAR LA MÉTHODE DE GUYON MASSONNET

Recommended Posts

Il y a 6 heures, philkakou a dit :

Bonjour, j'ai développé une application sous delphi permettant de calculer K pour les dalles et poutres.

Elle se trouve dans la section telechargement.

Elle permet notamment d'obtenir sous excel un tableau des coefficients K pour une valeur donnée d'entretoisement theta et un coefficient de raideur (torsion) alpha.

Normalement, il n'y a pas d'erreurs de calcul puisque je retombe correctement sur les valeurs K0 et K1 des tables de massonnet

A partir de ces valeurs, selon le règlement routier employé, l'application génère les coefficients K pour tous les cas de charges routières concernés

Bonsoir

Pourquoi l'application donne un coefficient de réparation K pour la charge permanente du tablier dalle différents de 1.

Normalement si nous considérons cette charge permanente uniformément répartie entre -b et +b et du moment où l'aire sous la ligne d'influence de K entre -b et +b (quel que soit y) vaut 2b donc K = 2b/2b = 1

Cdt

Partager ce message


Lien à poster
Partager sur d’autres sites

Effectivement, le calcul analytique conduit à une valeur unitaire.

Par contre lorsqu'on passe aux calculs numériques, les valeurs calculées sont forcément arrondies et la somme de celles-ci conduit à une valeur elle-aussi arrondie cumulant ces erreurs minimes mais se rapprochant de 1.

Je prends un K aléatoire pour theta=0.5 et alpha = 0.75: pour la charge du tablier K=0,99999 <> 1

Pour theta=0.85 et alpha=1 on a bien K=1 idem si alpha=0

A titre d'information puisqu'un lecteur posait des questions sur l'utilisation du code sous vba, voici une partie du code sous delphi pour le calcul de K en dehors des formules que vous avez donné pour K0 et K1

Function KALPHA(K0,K1:extended):extended;  // interpolation de Sattler
begin
 if Theta <=0.1
    then Kalpha := K0 + ( K1 - K0)*power(alpha,0.05)
    else if Theta<=1
            then Kalpha := K0 + ( K1 - K0)*power(alpha,(1-exp( (0.065-theta) / 0.663 )))
            else Kalpha := K0 + ( K1 - K0)*power(alpha,0.5);
end;

Function CalculK(y,e:extended):extended;
var KZERO,KUN:extended;
Begin
 if Alpha=1
    then CalculK:=K1(y,e)   // Dalle
    else
     begin
      KZERO:=K0(y,e);KUN:=K1(y,e);
      CalculK:=Kalpha(KZERO,KUN);
     end;
End;

Function KMAXREPARTIE(XD,XF,y:extended):extended;
var X,LX,CumulK:extended;
begin
 // on arrondit les valeurs saisies des bornes au millimètre près pour validation test X>XF
 XD:=SimpleROundTo(XD,-3);  // millimetre = 0,001 = 10^-3 m
 XF:=SimpleRoundTo(XF,-3);
 if ABS(XF-XD)<0.0001
    then KMAXREPARTIE:=CalculK(y,XD)   // ZONE CONCENTREE EN 1 POINT
    else
     begin
      LX:=(XF-XD)*1000;         // PLAGE CHARGEE EN MILLIMETRES
      CumulK:=0; X:=XD;
      REPEAT
       if (X=XD) OR (X=XF)
          then CumulK:=CumulK+CalculK(y,X)/2
          else CumulK:=CumulK+CalculK(y,X);
       X:=X+0.001;
      UNTIL X>XF;
      KMAXREPARTIE:=CumulK/LX;
     end;
end;

Modifié par philkakou

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 4 heures, philkakou a dit :

Effectivement, le calcul analytique conduit à une valeur unitaire.

Par contre lorsqu'on passe aux calculs numériques, les valeurs calculées sont forcément arrondies et la somme de celles-ci conduit à une valeur elle-aussi arrondie cumulant ces erreurs minimes mais se rapprochant de 1.

Je prends un K aléatoire pour theta=0.5 et alpha = 0.75: pour la charge du tablier K=0,99999 <> 1

Pour theta=0.85 et alpha=1 on a bien K=1 idem si alpha=0

A titre d'information puisqu'un lecteur posait des questions sur l'utilisation du code sous vba, voici une partie du code sous delphi pour le calcul de K en dehors des formules que vous avez donné pour K0 et K1

Function KALPHA(K0,K1:extended):extended;  // interpolation de Sattler
begin
 if Theta <=0.1
    then Kalpha := K0 + ( K1 - K0)*power(alpha,0.05)
    else if Theta<=1
            then Kalpha := K0 + ( K1 - K0)*power(alpha,(1-exp( (0.065-theta) / 0.663 )))
            else Kalpha := K0 + ( K1 - K0)*power(alpha,0.5);
end;

Function CalculK(y,e:extended):extended;
var KZERO,KUN:extended;
Begin
 if Alpha=1
    then CalculK:=K1(y,e)   // Dalle
    else
     begin
      KZERO:=K0(y,e);KUN:=K1(y,e);
      CalculK:=Kalpha(KZERO,KUN);
     end;
End;

Function KMAXREPARTIE(XD,XF,y:extended):extended;
var X,LX,CumulK:extended;
begin
 // on arrondit les valeurs saisies des bornes au millimètre près pour validation test X>XF
 XD:=SimpleROundTo(XD,-3);  // millimetre = 0,001 = 10^-3 m
 XF:=SimpleRoundTo(XF,-3);
 if ABS(XF-XD)<0.0001
    then KMAXREPARTIE:=CalculK(y,XD)   // ZONE CONCENTREE EN 1 POINT
    else
     begin
      LX:=(XF-XD)*1000;         // PLAGE CHARGEE EN MILLIMETRES
      CumulK:=0; X:=XD;
      REPEAT
       if (X=XD) OR (X=XF)
          then CumulK:=CumulK+CalculK(y,X)/2
          else CumulK:=CumulK+CalculK(y,X);
       X:=X+0.001;
      UNTIL X>XF;
      KMAXREPARTIE:=CumulK/LX;
     end;
end;

Bonjour

Il y a une erreur de programmation dans votre code pour le calcul de K. 

begin
 if Theta <=0.1
    then Kalpha := K0 + ( K1 - K0)*power(alpha,0.05)
    else if Theta<=1
            then Kalpha := K0 + ( K1 - K0)*power(alpha,(1-exp( (0.065-theta) / 0.663 )))
            else Kalpha := K0 + ( K1 - K0)*power(alpha,0.5);
end;

else if Theta>0.1 and Theta<=1 !!!!

Même en présence d'un else l'instruction else if est tjrs lue par la compilation.

Vous pouvez vérifier cela pour Theta=0.05 la valeur de K est retournée par la deuxième instruction. Elle est calculée par la première instruction puis modifié est retournée par la deuxième instruction...

Cdt

 

Modifié par BELLAMINE

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

Le code rédigé en syntaxe Delphi est correct. Cela ne correspond pas à la syntaxe vba des expressions conditionnelles...

Pour info, j'ai fait un petit test (toujours en Delphi) reproduit ci-dessous avec un bouton et un memo :

en cliquant sur le bouton, je lance le test qui appelle la routine test qui en fonction de la valeur numérique de V écrit dans le memo, la plage de v correspondant au if/else

procedure TForm1.Button1Click(Sender: TObject);
var V:extended;

procedure test(V:extended);
begin
 With Memo.Lines DO
  begin
   Add('TEST CONDITIONNEL valeur V = '+V.ToString);
   if V<=0.1
      then Memo.Lines.Add('V<=0.1')
      else if V<=1
              then Memo.Lines.Add('V>0.1 et V<=1')
              else Memo.Lines.Add('V>0.1 et V>1 ');
   Add('');
  end;
end;

begin
 Memo.Clear;
 V:=0.05; Test(V);
 V:=0.07; Test(V);
 V:=0.1;  Test(V);
 V:=0.25; Test(V);
 V:=0.5; Test(V);
 V:=1; Test(V);
 V:=2; Test(V);
end;

Le résultat est le suivant:

TEST CONDITIONNEL valeur V = 0,05
V<=0.1

TEST CONDITIONNEL valeur V = 0,07
V<=0.1

TEST CONDITIONNEL valeur V = 0,1
V<=0.1

TEST CONDITIONNEL valeur V = 0,25
V>0.1 et V<=1

TEST CONDITIONNEL valeur V = 0,5
V>0.1 et V<=1

TEST CONDITIONNEL valeur V = 1
V>0.1 et V<=1

TEST CONDITIONNEL valeur V = 2
V>0.1 et V>1

Au vu de ces résultats, les branchements sont corrects pour le calcul de Kalpha

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir

Vous serait il possible d'éditer le tableau des valeurs de K alpha pour theta=0.45 et alpha=0.35

J'obtiens des valeurs négatives !  Je dois avoir une erreur dans les calculs de K0 K1 ou Kalpha

alors que j'ai vérifié la bonne affectation de l'interpolation pour Kalpha selon K0 et K1. (post ci avant)

Positions des 9 fibres considérées :   -b    -3b/4    -b/2    -b/4    0    +b/4    +b/2    +3b/4    +b

image.png.406c32684ce616ea41161e18b8860638.png

Merci d'avance

Partager ce message


Lien à poster
Partager sur d’autres sites

Il y a 15 heures, philkakou a dit :

Bonsoir

Vous serait il possible d'éditer le tableau des valeurs de K alpha pour theta=0.45 et alpha=0.35

J'obtiens des valeurs négatives !  Je dois avoir une erreur dans les calculs de K0 K1 ou Kalpha

alors que j'ai vérifié la bonne affectation de l'interpolation pour Kalpha selon K0 et K1. (post ci avant)

Positions des 9 fibres considérées :   -b    -3b/4    -b/2    -b/4    0    +b/4    +b/2    +3b/4    +b

 

image.png.406c32684ce616ea41161e18b8860638.png

Merci d'avance

Bonjour @philkakou   

Pour ALPHA=0 et ALPHA=1 avec THETA=0.45 les tables de Guyon en ressort :

image.png.179a7017c1a4c5ee7cd503dd1b0c313f.png

Remarque importante : K1 est tjrs positif Ko peut être négatif 

A mon niveau c'est confirmé comme suit :

image.png.419146ca37e725ba1b96cb58f7c59c44.png

image.png.ebfc00e7f28e6acda41078d1d5ebe02f.png

Pour ALPHA=0.35 les formules d'interpolation de Satler me donne :

image.png.6a6b0098eb300c141e00bf6560dcf985.png

Si vos résultats sont en accord avec les tables de Guyon pour ALPHA=0 et ALPHA=1 avec THETA=0.45 Il y a donc un pb de calcul K_alpha_theta dans votre code source pour les formules d'interpolation de Satler !!! Dans le cas contraire il faut vérifier le code source pour ALPHA=0 et ALPHA=1 avec THETA=0.45

Cdt

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour votre réponse

Pour theta=0.45 et alpha=0 => correspondance : OK

image.png.e39f74c73efb0d15c839cd9a5744411d.png

Pour theta=0.45 et alpha=1 => correspondance : OK

image.png.6516e6121b91a5c09aa0d4c6fa3fd609.png

Pour theta=0.45 et alpha=0.35  => correspondance : OK  (ouf!!!!!)

image.png.69272f8c13ace1085834d7b16c76cfee.png

J'ai parcouru mon code à nouveau et je pense qu'à un moment donné, je n'ai pas reinitialisé la valeur du coefficient alpha.

Grosso modo, le tableau  affichait bien alpha=0.35 correspondant à la valeur texte de la variable edit CoefAlpha mais je n'avais pas affecté la valeur numérique correspondante à la variable alpha !! Le programme employait donc la valeur alpha calculée par ailleurs, totalement différente de celle que j'avais modifié manuellement dans la cellule d'édition de saisie.  Un simple oubli d'affecter la valeur modifiée dans la valeur numérique servant aux calculs ! 

Je suis soulagé car aucune erreur dans les formules d'interpolation.

Merci pour votre aide

Modifié par philkakou

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 08/02/2019 à 14:24, philkakou a dit :

Merci pour votre réponse

Pour theta=0.45 et alpha=0 => correspondance : OK

image.png.e39f74c73efb0d15c839cd9a5744411d.png

Pour theta=0.45 et alpha=1 => correspondance : OK

image.png.6516e6121b91a5c09aa0d4c6fa3fd609.png

Pour theta=0.45 et alpha=0.35  => correspondance : OK  (ouf!!!!!)

image.png.69272f8c13ace1085834d7b16c76cfee.png

J'ai parcouru mon code à nouveau et je pense qu'à un moment donné, je n'ai pas reinitialisé la valeur du coefficient alpha.

Grosso modo, le tableau  affichait bien alpha=0.35 correspondant à la valeur texte de la variable edit CoefAlpha mais je n'avais pas affecté la valeur numérique correspondante à la variable alpha !! Le programme employait donc la valeur alpha calculée par ailleurs, totalement différente de celle que j'avais modifié manuellement dans la cellule d'édition de saisie.  Un simple oubli d'affecter la valeur modifiée dans la valeur numérique servant aux calculs ! 

Je suis soulagé car aucune erreur dans les formules d'interpolation.

Merci pour votre aide

Bonjour

Il y a t-il quelqu'un sur ce site disposant d'une partie des tables de Guyon pour coef-poisson 0.15 

J'en ai besoin juste pour valider la formule du coeff- répartition transversale K 

Merci

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×