Changeset 084a836 in OpenModelica for Compiler/FrontEnd/InstUtil.mo


Ignore:
Timestamp:
2016-02-10T15:49:38+01:00 (8 years ago)
Author:
hudson <openmodelica@…>
Branches:
Added-citation-metadata, maintenance/v1.14, maintenance/v1.15, maintenance/v1.16, maintenance/v1.17, maintenance/v1.18, maintenance/v1.19, maintenance/v1.20, maintenance/v1.21, maintenance/v1.22, maintenance/v1.23, master, omlib-staging
Children:
c1ec6d8f
Parents:
a384029e
git-author:
Jan Šilar <jan.silar@…> (11/09/15 12:26:02)
git-committer:
hudson <openmodelica@…> (02/10/16 15:49:38)
Message:

PDE

boundary conditions, equations containing coordinates

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Compiler/FrontEnd/InstUtil.mo

    ra384029e r084a836  
    89448944          (N,fieldLst) = getDomNFields(inDomFieldLst,domainCr,info);
    89458945        then list(newEQFun(i, lhs_exp, rhs_exp, domainCr, comment, info, fieldLst) for i in 2:N-1);
     8946      //same as previous but with ".interior"
    89468947      case SCode.EQUATION(SCode.EQ_EQUALS(expLeft = lhs_exp, expRight = rhs_exp,
    89478948                  domainOpt = SOME(domainCr as Absyn.CREF_QUAL(name, subscripts, Absyn.CREF_IDENT(name="interior"))),
     
    89518952          (N,fieldLst) = getDomNFields(inDomFieldLst,domainCr1,info);
    89528953        then list(newEQFun(i, lhs_exp, rhs_exp, domainCr1, comment, info, fieldLst) for i in 2:N-1);
     8954      //left boundary condition
     8955      case SCode.EQUATION(SCode.EQ_EQUALS(expLeft = lhs_exp, expRight = rhs_exp,
     8956                  domainOpt = SOME(domainCr as Absyn.CREF_QUAL(name, subscripts, Absyn.CREF_IDENT(name="left"))),
     8957                  comment = comment, info = info))
     8958        equation
     8959          domainCr1 = Absyn.CREF_IDENT(name, subscripts);
     8960          (N,fieldLst) = getDomNFields(inDomFieldLst,domainCr1,info);
     8961        then
     8962          {newEQFun(1, lhs_exp, rhs_exp, domainCr1, comment, info, fieldLst)};
     8963      //right boundary condition
     8964      case SCode.EQUATION(SCode.EQ_EQUALS(expLeft = lhs_exp, expRight = rhs_exp,
     8965                  domainOpt = SOME(domainCr as Absyn.CREF_QUAL(name, subscripts, Absyn.CREF_IDENT(name="right"))),
     8966                  comment = comment, info = info))
     8967        equation
     8968          domainCr1 = Absyn.CREF_IDENT(name, subscripts);
     8969          (N,fieldLst) = getDomNFields(inDomFieldLst,domainCr1,info);
     8970        then
     8971          {newEQFun(N, lhs_exp, rhs_exp, domainCr1, comment, info, fieldLst)};
     8972
    89538973    end matchcontinue;
    89548974
     
    90389058   protected Boolean skip, failVar;
    90399059   protected Absyn.ComponentRef domainCr;
     9060   protected Absyn.Ident domName;
    90409061 algorithm
    90419062   failVar := false;
    90429063   (i, fieldLst, domainCr, info, skip) := inTup;
     9064   Absyn.CREF_IDENT(name = domName) := domainCr;
    90439065   if skip then
    90449066     outExp := inExp;
     
    90519073       list<Absyn.Subscript> subscripts;
    90529074       Absyn.ComponentRef fieldCr;
    9053 
     9075     case  Absyn.CREF(Absyn.CREF_QUAL(name = domName, subscripts = {}, componentRef=Absyn.CREF_IDENT(name="x",subscripts={})))
     9076       //coordinate x
     9077       then
     9078         Absyn.CREF(Absyn.CREF_QUAL(name = domName, subscripts = {}, componentRef=Absyn.CREF_IDENT(name="x",subscripts = {Absyn.SUBSCRIPT(Absyn.INTEGER(i))})));
    90549079     case Absyn.CREF(fieldCr as Absyn.CREF_IDENT(name, subscripts))
    90559080       //field
    90569081       equation
    9057        if not List.isMemberOnTrue(fieldCr,fieldLst,Absyn.crefEqual) then
    9058          failVar = true;
    9059          Error.addSourceMessageAndFail(Error.COMPILER_ERROR,{"Field variable ",  name, " has different domain than the equation."}, info);
    9060        end if;
     9082       true = List.isMemberOnTrue(fieldCr,fieldLst,Absyn.crefEqual);
    90619083       then
    90629084          Absyn.CREF(Absyn.CREF_IDENT(name, Absyn.SUBSCRIPT(Absyn.INTEGER(i))::subscripts));
     
    90669088         if not List.isMemberOnTrue(fieldCr,fieldLst,Absyn.crefEqual) then
    90679089           failVar = true;
    9068            Error.addSourceMessageAndFail(Error.COMPILER_ERROR,{"Field variable ",  name, " has different domain than the equation or is not a field." }, info);
     9090           Error.addSourceMessageAndFail(Error.COMPILER_ERROR,{"Field variable '" +  name + "' has different domain than the equation or is not a field." }, info);
    90699091         end if;
    90709092         skip = true;
     
    90809102                   Absyn.INTEGER(2),
    90819103                   Absyn.MUL(),
    9082                    Absyn.CREF(Absyn.CREF_QUAL("omega"/*fieldDomainName*/,{},Absyn.CREF_IDENT("dx",{})))
     9104                   Absyn.CREF(Absyn.CREF_QUAL(domName,{},Absyn.CREF_IDENT("dx",{})))
    90839105           )
    90849106         );
Note: See TracChangeset for help on using the changeset viewer.