Beispiel #1
0
  private void realResolve(Lems lems, Parser parser) throws ContentError, ParseError {
    if (lems.looseResolving()) {
      // then we expose anything with a name that matches the name of an exposure
      HashSet<String> expHS = new HashSet<String>();
      for (Exposure exp : getComponentType().getExposures()) {
        expHS.add(exp.getName());
      }

      for (StateVariable sv : stateVariables) {
        if (sv.exposure == null && expHS.contains(sv.name)) {
          sv.exposure = sv.name;
          E.shortWarning(
              "Implicitly exposing a state variable because its name matches an exposure: " + sv);
        }
      }
      for (DerivedVariable dv : derivedVariables) {
        if (dv.exposure == null && expHS.contains(dv.name)) {
          dv.exposure = dv.name;
          E.shortWarning(
              "Implicitly exposing a derived variable because its name matches an exposure: " + dv);
        }
      }

      for (ConditionalDerivedVariable dv : conditionalDerivedVariables) {
        if (dv.exposure == null && expHS.contains(dv.name)) {
          dv.exposure = dv.name;
          E.shortWarning(
              "Implicitly exposing a derived variable because its name matches an exposure: " + dv);
        }
      }
    }

    HashMap<String, Integer> exposedHM = new HashMap<String, Integer>();

    for (Requirement req : getComponentType().getRequirements()) {
      p_requiredVars.add(new RequiredVar(req.getName(), req.getDimension()));
    }

    for (Exposure exp : getComponentType().getExposures()) {
      p_exposedVars.add(new ExposedVar(exp.getName(), exp.getDimension()));
      exposedHM.put(exp.getName(), 0);
    }

    checkMakeValHM();

    addToMap(lems.getGlobals(), valHM);

    addToMap(lems.getConstantValueds(), valHM);

    for (DerivedVariable dvar : derivedVariables) {
      dvar.resolve(lems, lems.getDimensions(), r_type, valHM, parser);
      if (dvar.hasExposure()) {
        countExposure(dvar.getExposure(), exposedHM);
      }
    }

    for (ConditionalDerivedVariable dvar : conditionalDerivedVariables) {
      dvar.resolve(lems, lems.getDimensions(), r_type, valHM, parser);
      if (dvar.hasExposure()) {
        countExposure(dvar.getExposure(), exposedHM);
      }
    }

    for (StateVariable sv : stateVariables) {
      sv.resolve(r_type, lems.getDimensions());
      if (sv.hasExposure()) {
        countExposure(sv.getExposure(), exposedHM);
      }
    }

    for (StateScalarField scf : stateScalarFields) {
      scf.resolve(r_type, lems.getDimensions());
    }

    for (DerivedScalarField dcf : derivedScalarFields) {
      dcf.resolve(r_type, lems.getDimensions());
    }

    for (DerivedPunctateField dpf : derivedPunctateFields) {
      dpf.resolve(r_type, lems.getDimensions());
    }

    for (TimeDerivative sd : timeDerivatives) {
      sd.resolve(stateVariables, valHM, parser);
    }

    for (OnStart os : onStarts) {
      os.resolve(this, stateVariables, valHM, parser);
    }

    for (OnEvent oe : onEvents) {
      oe.resolve(this, stateVariables, valHM, parser);
    }

    for (OnCondition oc : onConditions) {
      oc.resolve(this, stateVariables, valHM, parser);
    }

    for (Regime reg : regimes) {
      reg.setBehavior(this);
      reg.resolve(stateVariables, lems, parser, exposedHM);
    }

    for (KineticScheme ks : kineticSchemes) {
      ks.resolve(r_type);
    }

    for (String enm : exposedHM.keySet()) {
      if (exposedHM.get(enm) == 0) {
        E.oneLineWarning(
            "No internal variable is linked to the exposure: "
                + enm
                + " for ComponentType "
                + getComponentType().getName());
      }
    }
  }