|
From: <de...@us...> - 2013-01-16 21:27:39
|
Revision: 8215
http://fudaa.svn.sourceforge.net/fudaa/?rev=8215&view=rev
Author: deniger
Date: 2013-01-16 21:27:32 +0000 (Wed, 16 Jan 2013)
Log Message:
-----------
optimisation maillage important
Modified Paths:
--------------
trunk/business/fudaa-ef/io/src/main/java/org/fudaa/dodico/ef/io/triangle/TriangleEleNodeGridCreator.java
Modified: trunk/business/fudaa-ef/io/src/main/java/org/fudaa/dodico/ef/io/triangle/TriangleEleNodeGridCreator.java
===================================================================
--- trunk/business/fudaa-ef/io/src/main/java/org/fudaa/dodico/ef/io/triangle/TriangleEleNodeGridCreator.java 2013-01-16 21:27:04 UTC (rev 8214)
+++ trunk/business/fudaa-ef/io/src/main/java/org/fudaa/dodico/ef/io/triangle/TriangleEleNodeGridCreator.java 2013-01-16 21:27:32 UTC (rev 8215)
@@ -6,10 +6,18 @@
import gnu.trove.TIntIntHashMap;
import java.io.File;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.BitSet;
import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.fudaa.ctulu.CtuluIOResult;
import org.fudaa.ctulu.CtuluLog;
+import org.fudaa.ctulu.CtuluProgressionBarAdapter;
import org.fudaa.ctulu.ProgressionInterface;
import org.fudaa.ctulu.ProgressionUpdater;
import org.fudaa.dodico.ef.EfElement;
@@ -56,17 +64,66 @@
* @return r\xE9sultat de l'op\xE9ration de lecture.
*/
public CtuluIOResult<EFGridArrayZ> readGrid(File nodeFile, File eltFile) {
- CtuluIOResult<TriangleNodeDataInterface> nodeRead = new TriangleNodeReader().read(nodeFile, progression);
- if (nodeRead.getSource() == null) {
- return new CtuluIOResult<EFGridArrayZ>(nodeRead.getAnalyze());
+ ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(2);
+ EFGridArrayZ grid = null;
+ CtuluIOResult<TriangleNodeDataInterface> nodeRes = null;
+ CtuluIOResult<TriangleEleData> eltRes = null;
+ try {
+ Callable<CtuluIOResult> nodeReader = new NodeReaderCallable(nodeFile, progression);
+ Callable<CtuluIOResult> eltReader = new EltReaderCallable(eltFile, progression);
+ List<Callable<CtuluIOResult>> callables = Arrays.asList(nodeReader, eltReader);
+ List<Future<CtuluIOResult>> invokeAll = newFixedThreadPool.invokeAll(callables);
+ nodeRes = (CtuluIOResult<TriangleNodeDataInterface>) invokeAll.get(0).get();
+ eltRes = (CtuluIOResult<TriangleEleData>) invokeAll.get(1).get();
+ } catch (Exception e) {
+ Logger.getLogger(TriangleEleNodeGridCreator.class.getName()).log(Level.INFO, "message {0}", e);
+ } finally {
+ newFixedThreadPool.shutdownNow();
}
- CtuluIOResult<TriangleEleData> eleRead = new TriangleEleReader().read(eltFile, progression);
- if (eleRead.getSource() == null) {
- return new CtuluIOResult<EFGridArrayZ>(eleRead.getAnalyze());
+ if (nodeRes != null && nodeRes.getSource() == null) {
+ return new CtuluIOResult<EFGridArrayZ>(nodeRes.getAnalyze());
}
- return createGrid(nodeRead.getSource(), eleRead.getSource());
+ if (eltRes != null && eltRes.getSource() == null) {
+ return new CtuluIOResult<EFGridArrayZ>(eltRes.getAnalyze());
+ }
+ if (nodeRes != null && nodeRes.getSource() != null && eltRes != null && eltRes.getSource() != null) {
+ return createGrid(nodeRes.getSource(), eltRes.getSource());
+ }
+ return new CtuluIOResult<EFGridArrayZ>();
}
+ private class NodeReaderCallable implements Callable<CtuluIOResult> {
+
+ private final File nodeFile;
+ ProgressionInterface progression;
+
+ public NodeReaderCallable(File nodeFile, ProgressionInterface progression) {
+ this.nodeFile = nodeFile;
+ this.progression = progression;
+ }
+
+ @Override
+ public CtuluIOResult call() throws Exception {
+ return new TriangleNodeReader().read(nodeFile, progression);
+ }
+ }
+
+ private class EltReaderCallable implements Callable<CtuluIOResult> {
+
+ private final File eltFile;
+ ProgressionInterface progression;
+
+ public EltReaderCallable(File eltFile, ProgressionInterface progression) {
+ this.eltFile = eltFile;
+ this.progression = progression;
+ }
+
+ @Override
+ public CtuluIOResult call() throws Exception {
+ return new TriangleEleReader().read(eltFile, progression);
+ }
+ }
+
CtuluIOResult<EFGridArrayZ> createGrid(TriangleNodeDataInterface nodes, TriangleEleData elts) {
EfNode[] efNodes = new EfNode[nodes.getPtsNb()];
boolean useZ = useFirstAttributesAsZ && nodes.getNbAttributes() >= 1;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|