[SCM] Gerris Flow Solver branch, upstream, updated. e8f73a07832050124d2b8bf6c6f35b33180e65a8
Stephane Popinet
popinet at users.sf.net
Tue Nov 24 12:24:51 UTC 2009
The following commit has been merged in the upstream branch:
commit 9d44ff3c5c39e81ebcf1d852d7625a3ad83f68dc
Author: Stephane Popinet <popinet at users.sf.net>
Date: Tue Jul 28 14:37:09 2009 +1000
Fixed negative wave actions in wavewatch module
darcs-hash:20090728043709-d4795-e4c3bae3421356b942c2c9c1b0366cf0fa03bc4e.gz
diff --git a/modules/wavewatch.mod b/modules/wavewatch.mod
index 44b9ad5..133f82b 100644
--- a/modules/wavewatch.mod
+++ b/modules/wavewatch.mod
@@ -25,13 +25,9 @@
#define DEBUG 0
-/* fixme: needs to be identical to the same function in wave.c */
-#define GAMMA 1.1
-#define F0 0.04
-
static double frequency (int ik)
{
- return F0*pow(GAMMA, ik);
+ return GFS_WAVE_F0*pow(GFS_WAVE_GAMMA, ik);
}
#if DEBUG
@@ -53,19 +49,25 @@ typedef struct {
static void energy_to_action (FttCell * cell, SourceParams * p)
{
guint i, j;
+ REAL * A = p->A;
for (i = 0; i < p->wave->nk; i++)
- for (j = 0; j < p->wave->ntheta; j++)
- p->A[j + i*p->wave->ntheta] =
- GFS_VALUE (cell, p->wave->F[i][j])*p->CG[i]/(2.*M_PI*frequency (i));
+ for (j = 0; j < p->wave->ntheta; j++) {
+ *A = GFS_VALUE (cell, p->wave->F[i][j])*p->CG[i]/(2.*M_PI*frequency (i));
+ if (*A < 0.)
+ *A = 0.;
+ A++;
+ }
}
static void action_to_energy (FttCell * cell, SourceParams * p)
{
guint i, j;
+ REAL * A = p->A;
for (i = 0; i < p->wave->nk; i++)
- for (j = 0; j < p->wave->ntheta; j++)
- GFS_VALUE (cell, p->wave->F[i][j]) =
- p->A[j + i*p->wave->ntheta]*(2.*M_PI*frequency (i))/p->CG[i];
+ for (j = 0; j < p->wave->ntheta; j++) {
+ GFS_VALUE (cell, p->wave->F[i][j]) = *A*(2.*M_PI*frequency (i))/p->CG[i];
+ A++;
+ }
}
static void source (FttCell * cell, SourceParams * p)
@@ -150,7 +152,7 @@ static void initialize (GfsWave * wave)
" F F F F F T\n"
" 900. 950. 900. 300.\n"
"END OF NAMELISTS\n",
- GAMMA, F0, wave->nk, wave->ntheta);
+ GFS_WAVE_GAMMA, GFS_WAVE_F0, wave->nk, wave->ntheta);
/* Dummy wavewatch parameters */
static gchar constant_parameters[] =
@@ -203,6 +205,8 @@ static void wavewatch_source (GfsWave * wave)
GfsDomain * domain = GFS_DOMAIN (wave);
SourceParams p;
+ gfs_domain_timer_start (domain, "wavewatch_source");
+
initialize (wave);
p.wave = wave;
@@ -228,6 +232,8 @@ static void wavewatch_source (GfsWave * wave)
g_free (p.CG);
g_free (p.WN);
g_free (p.ALPHA);
+
+ gfs_domain_timer_stop (domain, "wavewatch_source");
}
/* Initialize module */
diff --git a/src/wave.c b/src/wave.c
index 366b704..e0afa3f 100644
--- a/src/wave.c
+++ b/src/wave.c
@@ -23,13 +23,10 @@
/* GfsWave: Object */
-#define F0 0.04
-#define GAMMA 1.1
-
static double frequency (int ik)
{
- double gamma = GAMMA;
- double f0 = F0;
+ double gamma = GFS_WAVE_GAMMA;
+ double f0 = GFS_WAVE_F0;
return f0*pow(gamma, ik);
}
@@ -51,14 +48,14 @@ static gdouble cell_E (FttCell * cell, FttCellFace * face, GfsDomain * domain)
GfsWave * wave = GFS_WAVE (domain);
GfsVariable *** F = wave->F;
guint ik, ith;
- gdouble E = 0., sigma = 2.*M_PI*F0, sgamma = (GAMMA - 1./GAMMA)/2.;
+ gdouble E = 0., sigma = 2.*M_PI*GFS_WAVE_F0, sgamma = (GFS_WAVE_GAMMA - 1./GFS_WAVE_GAMMA)/2.;
for (ik = 0; ik < wave->nk; ik++) {
gdouble df = sigma*sgamma;
gdouble dE = 0.;
for (ith = 0; ith < wave->ntheta; ith++)
dE += GFS_VALUE (cell, F[ik][ith]);
E += dE*df;
- sigma *= GAMMA;
+ sigma *= GFS_WAVE_GAMMA;
}
return E*2.*M_PI/wave->ntheta;
}
diff --git a/src/wave.h b/src/wave.h
index 8b458eb..fe685c9 100644
--- a/src/wave.h
+++ b/src/wave.h
@@ -28,6 +28,9 @@ extern "C" {
/* GfsWave: Header */
+#define GFS_WAVE_GAMMA 1.1
+#define GFS_WAVE_F0 0.04
+
typedef struct _GfsWave GfsWave;
struct _GfsWave {
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list