[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