|
From: <de...@us...> - 2011-01-10 21:18:42
|
Revision: 6073
http://fudaa.svn.sourceforge.net/fudaa/?rev=6073&view=rev
Author: deniger
Date: 2011-01-10 21:18:36 +0000 (Mon, 10 Jan 2011)
Log Message:
-----------
Modified Paths:
--------------
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/cubature/EfComputeVolume.java
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/cubature/EfComputeVolumeSeuil.java
Modified: trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/cubature/EfComputeVolume.java
===================================================================
--- trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/cubature/EfComputeVolume.java 2011-01-08 02:38:30 UTC (rev 6072)
+++ trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/cubature/EfComputeVolume.java 2011-01-10 21:18:36 UTC (rev 6073)
@@ -11,9 +11,6 @@
*/
package org.fudaa.dodico.ef.cubature;
-import gnu.trove.TIntArrayList;
-import gnu.trove.TIntObjectHashMap;
-
import java.io.IOException;
import com.memoire.fu.FuLog;
@@ -23,14 +20,11 @@
import org.fudaa.ctulu.CtuluVariable;
import org.fudaa.ctulu.ProgressionInterface;
import org.fudaa.ctulu.ProgressionUpdater;
-
import org.fudaa.dodico.commun.DodicoLib;
import org.fudaa.dodico.ef.EfData;
-import org.fudaa.dodico.ef.EfElement;
import org.fudaa.dodico.ef.EfFilter;
import org.fudaa.dodico.ef.EfFilterNone;
import org.fudaa.dodico.ef.EfGridData;
-import org.fudaa.dodico.ef.EfGridInterface;
/**
* Permet de calculer le volume d'eau sur une s\xE9lection d'\xE9l\xE9ment ou de noeuds.
@@ -41,65 +35,37 @@
public abstract class EfComputeVolume implements CtuluActivity {
public static class ForMeshData extends EfComputeVolume {
+ EfComputeVolumeSeuil.ForMeshData seuil;
ForMeshData(final EfFilter _filter, final ProgressionInterface _prog, final EfGridData _data,
final CtuluVariable _hVar) {
super(_filter, _prog, _data, _hVar);
}
- double computeVolume(final EfGridInterface _grid, final EfData _h) {
- double resi = 0;
- for (int ielt = 0; ielt < _grid.getEltNb(); ielt++) {
- if (filter_.isActivatedElt(ielt)) {
- resi += _grid.getAire(ielt) * _h.getValue(ielt);
- }
- }
- return resi;
+ double computeVolume(final EfData _h) {
+ return seuil.computeVolume(_h).getResultat();
}
}
public static class ForNodeData extends EfComputeVolume {
+ EfComputeVolumeSeuil.ForNodeData seuil;
ForNodeData(final EfFilter _filter, final ProgressionInterface _prog, final EfGridData _data,
final CtuluVariable _hVar) {
super(_filter, _prog, _data, _hVar);
+ seuil = new EfComputeVolumeSeuil.ForNodeData(_filter, _prog, _data, _hVar, 0);
}
- double computeVolume(final EfGridInterface _grid, final EfData _h) {
- double resi = 0;
- for (int ielt = 0; ielt < _grid.getEltNb(); ielt++) {
- // le calcul du volume se fait:
- // Volume=(surface des elements adjacents)* hauteur au point /3
- if (filter_.isActivatedElt(ielt, true)) {
- // liste des elements adjacents.
- // s est la surface des elements adjacents.
- EfElement elt = _grid.getElement(ielt);
- int nbElt = elt.getPtNb();
- double s = 0D;
- for (int k = 0; k < nbElt; k++) {
- s = s + _h.getValue(elt.getPtIndex(k));
- }
- // la formule qui tue
- resi += s * _grid.getAire(ielt) / ((double)nbElt);
- }
- }
- return resi;
+ double computeVolume(final EfData _h) {
+ return seuil.computeVolume(_h).getResultat();
}
- public double[] getVolume(final int _nbTimeStep) {
- computeNeighborMeshes();
- return super.getVolume(_nbTimeStep);
- }
}
final EfGridData data_;
final EfFilter filter_;
final CtuluVariable h_;
- /**
- * Stocke indice du noeuds -> list element adjacent. Pour les noeuds s\xE9lecionn\xE9s uniquement
- */
- TIntObjectHashMap idxPtAdjMes_;
ProgressionInterface prog_;
boolean stop_;
@@ -124,42 +90,10 @@
filter_ = _filter == null ? new EfFilterNone() : _filter;
}
- abstract double computeVolume(final EfGridInterface _grid, EfData _h);
+ abstract double computeVolume(EfData _h);
- protected void computeNeighborMeshes() {
- if (idxPtAdjMes_ != null) { return; }
- final ProgressionUpdater up = new ProgressionUpdater(prog_);
- final EfGridInterface grid = data_.getGrid();
- up.setValue(10, grid.getEltNb());
- up.majProgessionStateOnly(DodicoLib.getS("Recherche des \xE9l\xE9ments voisins"));
- idxPtAdjMes_ = new TIntObjectHashMap(grid.getPtsNb());
- for (int i = 0; i < grid.getEltNb(); i++) {
- if (stop_) {
- idxPtAdjMes_ = null;
- return;
- }
- final EfElement elt = grid.getElement(i);
- for (int j = 0; j < elt.getPtNb(); j++) {
- final int ptIndex = elt.getPtIndex(j);
- // si le noeud est s\xE9lectionne
- if (filter_.isActivated(ptIndex)) {
- TIntArrayList list = (TIntArrayList) idxPtAdjMes_.get(ptIndex);
- // ce noeud n'a pas encore \xE9t\xE9 trait\xE9
- if (list == null) {
- list = new TIntArrayList(10);
- idxPtAdjMes_.put(ptIndex, list);
- }
- list.add(i);
-
- }
- }
- up.majAvancement();
- }
- }
-
public double[] getVolume(final int _nbTimeStep) {
final ProgressionUpdater up = new ProgressionUpdater(prog_);
- final EfGridInterface grid = data_.getGrid();
up.setValue(10, _nbTimeStep);
final double[] res = new double[_nbTimeStep];
up.majProgessionStateOnly(DodicoLib.getS("Calcul du volume"));
@@ -173,7 +107,7 @@
}
if (h == null) { return null; }
- res[i] = computeVolume(grid, h);
+ res[i] = computeVolume(h);
up.majAvancement();
}
return res;
Modified: trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/cubature/EfComputeVolumeSeuil.java
===================================================================
--- trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/cubature/EfComputeVolumeSeuil.java 2011-01-08 02:38:30 UTC (rev 6072)
+++ trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/cubature/EfComputeVolumeSeuil.java 2011-01-10 21:18:36 UTC (rev 6073)
@@ -1,10 +1,9 @@
package org.fudaa.dodico.ef.cubature;
-import gnu.trove.TIntArrayList;
-import gnu.trove.TIntObjectHashMap;
-
import java.io.IOException;
+import com.memoire.fu.FuLog;
+
import org.fudaa.ctulu.CtuluActivity;
import org.fudaa.ctulu.CtuluAnalyze;
import org.fudaa.ctulu.CtuluVariable;
@@ -16,10 +15,7 @@
import org.fudaa.dodico.ef.EfFilter;
import org.fudaa.dodico.ef.EfFilterNone;
import org.fudaa.dodico.ef.EfGridData;
-import org.fudaa.dodico.ef.EfGridInterface;
-import com.memoire.fu.FuLog;
-
/**
* Calcul du volume par rapport a un seuil et non plus 0.
*
@@ -34,12 +30,12 @@
super(_filter, _prog, _data, _hVar, seuil);
}
- EfDataIntegrale computeVolume(final EfGridInterface _grid, final EfData _h) {
+ protected EfDataIntegrale computeVolume(final EfData _h) {
EfDataIntegrale resi = new EfDataIntegrale();
- for (int ielt = 0; ielt < _grid.getEltNb(); ielt++) {
+ for (int ielt = 0; ielt < data_.getGrid().getEltNb(); ielt++) {
if (filter_.isActivatedElt(ielt)) {
- double value = _grid.getAire(ielt) * (_h.getValue(ielt) - seuil_);// Todo je pense que c'est la diff
+ double value = data_.getGrid().getAire(ielt) * (_h.getValue(ielt) - seuil_);// Todo je pense que c'est la diff
resi.add(value);
}
}
@@ -54,32 +50,28 @@
super(_filter, _prog, _data, _hVar, seuil);
}
- EfDataIntegrale computeVolume(final EfGridInterface _grid, final EfData _h) {
+ protected EfDataIntegrale computeVolume(final EfData _h) {
EfDataIntegrale resi = new EfDataIntegrale();
- for (int ipt = 0; ipt < _grid.getPtsNb(); ipt++) {
+ for (int ielt = 0; ielt < data_.getGrid().getEltNb(); ielt++) {
// le calcul du volume se fait:
// Volume=(surface des elements adjacents)* hauteur au point /3
- if (filter_.isActivated(ipt)) {
+ if (filter_.isActivatedElt(ielt, true)) {
// liste des elements adjacents.
- final TIntArrayList list = (TIntArrayList) idxPtAdjMes_.get(ipt);
- // la liste est nulle: ne devrait jamais arriv\xE9: un point isol\xE9 que faire ?
- // pour l'instant on ignore.
- if (list != null) {
- // s est la surface des elements adjacents.
- double s = 0D;
- for (int k = 0; k < list.size(); k++) {
- s += _grid.getAire(list.getQuick(k));
- }
- double d = s * (_h.getValue(ipt) - seuil_) / 3D;
- resi.add(d);
+ // s est la surface des elements adjacents.
+ EfElement elt = data_.getGrid().getElement(ielt);
+ int nbElt = elt.getPtNb();
+ double s = 0D;
+ for (int k = 0; k < nbElt; k++) {
+ s = s + (_h.getValue(elt.getPtIndex(k)) - seuil_);
+
}
+ resi.add(s * data_.getGrid().getAire(ielt) / ((double) nbElt));
}
}
return resi;
}
public EfDataIntegrale getVolume(int _choosenTimestep) {
- computeNeighborMeshes();
return super.getVolume(_choosenTimestep);
}
}
@@ -90,10 +82,6 @@
// protected final int timeStep_;
protected final double seuil_;
- /**
- * Stocke indice du noeuds -> list element adjacent. Pour les noeuds s\xE9lecionn\xE9s uniquement
- */
- TIntObjectHashMap idxPtAdjMes_;
ProgressionInterface prog_;
boolean stop_;
@@ -120,42 +108,12 @@
filter_ = _filter == null ? new EfFilterNone() : _filter;
}
- abstract EfDataIntegrale computeVolume(final EfGridInterface _grid, EfData _h);
+ protected abstract EfDataIntegrale computeVolume(EfData _h);
- protected void computeNeighborMeshes() {
- if (idxPtAdjMes_ != null) { return; }
- final ProgressionUpdater up = new ProgressionUpdater(prog_);
- final EfGridInterface grid = data_.getGrid();
- up.setValue(10, grid.getEltNb());
- up.majProgessionStateOnly(DodicoLib.getS("Recherche des \xE9l\xE9ments voisins"));
- idxPtAdjMes_ = new TIntObjectHashMap(grid.getPtsNb());
- for (int i = 0; i < grid.getEltNb(); i++) {
- if (stop_) {
- idxPtAdjMes_ = null;
- return;
- }
- final EfElement elt = grid.getElement(i);
- for (int j = 0; j < elt.getPtNb(); j++) {
- final int ptIndex = elt.getPtIndex(j);
- // si le noeud est s\xE9lectionne
- if (filter_.isActivated(ptIndex)) {
- TIntArrayList list = (TIntArrayList) idxPtAdjMes_.get(ptIndex);
- // ce noeud n'a pas encore \xE9t\xE9 trait\xE9
- if (list == null) {
- list = new TIntArrayList(10);
- idxPtAdjMes_.put(ptIndex, list);
- }
- list.add(i);
+
- }
- }
- up.majAvancement();
- }
- }
-
public EfDataIntegrale getVolume(int choosenTimestep) {
final ProgressionUpdater up = new ProgressionUpdater(prog_);
- final EfGridInterface grid = data_.getGrid();
up.setValue(10, 100);
EfDataIntegrale res;
up.majProgessionStateOnly(DodicoLib.getS("Calcul du volume"));
@@ -169,7 +127,7 @@
}
if (h == null) { return null; }
- res = computeVolume(grid, h);
+ res = computeVolume(h);
up.majAvancement();
return res;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|