Changeset 6263


Ignore:
Timestamp:
Apr 25, 2014 10:30:56 AM (6 years ago)
Author:
nlandin
Message:

Changed so that import uses operator 'at' instead of timedVariable when importing timedVariables + updated some test cases. #3598

Location:
branches/NewXMLExport
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • branches/NewXMLExport/ModelicaCasADiInterface/src/transferXML.cpp

    r6243 r6263  
    122122        if (!strcmp(child->Value(), "class") && !strcmp(child->Attribute("kind"), "function")) {
    123123            // function transfers are handled in its own method for clarity
     124            /*if (m->getModelFunction(elem->Attribute("name")) == NULL) {
     125                transferFunction(m, elem);
     126            }*/
    124127            transferFunction(m, elem);
    125128        } else if (!strcmp(child->Value(), "class") && !strcmp(child->Attribute("kind"), "record")) {
     
    227230/**
    228231 * Construct an MXFunction from the XML and adds it to the model
    229  * TODO: Split up in several smaller parts, one for handling assignments and one for functioncalls
    230232 */
    231233void transferFunction(Ref<Model> m, XMLElement* elem) {
     
    376378    XMLElement* right = stmt->FirstChildElement()->NextSiblingElement()->FirstChildElement()->FirstChildElement();
    377379    string funcName = right->FirstChildElement()->Attribute("name");
     380    /*if (m->getModelFunction(funcName) == NULL) {
     381        // add function before calling it
     382        addFunc(funcName, stmt, m);
     383    }*/
    378384    CasADi::MXFunction f = m->getModelFunction(funcName)->getMx();
    379385    MXVector argVec = MXVector();
     
    736742        XMLElement* func = call->FirstChildElement();
    737743        string funcName = func->FirstChildElement()->Attribute("name");
     744        /*if (m->getModelFunction(funcName) == NULL) {
     745            addFunc(funcName, call, m);
     746        }*/
    738747        CasADi::MXFunction f = m->getModelFunction(funcName)->getMx();
    739748        MXVector argVec = MXVector();
     
    763772}
    764773
     774/**
     775 * Takes a reference to an operator in the XML document and convert this
     776 * operator to a corresponding MX expression. If the operator is not supported,
     777 * an error is thrown.
     778 */
    765779MX operatorToMx(Ref<Model> m, XMLElement* op) {
    766780    if (!strcmp(op->Attribute("name"), "der")) {
     
    963977
    964978/**
    965  * Check if an variable has an derivative variable linked to it
     979 * Check if an variable has a derivative variable linked to it
    966980 */
    967981bool hasDerivativeVar(Ref<Model> m, Ref<RealVariable> realVar) {
     
    973987
    974988/**
    975  * Convert an basetype string to the actual object type
     989 * Convert a basetype string to the actual object type
    976990 */
    977991Ref<ModelicaCasADi::PrimitiveType> getBaseType(Ref<Model> m, string baseTypeName) {
     
    11241138    return arrayVars;
    11251139}
     1140
     1141/**
     1142 * Finds a specific function in the XML and adds it to the model. Used to
     1143 * ensure that all functions are added before they are called.
     1144 
     1145void addFunc(string funcName, XMLElement* elem, Ref<Model> m) {
     1146    // get to rootnode of document and then find the function
     1147    XMLElement* function;
     1148    for (XMLElement* parent = elem->Parent()->ToElement(); parent != NULL; parent = parent->Parent()->ToElement()) {
     1149        function = parent;
     1150    }
     1151
     1152    for (XMLElement* func = function->FirstChildElement(); func != NULL; func = func->NextSiblingElement()) {
     1153        if (!strcmp(func->Value(), "classDefinition") && func->Attribute("name") != NULL &&
     1154            !strcmp(func->Attribute("name"), funcName.c_str())) {
     1155                transferFunction(m, func);
     1156                break;
     1157        }
     1158    }
     1159}*/
     1160
    11261161}; // end namespace
  • branches/NewXMLExport/ModelicaCasADiInterface/src/transferXML.hpp

    r6243 r6263  
    8989int calculateFlatArrayIndex(ModelicaCasADi::Ref<ModelicaCasADi::Model> m, tinyxml2::XMLElement* reference, std::string functionName);
    9090std::vector<std::string> getArrayVariables(tinyxml2::XMLElement* elem, std::string functionName);
     91//void addFunc(std::string funcName, tinyxml2::XMLElement* elem, ModelicaCasADi::Ref<ModelicaCasADi::Model> m);
    9192
    9293};
  • branches/NewXMLExport/ModelicaCasADiInterface/src/transferXMLOptimization.cpp

    r6243 r6263  
    1414along with this program.  If not, see <http://www.gnu.org/licenses/>.
    1515*/
    16 
    1716
    1817#include "transferXMLOptimization.hpp"
     
    5150        bool mayerSet = false;
    5251        for (XMLElement* rootChild = root->FirstChildElement(); rootChild != NULL; rootChild = rootChild->NextSiblingElement()) {
    53             /*if (!strcmp(rootChild->Value(), "component") || !strcmp(rootChild->Value(), "classDefinition")) {
    54                 transferVariables(optProblem, rootChild);
    55             } else if (!strcmp(rootChild->Value(), "equation")) {
    56                 const char* equType = rootChild->Attribute("kind");
    57                 if (equType != NULL) {
    58                     if (!strcmp(equType, "initial")) {
    59                         // handle initial equations
    60                         transferInitialEquations(optProblem, rootChild);
    61                     } else if (!strcmp(equType, "parameter")) {
    62                         transferParameters(optProblem, rootChild);
    63                     }
    64                 } else {
    65                     // handle equations
    66                     transferEquations(optProblem, rootChild);
    67                 }
    68             } else*/
    6952            if (!strcmp(rootChild->Value(), "objective")) {
    7053                mayerSet = true;
     
    120103                MX lhsMx = MX();
    121104                MX rhsMx = MX();
    122                 if (!strcmp(lhs->Value(), "timedVariable")) {
     105                if (!strcmp(lhs->Value(), "operator") && !strcmp(lhs->Attribute("name"), "at")) {
    123106                    lhsMx = timedVarToMx(optProblem, lhs);
    124107                } else {
    125108                    lhsMx = expressionToMx(optProblem, lhs);
    126109                }
    127                 if (!strcmp(rhs->Value(), "timedVariable")) {
     110                if (!strcmp(rhs->Value(), "operator") && !strcmp(rhs->Attribute("name"), "at")) {
    128111                    rhsMx = timedVarToMx(optProblem, rhs);
    129112                } else {
     
    134117                MX lhsMx = MX();
    135118                MX rhsMx = MX();
    136                 if (!strcmp(lhs->Value(), "timedVariable")) {
     119                if (!strcmp(lhs->Value(), "operator") && !strcmp(lhs->Attribute("name"), "at")) {
    137120                    lhsMx = timedVarToMx(optProblem, lhs);
    138121                } else {
    139122                    lhsMx = expressionToMx(optProblem, lhs);
    140123                }
    141                 if (!strcmp(rhs->Value(), "timedVariable")) {
     124                if (!strcmp(rhs->Value(), "operator") && !strcmp(rhs->Attribute("name"), "at")) {
    142125                    rhsMx = timedVarToMx(optProblem, rhs);
    143126                } else {
  • branches/NewXMLExport/Python/src/tests_jmodelica/files/XML/atomicOptimizationEQpoint.xml

    r6216 r6263  
    1616        </bindingExpression>
    1717    </component>
    18     <timedVariable>
     18    <operator name="at">
    1919        <local name="x1"/>
    2020        <local name="finalTime"/>
    21     </timedVariable>
     21    </operator>
    2222
    2323    <equation>
     
    3535    <constraint>
    3636        <equal kind="pointConstraint">
    37             <timedVariable>
     37            <operator name="at">
    3838                <local name="x1"/>
    3939                <local name="finalTime"/>
    40             </timedVariable>
     40            </operator>
    4141            <real value="1.0"/>
    4242        </equal>
  • branches/NewXMLExport/Python/src/tests_jmodelica/files/XML/atomicOptimizationGEQandLEQandEQpoint.xml

    r6216 r6263  
    3737        </bindingExpression>
    3838    </component>
    39     <timedVariable>
     39    <operator name="at">
    4040        <local name="x1"/>
    4141        <call builtin="+">
     
    4343            <integer value="1"/>
    4444        </call>
    45     </timedVariable>
    46     <timedVariable>
     45    </operator>
     46    <operator name="at">
    4747        <local name="x2"/>
    4848        <call builtin="+">
     
    5050            <integer value="1"/>
    5151        </call>
    52     </timedVariable>
    53     <timedVariable>
     52    </operator>
     53    <operator name="at">
    5454        <local name="x2"/>
    5555        <call builtin="+">
     
    5757            <integer value="1"/>
    5858        </call>
    59     </timedVariable>
     59    </operator>
    6060
    6161    <equation>
     
    9191    <constraint>
    9292        <lessThan kind="pointConstraint">
    93             <timedVariable>
     93            <operator name="at">
    9494                <local name="x2"/>
    9595                <call builtin="+">
     
    9797                    <integer value="1"/>
    9898                </call>
    99             </timedVariable>
     99            </operator>
    100100            <real value="1.0"/>
    101101        </lessThan>
    102102        <equal kind="pointConstraint">
    103             <timedVariable>
     103            <operator name="at">
    104104                <local name="x2"/>
    105105                <call builtin="+">
     
    107107                    <integer value="1"/>
    108108                </call>
    109             </timedVariable>
     109            </operator>
    110110            <real value="1.0"/>
    111111        </equal>
    112112        <greaterThan kind="pointConstraint">
    113             <timedVariable>
     113            <operator name="at">
    114114                <local name="x1"/>
    115115                <call builtin="+">
     
    117117                    <integer value="1"/>
    118118                </call>
    119             </timedVariable>
     119            </operator>
    120120            <real value="1.0"/>
    121121        </greaterThan>
  • branches/NewXMLExport/Python/src/tests_jmodelica/files/XML/atomicOptimizationGEQpoint.xml

    r6216 r6263  
    2121        </bindingExpression>
    2222    </component>
    23     <timedVariable>
     23    <operator name="at">
    2424        <local name="x1"/>
    2525        <local name="finalTime"/>
    26     </timedVariable>
     26    </operator>
    2727
    2828    <equation>
     
    4040    <constraint>
    4141        <greaterThan kind="pointConstraint">
    42             <timedVariable>
     42            <operator name="at">
    4343                <local name="x1"/>
    4444                <local name="finalTime"/>
    45             </timedVariable>
     45            </operator>
    4646            <real value="1.0"/>
    4747        </greaterThan>
  • branches/NewXMLExport/Python/src/tests_jmodelica/files/XML/atomicOptimizationLEQpoint.xml

    r6216 r6263  
    2121        </bindingExpression>
    2222    </component>
    23     <timedVariable>
     23    <operator name="at">
    2424        <local name="x1"/>
    2525        <local name="finalTime"/>
    26     </timedVariable>
     26    </operator>
    2727
    2828    <equation>
     
    4040    <constraint>
    4141        <lessThan kind="pointConstraint">
    42             <timedVariable>
     42            <operator name="at">
    4343                <local name="x1"/>
    4444                <local name="finalTime"/>
    45             </timedVariable>
     45            </operator>
    4646            <real value="1.0"/>
    4747        </lessThan>
  • branches/NewXMLExport/Python/src/tests_jmodelica/files/XML/atomicOptimizationMixedConstraints.xml

    r6216 r6263  
    3737        </bindingExpression>
    3838    </component>
    39     <timedVariable>
     39    <operator name="at">
    4040        <local name="x1"/>
    4141        <call builtin="+">
     
    4343            <integer value="1"/>
    4444        </call>
    45     </timedVariable>
    46     <timedVariable>
     45    </operator>
     46    <operator name="at">
    4747        <local name="x2"/>
    4848        <call builtin="+">
     
    5050            <integer value="1"/>
    5151        </call>
    52     </timedVariable>
    53     <timedVariable>
     52    </operator>
     53    <operator name="at">
    5454        <local name="x3"/>
    5555        <call builtin="+">
     
    5757            <integer value="1"/>
    5858        </call>
    59     </timedVariable>
     59    </operator>
    6060
    6161    <equation>
     
    9191    <constraint>
    9292        <lessThan kind="pathConstraint">
    93             <timedVariable>
     93            <operator name="at">
    9494                <local name="x3"/>
    9595                <call builtin="+">
     
    9797                    <integer value="1"/>
    9898                </call>
    99             </timedVariable>
     99            </operator>
    100100            <local name="x1"/>
    101101        </lessThan>
    102102        <lessThan kind="pointConstraint">
    103             <timedVariable>
     103            <operator name="at">
    104104                <local name="x2"/>
    105105                <call builtin="+">
     
    107107                    <integer value="1"/>
    108108                </call>
    109             </timedVariable>
     109            </operator>
    110110            <real value="1.0"/>
    111111        </lessThan>
    112112        <greaterThan kind="pointConstraint">
    113             <timedVariable>
     113            <operator name="at">
    114114                <local name="x1"/>
    115115                <call builtin="+">
     
    117117                    <integer value="1"/>
    118118                </call>
    119             </timedVariable>
     119            </operator>
    120120            <real value="1.0"/>
    121121        </greaterThan>
Note: See TracChangeset for help on using the changeset viewer.