#include<iostream>
using namespace std;

#include "mat.h"
using namespace ariadne;

int main()
{
   cout.precision(10);
   cout << "Ariadne V" << ariadne::version() << endl;
   cout << "WXMATHS V" << wxmaths::version() << endl;
   char matname[80]; cin >> matname;
   cout << "material " << matname << endl;
   mat_type *a_mat;
   cin >> a_mat;
   cout << "mat*:\n" << a_mat << endl << "mat:\n" << *a_mat << endl;
   mat_type::state *st = a_mat->new_state(); cin >> *st;
   cout << "state = " << *st << endl;
   cout << "p = " << a_mat->p(st) << '\n';
   cout << "c^2 = " << a_mat->csqv(st) << '\n';
   cout << "T = " << a_mat->t(st) << '\n';
   cout << "cv = " << a_mat->cv(st) << '\n';
   cout << "e = " << a_mat->e(st) << '\n';
   cout << "stiffness = " << a_mat->stiffness(st) << '\n';

   Matrix3d gradu; cin >> gradu;
   cout << "gradu = \n" << gradu
        << " => stress = \n" << a_mat->stress(st,gradu);

   mat_type::state *stdot = a_mat->new_state();
   a_mat->statedot_mech(st,gradu,stdot);
   cout << " => d(state)/dt = " << *stdot << endl;

   cout << "evolution rate = " << a_mat->evolution_rate(st) << endl;
   double dt; cin >> dt;
   a_mat->evolve_internal(st,dt);
   cout << "after dt = " << dt << " state = " << *st << endl;
}
