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()); } } }