/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. OpenFOAM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenFOAM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see . Application stressComponents Description Calculates and writes the scalar fields of the six components of the stress tensor sigma for each time. \*---------------------------------------------------------------------------*/ #include "fvCFD.H" #include "OFstream.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // tensor rotation(vector u, vector v) { scalar eps = 1.0e-10; tensor q(tensor::zero); vector a( u.y()*v.z()-u.z()*v.y(), u.z()*v.x()-u.x()*v.z(), u.x()*v.y()-u.y()*v.x() ); if(Foam::mag(a) 0.0) { scalar aaaa=-sign(rr)*Foam::pow(abs(rr)+Foam::sqrt(delta),scalar(1.0/3.0)); scalar bbbb=0; if( aaaa !=0.0) bbbb=qq/aaaa; scalar eig1c_r=-0.5*(aaaa+bbbb)-aa/3.0; scalar eig1c_i=0.5*Foam::sqrt(scalar(3.0))*(aaaa-bbbb); scalar eig2c_r=-0.5*(aaaa+bbbb)-aa/3.0; scalar eig2c_i=-0.5*Foam::sqrt(scalar(3.0))*(aaaa-bbbb); scalar eig3r = aaaa+bbbb-aa/3.0; scalar delta1(0.0),delta2(0.0),delta3(0.0); delta1 = (a.xx()-eig3r)*(a.yy()-eig3r) -a.yx()*a.xy(); delta2 = (a.yy()-eig3r)*(a.zz()-eig3r) -a.yz()*a.zy(); delta3 = (a.xx()-eig3r)*(a.zz()-eig3r) -a.zx()*a.xz(); if(delta1==0.0 && delta2==0.0 && delta3==0.0) { FatalErrorInFunction << "delta1-3 are:" << delta1 << "," << delta2 <<","<< delta3 << exit(FatalError); } vector vr(0,0,0); if( Foam::mag(delta1)>=Foam::mag(delta2) && Foam::mag(delta1)>=Foam::mag(delta3) ) { vr.x()=(-(a.yy()-eig3r)*a.xz()+a.xy()*a.yz())/delta1; vr.y()= (a.yx()*a.xz() - (a.xx()-eig3r)*a.yz())/delta1; vr.z()=1.0; } else if( Foam::mag(delta2)>=Foam::mag(delta1) && Foam::mag(delta2)>=Foam::mag(delta3) ) { vr.x()=1.0; vr.y()=(-(a.zz()-eig3r)*a.yx()+a.yz()*a.zx())/delta2; vr.z()=(a.zy()*a.yx() - (a.yy()-eig3r)*a.zx())/delta2; } else if( Foam::mag(delta3)>=Foam::mag(delta1) && Foam::mag(delta3)>=Foam::mag(delta2) ) { vr.x()=(-(a.zz()-eig3r)*a.xy()+a.xz()*a.zy())/delta3; vr.y()= 1.0 ; vr.z()=(a.zx()*a.xy() - (a.xx()-eig3r)*a.zy())/delta3; } else FatalErrorInFunction<< "vr error"<< exit(FatalError); vr = vr/Foam::sqrt(vr & vr); tensor qqq=rotation(z0,vr); tensor vg(qqq.T() & a); vg=vg & qqq; scalar alpha = 0.5*Foam::sqrt(Foam::pow(vg.yy()-vg.xx(),2)+Foam::pow(vg.yx()+vg.xy(),2)); scalar beta = 0.5*(vg.yx()-vg.xy()); if(Foam::magSqr(beta) > Foam::magSqr(alpha)) { scalar rm=0.0; if(beta > 0.0) rm=2.0*(beta-alpha); else rm=2.0*(beta+alpha); Rotex[cellI]=rm*vr; } } } Rotex.write(); Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl; } else { Info<< " No U" << endl; } } Info<< "End" << endl; return 0; } // ************************************************************************* //