Upwinding terms now compile.

Not tested yet.
This commit is contained in:
Miikka Vaisala
2019-06-24 16:32:21 +08:00
parent 57881e5961
commit d0b27a0347
2 changed files with 37 additions and 30 deletions

View File

@@ -14,36 +14,39 @@ gradient(in Scalar vertex)
} }
Preprocessed Scalar Preprocessed Scalar
der6x_upwd(in Scalar vertex), der6x_upwd(in Scalar vertex)
{ {
return (Scalar){(1.0/60.0)*inv_ds* ( Scalar inv_ds = DCONST_REAL(AC_inv_dsx);
- 20.0* vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z]
+ 15.0*(vertex[vertexIdx.x, vertexIdx.y+1, vertexIdx.z] + vertex[vertexIdx.x, vertexIdx.y-1, vertexIdx.z]) return (Scalar){ Scalar(1.0/60.0)*inv_ds* (
- 6.0*(vertex[vertexIdx.x, vertexIdx.y+2, vertexIdx.z] + vertex[vertexIdx.x, vertexIdx.y-2, vertexIdx.z]) - Scalar(20.0)* vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z]
+ vertex[vertexIdx.x, vertexIdx.y+3, vertexIdx.z] + vertex[vertexIdx.x, vertexIdx.y-3, vertexIdx.z]; + Scalar(15.0)*(vertex[vertexIdx.x, vertexIdx.y+1, vertexIdx.z] + vertex[vertexIdx.x, vertexIdx.y-1, vertexIdx.z])
)} - Scalar( 6.0)*(vertex[vertexIdx.x, vertexIdx.y+2, vertexIdx.z] + vertex[vertexIdx.x, vertexIdx.y-2, vertexIdx.z])
+ vertex[vertexIdx.x, vertexIdx.y+3, vertexIdx.z] + vertex[vertexIdx.x, vertexIdx.y-3, vertexIdx.z])};
} }
Preprocessed Scalar Preprocessed Scalar
der6y_upwd(in Scalar vertex), der6y_upwd(in Scalar vertex)
{ {
return (Scalar){(1.0/60.0)*inv_ds* ( Scalar inv_ds = DCONST_REAL(AC_inv_dsy);
- 20.0* vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z]
+ 15.0*(vertex[vertexIdx.x, vertexIdx.y+1, vertexIdx.z] + vertex[vertexIdx.x, vertexIdx.y-1, vertexIdx.z]) return (Scalar){ Scalar(1.0/60.0)*inv_ds* (
- 6.0*(vertex[vertexIdx.x, vertexIdx.y+2, vertexIdx.z] + vertex[vertexIdx.x, vertexIdx.y-2, vertexIdx.z]) -Scalar( 20.0)* vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z]
+ vertex[vertexIdx.x, vertexIdx.y+3, vertexIdx.z] + vertex[vertexIdx.x, vertexIdx.y-3, vertexIdx.z]; +Scalar( 15.0)*(vertex[vertexIdx.x, vertexIdx.y+1, vertexIdx.z] + vertex[vertexIdx.x, vertexIdx.y-1, vertexIdx.z])
)} -Scalar( 6.0)*(vertex[vertexIdx.x, vertexIdx.y+2, vertexIdx.z] + vertex[vertexIdx.x, vertexIdx.y-2, vertexIdx.z])
+ vertex[vertexIdx.x, vertexIdx.y+3, vertexIdx.z] + vertex[vertexIdx.x, vertexIdx.y-3, vertexIdx.z])};
} }
Preprocessed Scalar Preprocessed Scalar
der6z_upwd(in Scalar vertex), der6z_upwd(in Scalar vertex)
{ {
return (Scalar){(1.0/60.0)*inv_ds* ( Scalar inv_ds = DCONST_REAL(AC_inv_dsz);
- 20.0* vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z]
+ 15.0*(vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z+1] + vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z-1]) return (Scalar){ Scalar(1.0/60.0)*inv_ds* (
- 6.0*(vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z+2] + vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z-2]) -Scalar( 20.0)* vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z]
+ vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z+3] + vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z-3]; +Scalar( 15.0)*(vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z+1] + vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z-1])
)} -Scalar( 6.0)*(vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z+2] + vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z-2])
+ vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z+3] + vertex[vertexIdx.x, vertexIdx.y, vertexIdx.z-3])};
} }
Preprocessed Matrix Preprocessed Matrix

View File

@@ -3,7 +3,7 @@
#define LTEMPERATURE (0) #define LTEMPERATURE (0)
#define LGRAVITY (0) #define LGRAVITY (0)
#define LFORCING (1) #define LFORCING (1)
#define LUPWD (0) #define LUPWD (1)
// Declare uniforms (i.e. device constants) // Declare uniforms (i.e. device constants)
@@ -28,13 +28,6 @@ uniform int ny;
uniform int nz; uniform int nz;
Scalar
upwd_der6(in Vector uu, in Scalar lnrho)
{
return (Scalar){uu.x*der6x_upwd(lnrho) + uu.y*der6y_upwd(lnrho) + uu.z*der6z_upwd(lnrho)}
}
Vector Vector
value(in Vector uu) value(in Vector uu)
@@ -42,6 +35,17 @@ value(in Vector uu)
return (Vector){value(uu.x), value(uu.y), value(uu.z)}; return (Vector){value(uu.x), value(uu.y), value(uu.z)};
} }
#if LUPWD
Scalar
upwd_der6(in Vector uu, in Scalar lnrho)
{
Scalar uux = value(uu).x;
Scalar uuy = value(uu).y;
Scalar uuz = value(uu).z;
return (Scalar){uux*der6x_upwd(lnrho) + uuy*der6y_upwd(lnrho) + uuz*der6z_upwd(lnrho)};
}
#endif
Matrix Matrix
gradients(in Vector uu) gradients(in Vector uu)
{ {
@@ -54,7 +58,7 @@ continuity(in Vector uu, in Scalar lnrho) {
#if LUPWD #if LUPWD
//This is a corrective hyperdiffusion term for upwinding. //This is a corrective hyperdiffusion term for upwinding.
+ upwd_der6(uu, lnrho) + upwd_der6(uu, lnrho)
#ENDIF #endif
- divergence(uu); - divergence(uu);
} }