
  /* Dépouillement des rosettes
     14 octobre 2009

     Yves DEBARD
     Département Génie Mécanique et Productique
     Institut Universitaire de Technologie du MANS  */

#include <iostream>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <math.h>

using namespace std;

int    Angle;

double E,Nu,
       Ea,Eb,Ec,
       Exx,Eyy,Ezz,Gxy,E1,E2,E3,
       Sxx,Syy,Sxy,S1,S2,
       Theta,
       SVonMises,STresca,
       Energie;

void Lire_les_donnees()

  {
                       
    Angle = 120 ;    // angle de la rosette en degrés
    
    E = 72000 ;     // module de Young en MPa
    Nu = 0.3 ;      // coefficient de Poisson
    
    // allongements unitaires en 10-6
    
    Ea = 500 ;   
    Eb = 100 ;
    Ec = 200 ;

  }

void Lire_les_donnees_()

  {

    cout << "\nAngle de la rosette en degrés [ 45 , 60 , 120 ] : ";
    cin >> Angle;
    cout << "\n\nModule d'Young en MPa : ";
    cin >> E;
    cout << "\nCoefficient de Poisson : ";
    cin >> Nu;
    cout << "\n\nAllongements unitaires en 10-6 :";
    cout << "\n\n  Ea : ";
    cin >> Ea;
    cout << "\n  Eb : ";
    cin >> Eb;
    cout << "\n  Ec : ";
    cin >> Ec;

  }

void Calculer()
 
  {
               
    double phi,c,s,d,r,smax,smin;
    
    phi=Angle*M_PI/180;
    c=cos(phi);s=sin(phi);
    
    // déformations
    Ea=Ea*1e-6;Eb=Eb*1e-6;Ec=Ec*1e-6;
    Exx=Ea;
    Eyy=(-Ea+2*Eb+Ec+2*c*c*Ea-4*c*c*Eb)/(2*s*s);
    Gxy=(Ea-Ec-4*c*c*Ea+4*c*c*Eb)/(2*s*c);
    Ezz=-Nu*(Exx+Eyy)/(1-Nu);
    
    // contraintes
    c=E/(1-Nu*Nu);
    Sxx=c*(Exx+Nu*Eyy);
    Syy=c*(Eyy+Nu*Exx);
    Sxy=Gxy*E/(2*(1+Nu));
    
    // contraintes et directions principales
    d=0.5*(Sxx+Syy);
    r=(Sxx-Syy)*(Sxx-Syy)+4*Sxy*Sxy;
    r=0.5*sqrt(r);
    S1=d+r;
    S2=d-r;
    Theta=atan((S1-Sxx)/Sxy);
    Theta=Theta*180/M_PI;
    
    // déformations principales
    E1=(S1-Nu*S2)/E;
    E2=(S2-Nu*S1)/E;
    E3=Ezz;
    
    // contrainte équivalente de Von Mises
    SVonMises=sqrt(S1*S1+S2*S2-S1*S2);
    
    // contrainte équivalente de Tresca
    if (S1>0) smax=S1; else smax=0;
    if (S2<0) smax=S2; else smin=0;
    STresca=smax-smin;
    
    // densité d'énergie de déformation
    Energie=0.5*(E1*S1+E2*S2);
  }

void Editer()

  {
    FILE *fres;
    if ((fres=fopen("rosette.txt","wt"))==NULL);
    fprintf(fres,"\nYves DEBARD\n");
    fprintf(fres,"IUT du MANS\n");
    fprintf(fres,"14 octobre 2009\n\n");
    fprintf(fres,"         Dépouillement d'une rosette à %d degrés\n\n",Angle);
    fprintf(fres,"Module de Young = %6.0lf MPA\n\n",E);
    fprintf(fres,"Coefficient de Poisson = %4.2lf\n\n",Nu);
    fprintf(fres,"Allongements unitaires :\n\n");
    fprintf(fres,"  Ea = %5.0lf E-6\n",Ea*1E6);
    fprintf(fres,"  Eb = %5.0lf E-6\n",Eb*1E6);
    fprintf(fres,"  Ec = %5.0lf E-6\n\n",Ec*1E6);
    fprintf(fres,"Repère :\n\n");
    fprintf(fres,"  L'axe z est normal à la surface et dirigé vers l'extérieur\n");
    fprintf(fres,"  L'axe x est l'axe de la jauge a\n\n");
    fprintf(fres,"Déformations :\n\n");
    fprintf(fres,"  Exx = %9.6lf\n",Exx);
    fprintf(fres,"  Eyy = %9.6lf\n",Eyy);
    fprintf(fres,"  Ezz = %9.6lf\n",Ezz);
    fprintf(fres,"  Gxy = %9.6lf\n\n",Gxy);
    fprintf(fres,"Déformations principales :\n\n");
    fprintf(fres,"  E1 = %9.6lf\n",E1);
    fprintf(fres,"  E2 = %9.6lf\n",E2);
    fprintf(fres,"  E3 = %9.6lf\n\n",E3);
    fprintf(fres,"Dilatation volumique : dV/V = %9.6lf\n\n",E1+E2+E3);
    fprintf(fres,"Contraintes :\n\n");
    fprintf(fres,"  Sxx = %5.2lf  MPa\n",Sxx);
    fprintf(fres,"  Syy = %5.2lf  MPa\n",Syy);
    fprintf(fres,"  Sxy = %5.2lf  MPa\n\n",Sxy);
    fprintf(fres,"Contraintes principales :\n\n");
    fprintf(fres,"  S1 = %5.2lf  MPa\n",S1);
    fprintf(fres,"  S2 = %5.2lf  MPa\n",S2);
    fprintf(fres,"  S3 = 0  MPa\n\n");
    fprintf(fres,"Angle de la direction principale N1 avec la jauge a = %3.2lf degrés\n\n",Theta);
    fprintf(fres,"Contrainte équivalente de Von Mises : %5.2lf MPa\n\n",SVonMises);
    fprintf(fres,"Contrainte équivalente de Tresca : %5.2lf MPa\n\n",STresca);
    fprintf(fres,"Densité d'énergie de déformation : %5.0lf J/m3\n\n",Energie*1e6);
    fclose(fres);
  }

int main()   //  programme principal

  {
             
    Lire_les_donnees();
    Calculer();
    Editer();
    
    return 0;
    
  }





