[cig-commits] commit: compute_Cp uses FTensor

Mercurial hg at geodynamics.org
Mon Mar 12 20:13:00 PDT 2012


changeset:   87:d068549788a4
tag:         tip
user:        Walter Landry <wlandry at caltech.edu>
date:        Mon Mar 12 20:12:48 2012 -0700
files:       compute_Cp.cxx
description:
compute_Cp uses FTensor


diff -r a55f7cbcd509 -r d068549788a4 compute_Cp.cxx
--- a/compute_Cp.cxx	Mon Mar 12 18:07:24 2012 -0700
+++ b/compute_Cp.cxx	Mon Mar 12 20:12:48 2012 -0700
@@ -12,29 +12,43 @@ void compute_Cp(const Model &model, cons
                 double &Cp)
 {
   Cp=0;
-  if(model==Model::solCx)
-    {
-      const double x=(i+0.5)*h;
-      if(i<Nx && j<Ny && x+h/2>middle && x-h/2<middle)
-        {
-          FTensor::Tensor1<double,2> v, dv, dir(1,0);
-          compute_v_on_interface(zx,zy,log_etax,log_etay,
-                                 FTensor::Tensor1<double,2>(middle,0),
-                                 i,j,0,v,dv);
 
-          double dx=(x>middle) ? (middle-(x-h/2)) : (middle-(x+h/2));
+  FTensor::Tensor1<bool,2> intersects;
 
-          FTensor::Tensor2_symmetric<double,2> ddel(0,1,0);
-          const FTensor::Index<'a',2> a;
-          const FTensor::Index<'b',2> b;
-          FTensor::Number<0> n;
-          FTensor::Number<1> t;
+  FTensor::Tensor1<double,2> pos((i+0.5)*h,(j+0.5)*h);
+  intersects(0)=(pos(0)+h/2>middle && pos(0)-h/2<middle);
+  intersects(1)=false;
+  
+  FTensor::Tensor1<double,2> interface_pos[2];
+  interface_pos[0](0)=middle;
+  interface_pos[0](1)=pos(1);
+  interface_pos[1](0)=0;
+  interface_pos[1](1)=0;
 
-          FTensor::Tensor2<double,2,2> dz_jump;
-          dz_jump(a,n)=-eta_jump*dv(b)*ddel(a,b);
-          dz_jump(a,t)=eta_jump*dv(a);
+  for(int dd=0;dd<2;++dd)
+    if(intersects(dd))
+      {
+        FTensor::Tensor1<double,2> v, dv;
+        FTensor::Tensor1<int,2> dir(0,0);
+        dir(dd)=1;
+        compute_v_on_interface(zx,zy,log_etax,log_etay,
+                               interface_pos[dd],
+                               i,j,dd,v,dv);
 
-          Cp=(-eta_jump*v(a)*dir(a) + dx*dz_jump(a,b)*dir(a)*dir(b))/h;
-        }
-    }
+        double dx=(pos(dd)>interface_pos[dd](dd))
+          ? (interface_pos[dd](dd)-(pos(dd)-h/2))
+          : (interface_pos[dd](dd)-(pos(dd)+h/2));
+
+        FTensor::Tensor2_symmetric<double,2> ddel(0,1,0);
+        const FTensor::Index<'a',2> a;
+        const FTensor::Index<'b',2> b;
+        FTensor::Number<0> n;
+        FTensor::Number<1> t;
+
+        FTensor::Tensor2<double,2,2> dz_jump;
+        dz_jump(a,n)=-eta_jump*dv(b)*ddel(a,b);
+        dz_jump(a,t)=eta_jump*dv(a);
+
+        Cp=(-eta_jump*v(a)*dir(a) + dx*dz_jump(a,b)*dir(a)*dir(b))/h;
+      }
 }



More information about the CIG-COMMITS mailing list