Esempio n. 1
0
  public void update_flows() {

    if (isTerminal) return;

    int e, i, j;
    Scenario myScenario = myNetwork.getMyScenario();
    int numEnsemble = myScenario.get.numEnsemble();
    int numVTypes = myScenario.get.numVehicleTypes();

    // Select a nominal split ratio from profile, event, or controller
    if (istrivialsplit) {
      // nominal is all ones
      splitratio_nominal = BeatsMath.ones(nIn, nOut, numVTypes);
    } else {
      sample_split_ratio_profile();
      sample_split_controller();
    }

    for (e = 0; e < numEnsemble; e++) {

      Double[][][] splitratio_perturbed;

      if (my_profile == null || istrivialsplit) {
        splitratio_perturbed = splitratio_nominal; // BeatsMath.nans(nIn,nOut,numVTypes);
      } else {
        if (!my_profile.isdeterministic()
            && my_profile
                .hasConcentrationParameters()) // &&
                                               // my_profile.isCurrentConcentrationParametersValid())
        splitratio_perturbed =
              SplitRatioPerturber.sampleFromConcentrationParametersOnce(
                  my_profile.getCurrentConcentration());
        else if (!my_profile.isdeterministic() && nOut == 2 && nIn == 1)
          splitratio_perturbed =
              SplitRatioPerturber.perturb2OutputSplitOnce(splitratio_nominal, my_profile);
        else splitratio_perturbed = splitratio_nominal;
      }

      // compute applied split ratio matrix
      Double[][][] splitratio_applied =
          istrivialsplit
              ? splitratio_perturbed
              : node_behavior.sr_solver.computeAppliedSplitRatio(splitratio_perturbed, e);

      /////////////////////////////////////////////////
      // write first to logger
      if (split_ratio_logger != null && e == 0) split_ratio_logger.write(splitratio_applied);
      /////////////////////////////////////////////////

      // compute node flows ..........................................
      Node_FlowSolver.IOFlow IOflow =
          node_behavior.flow_solver.computeLinkFlows(splitratio_applied, e);

      if (IOflow == null) return;

      // assign flow to input links ..................................
      for (i = 0; i < nIn; i++) input_link[i].setOutflow(e, IOflow.getIn(i));

      // assign flow to output links .................................
      for (j = 0; j < nOut; j++) output_link[j].setInflow(e, IOflow.getOut(j));
    }
  }