/***************************************************************
File:   2ds.c - 2-Dimensional Stress Equation
Desc:   Given any two orthogonal stesses, åx and åy and the
        shear stress, çxy, the stress transformation is calculated
        to give the maximum and minimum principal stresses.  The
        rotation of the stress element from the +x-axis to å1 or
        å2 is also calculated.  CCW is assumed to be positive for
        this angle (í) and for shear directions.
        The maximum shear stress is correctly calculated from the
        triaxial stress state.
        David Edwards, 2-25-2006
***************************************************************/

#include <stdio.h>
#include <math.h>
#include <mathext.h>
#include <conio.h>

void input (char *str, int *addr)
{
        printf(str);
        scanf("%lf", addr);
}

main()
{
    double sx,sy,tauxy,sa,sb,phi,s1,s2,s3,sp,tau1,taumax,save;

    input("\n  Tensile Stress, åx [ksi]: ",&sx);
    input("  Tensile Stress, åy [ksi]: ",&sy);
    input("  Shear Stress, çxy  [ksi]: ",&tauxy);
    rpc(.5*(sx-sy),tauxy,&tau1,&phi);
    save=.5*(sx+sy);
    sa=save+tau1;
    sb=save-tau1;
    if (sa >= 0.0) {
        if (sb >= 0.0) {
            s1=sa;
            s2=sb;
            s3=0.0;
            taumax=fabs(.5*s1);
        }
        else {
            s1=sa;
            s2=0.0;
            s3=sb;
            taumax=fabs(.5*(s1-s3));
        }

        printf("\n  Angle from the +x-axis to å1 (principal direction)"
               " [deg]: %6.1lf\n",phi*90.0/M_PI);
    }
    else {
            s1=0.0;
            s2=sa;
            s3=sb;
            taumax=fabs(.5*s3);
            printf("\n  Angle from the +x-axis to å2 (principal direction)"
                   " [deg]: %6.1lf\n",phi*90.0/M_PI);
    }

    sp=sqrt(sa*sa-sa*sb+sb*sb);

    printf("\n  Maximum principal stress,      å1 [ksi]: %10.2lf\n",s1);
    printf("  Intermediate principal stress, å2 [ksi]: %10.2lf\n",s2);
    printf("  Minimum principal stress,      å3 [ksi]: %10.2lf\n",s3);
    printf("\n  Maximum shear stress,        çmax [ksi]: %10.2lf\n",taumax);
    printf("\n  von Mises stress,              å' [ksi]: %10.2lf\n",sp);

}