[cig-commits] commit: add some sort of fault forcing term
Mercurial
hg at geodynamics.org
Thu Jun 7 13:35:36 PDT 2012
changeset: 257:47bb8c85e9aa
user: Sylvain Barbot <sbarbot at caltech.edu>
date: Tue Apr 10 13:39:52 2012 -0700
files: input/sinker.input src/FACStokes/initializeLevelData.C
description:
add some sort of fault forcing term
diff -r 96b2e060a8ce -r 47bb8c85e9aa input/sinker.input
--- a/input/sinker.input Tue Apr 10 12:28:04 2012 -0700
+++ b/input/sinker.input Tue Apr 10 13:39:52 2012 -0700
@@ -29,7 +29,7 @@ FACStokes {
// The inputs for FACStokes is simply the inputs for the individual
// parts owned by the FACStokes class.
adaption_threshold = 1.0e-3
- min_full_refinement_level = 3
+ min_full_refinement_level = 5
lambda_ijk= 2, 2
lambda_coord_min= -0.001, -0.001
@@ -191,7 +191,7 @@ PatchHierarchy {
// [level 0 entry]
// etc....
// }
- max_levels = 5
+ max_levels = 7
proper_nesting_buffer = 2, 2, 2, 2, 2, 2
ratio_to_coarser {
level_1 = 2, 2
diff -r 96b2e060a8ce -r 47bb8c85e9aa src/FACStokes/initializeLevelData.C
--- a/src/FACStokes/initializeLevelData.C Tue Apr 10 12:28:04 2012 -0700
+++ b/src/FACStokes/initializeLevelData.C Tue Apr 10 13:39:52 2012 -0700
@@ -9,6 +9,33 @@
************************************************************************/
#include "FACStokes.h"
#include "SAMRAI/geom/CartesianGridGeometry.h"
+
+double gauss(double x, double sigma)
+{
+ const double pi2 = atan(1.0)*8;
+ return exp(-0.5*(x/sigma)*(x/sigma))/sqrt(pi2)/sigma;
+}
+
+double omega(double x, double beta)
+{
+ double pi=4*atan(1);
+
+ if (fabs(x) <= (1-2*beta)/(1-beta)/2)
+ {
+ return 1;
+ }
+ else
+ {
+ if (fabs(x) < 1./(2.*(1.-beta)))
+ {
+ return pow(cos(pi*((1.-beta)*fabs(x)-0.5+beta)/(2.*beta)),2.);
+ }
+ else
+ {
+ return 0;
+ }
+ }
+}
/*
*************************************************************************
@@ -141,16 +168,48 @@ void SAMRAI::FACStokes::initializeLevelD
xyz[d]=geom->getXLower()[d]
+ dx[d]*(s[d]-pbox.lower()[d]+offset[d]);
- int ijk(0), factor(1);
- for(int d=0;d<dim;++d)
- {
- int i=static_cast<int>(xyz[d]*(v_rhs_ijk[d]-1)
- /(v_rhs_xyz_max[d]-v_rhs_xyz_min[d]));
- i=std::max(0,std::min(v_rhs_ijk[d]-1,i));
- ijk+=i*factor;
- factor*=v_rhs_ijk[d];
- }
- (*v_rhs_data)(s)=v_rhs[ijk+ix_offset];
+ double x(xyz[0]),y(xyz[1]);
+
+ double xr(0.5),yr(0.5);
+ double g0m0(1.),g0p0(1.),g00p(1.),g00m(1.);
+ double L(0.3),cdip(1.),sdip(0.);
+
+ double beta=0.2;
+ double n[]={0,cdip,sdip};
+ double b[]={0,-sdip,+cdip};
+
+ double temp1=gauss(x-xr,dx[0]);
+ double temp2=1.0;
+ double temp3=omega((y-yr)/L,beta);
+ double sourc=(+(g0p0*gauss(x+dx[0]-xr,0.005)-g0m0*gauss(x-xr,0.005))*n[1]/dx[0]
+ +(g00p*gauss(x+dx[0]-xr,0.005)-g00m*gauss(x-xr,0.005))*n[2]/dx[1] )
+ *temp2
+ *temp3;
+
+ double dipcs=temp1
+ *temp2
+ *(+(g0p0*omega((y+dx[1]-yr)/L,beta)-g0m0*omega((y-yr)/L,beta))*b[1]/dx[0]
+ +(g00p*omega((y+dx[1]-yr)/L,beta)-g00m*omega((y-yr)/L,beta))*b[2]/dx[1] );
+
+ // force update
+ switch (ix)
+ {
+ case 0:{
+ // f_2
+ double f2=-cdip*dipcs-sdip*sourc;
+ //std::cout << x << " " << y << " "<< omega((y-yr)/L,beta)<< " " << temp2 << " " << dipcs << "\n";
+ (*v_rhs_data)(s)=+10*f2;
+ break;
+ }
+ case 1:{
+ // f_3
+ double f3=+cdip*sourc-sdip*dipcs;
+
+ (*v_rhs_data)(s)=-10*f3;
+ break;
+ }
+ }
+
}
int i=1;
for(int d=0;d<dim;++d)
More information about the CIG-COMMITS
mailing list