public GAPPSetMv(GAPPMultivector destination, GAPPSetOfVariables source, PosSelectorset selectorsDest, Selectorset selectorsSrc) { this.destination = destination; this.source = source; this.selectorsDest = selectorsDest; this.selectorsSrc = selectorsSrc; assert (selectorsDest.size() == selectorsSrc.size()); }
/** * Copies a posSelectorset * @param sel The posSelectorset to be copied * @return The copy */ private PosSelectorset copyPosSelectorset(PosSelectorset sel) { PosSelectorset copy = new PosSelectorset(); for (PosSelector cur : sel) { copy.add(new PosSelector(cur.getIndex(), cur.getBladeName())); } return copy; }
@Override public Object visitAssignMv(GAPPAssignMv gappAssignMv, Object arg) { final String destMv = GAPPOpenCLCodeGenerator.getVarName(gappAssignMv.getDestination().getName()); Integer thisMvSetCount = mvBladeMap.get(destMv).size(); int selCount = 0; for(GAPPValueHolder val : gappAssignMv.getValues()) { final String bladeCoeff = getBladeCoeff(destMv,thisMvSetCount); result.append(bladeCoeff); result.append(" = "); result.append(val.toString()); result.append(";\n"); mvBladeMap.get(destMv).put(gappAssignMv.getSelectors().get(selCount++).getIndex(),bladeCoeff); ++thisMvSetCount; } return null; }
Valueset valSet = gappAssignMv.getValues(); Iterator<PosSelector> selIt = selSet.listIterator(); Iterator<GAPPConstant> valIt = valSet.listIterator(); while (selIt.hasNext() && valIt.hasNext()) { selSet.remove(sel); return selSet.isEmpty();
@Override public Object visitAssignMv(GAPPAssignMv gappAssignMv, Object arg) { MultivectorWithValues destination = getMultivector(gappAssignMv.getDestination().getName()); PosSelectorset selector = gappAssignMv.getSelectors(); int selCount = selector.size(); for (int sel = 0; sel < selCount; sel++) { GAPPValueHolder scalarVar = gappAssignMv.getValues().get(sel); double value = (scalarVar.isVariable()) ? getVariableValue(((GAPPVariable) scalarVar).getName()) : ((GAPPConstant) scalarVar).getValue(); destination.getEntries()[selector.get(sel).getIndex()] = value; } return null; }
public GAPPAssignMv(GAPPMultivector destinationMv) { this.destinationMv = destinationMv; this.selectors = new PosSelectorset(); this.values = new Valueset(); }
/** * Merges mergable GAPPSetMv to the first GAPPSetMv in mapSetMv */ private void prepareMap() { for (LinkedList<GAPPSetMv> list : mapSetMv.values()) { if (list.size() > 1) { //merge setMv instructions into the first GAPPSetMv instruction GAPPSetMv first = list.removeFirst(); for (GAPPSetMv cur : list) { first.getSelectorsDest().addAll(cur.getSelectorsDest()); first.getSelectorsSrc().addAll(cur.getSelectorsSrc()); } //and remove other instructions toRemove.addAll(list); } } }
@Override public Object visitConstant(Constant constant, Object arg) { GAPPMultivector mvTmp = gappCreator.createMv(); PosSelectorset selDestSet = new PosSelectorset(); selDestSet.add(new PosSelector(0, algebra.getBlade(0).toString())); Valueset valSet = new Valueset(); valSet.add(new GAPPConstant((constant.isNegated() ? -1 : 1) * constant.getValue())); gappCreator.gapp.addInstruction(new GAPPAssignMv(mvTmp, selDestSet, valSet)); return mvTmp; }
public GAPPAssignMv(GAPPMultivector destinationMv, PosSelectorset selectors, Valueset values) { this.destinationMv = destinationMv; this.selectors = selectors; this.values = values; assert (selectors.size() == values.size()); }
@Override public Object visitSetMv(GAPPSetMv gappSetMv, Object arg) { MultivectorWithValues destination = getMultivector(gappSetMv.getDestination().getName()); MultivectorWithValues source = getMultivector(gappSetMv.getSource().getName()); Selectorset selSrc = gappSetMv.getSelectorsSrc(); PosSelectorset selDest = gappSetMv.getSelectorsDest(); int selCount = gappSetMv.getSelectorsSrc().size(); for (int sel = 0; sel < selCount; sel++) { PosSelector sDest = selDest.get(sel); Selector sSrc = selSrc.get(sel); destination.getEntries()[sDest.getIndex()] = sSrc.getSign() * source.getEntries()[sSrc.getIndex()]; } return null; }
@Override public Object visitConstant(Constant constant, Object arg) { //arg must be filled! GAPPMultivectorComponent destination = (GAPPMultivectorComponent) arg; PosSelectorset selSet = new PosSelectorset(); selSet.add(new PosSelector(destination.getBladeIndex(), algebra.getBlade(destination.getBladeIndex()).toString())); Valueset valSet = new Valueset(); valSet.add(new GAPPConstant(((constant.isNegated()) ? -1 : 1) * constant.getValue())); gapp.addInstruction(new GAPPAssignMv(new GAPPMultivector(destination.getName()), selSet, valSet)); return null; }
@Override public Object visitSetMv(GAPPSetMv gappSetMv, Object arg) { incrementSize(GAPPOpenCLCodeGenerator.getVarName(gappSetMv.getDestination().getName()), gappSetMv.getSelectorsDest().size()); return null; }
@Override public Object visitMvComponent(MvComponent mvComponent, Object arg) { GAPPMultivector mvTmp = gappCreator.createMv(); PosSelectorset selDestSet = new PosSelectorset(); selDestSet.add(new PosSelector(0, algebra.getBlade(0).toString())); Selectorset selSrcSet = new Selectorset(); selSrcSet.add(new Selector( mvComponent.getMultivectorComponent().getBladeIndex(), mvComponent.isNegated() ? (byte) -1 : (byte) 1, algebra.getBlade(mvComponent.getMultivectorComponent().getBladeIndex()).toString())); gappCreator.gapp.addInstruction(new GAPPSetMv(mvTmp, new GAPPMultivector( mvComponent.getMultivectorComponent().getName()), selDestSet, selSrcSet)); return mvTmp; }
@Override public Object visitMvComponent(MvComponent mvComponent, Object arg) { //arg must be filled! GAPPMultivectorComponent destination = (GAPPMultivectorComponent) arg; PosSelectorset selDestSet = new PosSelectorset(); selDestSet.add(new PosSelector(destination.getBladeIndex(), algebra.getBlade(destination.getBladeIndex()).toString())); Selectorset selSrcSet = new Selectorset(); selSrcSet.add(new Selector( mvComponent.getMultivectorComponent().getBladeIndex(), (mvComponent.isNegated()) ? (byte) -1 : (byte) 1, algebra.getBlade(mvComponent.getMultivectorComponent().getBladeIndex()).toString())); gapp.addInstruction(new GAPPSetMv( new GAPPMultivector(destination.getName()), new GAPPMultivector(mvComponent.getMultivectorComponent().getName()), selDestSet, selSrcSet)); return null; }
PosSelectorset selDest = new PosSelectorset(); selDest.add(new PosSelector(altDestination.getBladeIndex(), algebra.getBlade(altDestination.getBladeIndex()).toString()));
PosSelectorset selDest = new PosSelectorset(); selDest.add(new PosSelector(altDestination.getBladeIndex(), algebra.getBlade(altDestination.getBladeIndex()).toString()));