view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation1.java @ 723:8900966ad945

"Abflusskurve am Pegel" looks correct again. flys-artifacts/trunk@2201 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 22 Jun 2011 10:54:30 +0000
parents 3b7e9ddf6bb1
children 5abdb2fa8eb1
line wrap: on
line source
package de.intevation.flys.artifacts.model;

import java.util.ArrayList;

import org.apache.log4j.Logger;

public class Calculation1
extends      Calculation
{
    private static Logger logger = Logger.getLogger(Calculation1.class);

    protected double [] kms;
    protected double [] qs;
    protected double [] ws;
    protected boolean   up;
    protected double    refKm;

    public Calculation1() {
    }

    public Calculation1(
        double [] kms, 
        double [] qs, 
        double [] ws,
        double    refKm,
        boolean   up
    ) {
        this.kms   = kms;
        this.qs    = qs;
        this.ws    = ws;
        this.refKm = refKm;
        this.up    = up;
    }

    public CalculationResult calculate(WstValueTable wst) {

        ArrayList<WQKms> results = new ArrayList<WQKms>();

        double ref = Double.isNaN(refKm)
            ? kms[up ? 0 : kms.length-1]
            : refKm;

        String    prefix;
        double [] origData;

        if (ws != null) { prefix = "W="; origData = ws; }
        else            { prefix = "Q="; origData = qs; }

        int oldNumProblems = numProblems();

        for (int i = 0; i < qs.length; i++) {

            double [] oqs = new double[kms.length];
            double [] ows = new double[kms.length];

            boolean success =
                wst.interpolate(qs[i], ref, kms, ows, oqs, this) != null;

            int newNumProblems = numProblems();

            if (success) {
                WQKms result = new WQKms(kms, oqs, ows, prefix + origData[i]);
                if (oldNumProblems != newNumProblems) {
                    logger.debug(
                        qs[i] + " caused " + (newNumProblems-oldNumProblems) + 
                        " new problem(s).");
                    result.removeNaNs();
                }
                results.add(result);
            }

            oldNumProblems = newNumProblems;
        }
        
        return new CalculationResult(
            results.toArray(new WQKms[results.size()]),
            this);
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org