[cig-commits] commit: Fix rotations of initial data.
Mercurial
hg at geodynamics.org
Wed Mar 28 02:44:25 PDT 2012
changeset: 121:fd0aa4755b4e
user: Walter Landry <wlandry at caltech.edu>
date: Tue Mar 27 16:06:14 2012 -0700
files: initial.cxx
description:
Fix rotations of initial data.
diff -r af86ee9240e2 -r fd0aa4755b4e initial.cxx
--- a/initial.cxx Mon Mar 26 10:55:06 2012 -0700
+++ b/initial.cxx Tue Mar 27 16:06:14 2012 -0700
@@ -52,9 +52,11 @@ void initial(const Model &model, double
gsl_permutation_free(perm);
- const double theta(0.1);
+ const double theta(pi);
+ // const double theta(0);
FTensor::Tensor2<double,2,2>
- rot(std::cos(theta),-std::sin(theta),std::sin(theta),std::cos(theta));
+ rot(std::cos(theta),std::sin(theta),-std::sin(theta),std::cos(theta));
+ FTensor::Tensor1<double,2> offset(0.5,0.5);
const FTensor::Index<'a',2> a;
const FTensor::Index<'b',2> b;
@@ -64,7 +66,7 @@ void initial(const Model &model, double
if(i<Nx && j<Ny)
{
FTensor::Tensor1<double,2> coord((i+0.5)*h,(j+0.5)*h), xy;
- xy(a)=rot(a,b)*coord(b);
+ xy(a)=rot(a,b)*(coord(b)-offset(b)) + offset(a);
double x(xy(0)), y(xy(1)), r2(x*x+y*y);
switch(model)
{
@@ -114,7 +116,7 @@ void initial(const Model &model, double
if(j<Ny)
{
FTensor::Tensor1<double,2> coord(i*h,(j+0.5)*h), xy;
- xy(a)=rot(a,b)*coord(b);
+ xy(a)=rot(a,b)*(coord(b)-offset(b)) + offset(a);
double x(xy(0)), y(xy(1)), r2(x*x+y*y);
zx[i][j]=0;
fx[i][j]=0;
@@ -124,6 +126,10 @@ void initial(const Model &model, double
log_etax[i][j]=y*log_max_eta;
break;
case Model::solCx:
+ {
+ FTensor::Tensor1<double,2> f(0,pi*pi*sin(pi*y)*cos(pi*x));
+ fx[i][j]=f(b)*rot(0,b);
+ }
distx[i][j]=x-middle;
if(x>middle)
{
@@ -152,10 +158,16 @@ void initial(const Model &model, double
sign=-1;
}
const double csh(std::cosh(kx)), snh(std::sinh(kx)),
- sn(std::sin(kx));
- zx[i][j]=(tau_eta*snh - (v+tau_eta)*kx*csh
- - sign*rho*(kx*csh/2 - sn/2)/eta)
- *std::cos(pi*y)*eta;
+ sn(std::sin(kx)), cs(std::cos(kx));
+
+ FTensor::Tensor1<double,2>
+ z((tau_eta*snh - (v+tau_eta)*kx*csh
+ - sign*rho*(kx*csh/2 - sn/2)/eta)
+ *std::cos(pi*y)*eta,
+ (v*csh + (v+tau_eta)*kx*snh
+ - sign*rho*(cs - csh - kx*snh)/(2*eta))
+ *std::sin(pi*y)*eta);
+ zx[i][j]=rot(0,b)*z(b);
}
break;
case Model::sinker:
@@ -193,7 +205,7 @@ void initial(const Model &model, double
if(i<Nx)
{
FTensor::Tensor1<double,2> coord((i+0.5)*h, j*h), xy;
- xy(a)=rot(a,b)*coord(b);
+ xy(a)=rot(a,b)*(coord(b)-offset(b)) + offset(a);
double x(xy(0)), y(xy(1)), r2(x*x+y*y);
zy[i][j]=0;
@@ -204,7 +216,10 @@ void initial(const Model &model, double
log_etay[i][j]=y*log_max_eta;
break;
case Model::solCx:
- fy[i][j]=pi*pi*sin(pi*y)*cos(pi*x);
+ {
+ FTensor::Tensor1<double,2> f(0,pi*pi*sin(pi*y)*cos(pi*x));
+ fy[i][j]=f(b)*rot(1,b);
+ }
disty[i][j]=x-middle;
if(x>middle)
{
@@ -215,7 +230,6 @@ void initial(const Model &model, double
log_etay[i][j]=log_min_eta;
}
{
- const double pi(atan(1.0)*4);
double kx, v, tau_eta, eta, sign;
if(x<middle)
{
@@ -233,11 +247,17 @@ void initial(const Model &model, double
eta=max_eta;
sign=-1;
}
- const double csh(std::cosh(kx)), cs(std::cos(kx)),
- snh(std::sinh(kx));
- zy[i][j]=(v*csh + (v+tau_eta)*kx*snh
- - sign*rho*(cs - csh - kx*snh)/(2*eta))
- *std::sin(pi*y)*eta;
+ const double snh(std::sinh(kx)), csh(std::cosh(kx)),
+ sn(std::sin(kx)), cs(std::cos(kx));
+
+ FTensor::Tensor1<double,2>
+ z((tau_eta*snh - (v+tau_eta)*kx*csh
+ - sign*rho*(kx*csh/2 - sn/2)/eta)
+ *std::cos(pi*y)*eta,
+ (v*csh + (v+tau_eta)*kx*snh
+ - sign*rho*(cs - csh - kx*snh)/(2*eta))
+ *std::sin(pi*y)*eta);
+ zy[i][j]=rot(1,b)*z(b);
}
break;
case Model::sinker:
@@ -266,7 +286,8 @@ void initial(const Model &model, double
log_etay[i][j]=log_min_eta;
phi=-2*epsilon*A*r2_inclusion/z;
dphi=-phi/z;
- psi=-2*epsilon*(min_eta*z+A*r2_inclusion*r2_inclusion/(z*z*z));
+ psi=-2*epsilon
+ * (min_eta*z + A*r2_inclusion*r2_inclusion/(z*z*z));
}
v=(phi - z*conj(dphi) - conj(psi))/2.0;
zy[i][j]=v.imag();
More information about the CIG-COMMITS
mailing list