public GAPPDotVectors(GAPPMultivectorComponent destination, LinkedList<GAPPVector> parts, String bladeName) { this.destination = new GAPPMultivector(destination.getName()); this.destSelector = new Selector(destination.getBladeIndex(), (byte) 1, bladeName); this.parts = parts; }
@Override public Object visitMultivectorComponent(GAPPMultivectorComponent gappMultivectorComponent, Object arg) { return new GAPPMultivectorComponent( gappMultivectorComponent.getName(), gappMultivectorComponent.getBladeIndex()); //Strings are immutable! }
@Override public Object visitCalculateMvCoeff(GAPPCalculateMvCoeff gappCalculateMvCoeff, Object arg) { multivectors.add(gappCalculateMvCoeff.getDestination().getName()); return null; }
/** * Creates a temporary multivector with one entry and returns the according GAPPMultivectorComponent * @return The GAPPMultivectorComponent */ public GAPPMultivectorComponent createMvComp() { GAPPMultivector mv = new GAPPMultivector(createTMP(PREFIX_TMPMV)); gapp.addInstruction(new GAPPResetMv(mv, 1)); return new GAPPMultivectorComponent(mv.getName(), 0); }
@Override public Object visitCalculateMvCoeff(GAPPCalculateMvCoeff gappCalculateMvCoeff, Object arg) { incrementSize(GAPPOpenCLCodeGenerator.getVarName(gappCalculateMvCoeff.getDestination().getName()),1); return null; }
GAPPMultivectorComponent gMvC = new GAPPMultivectorComponent(mvC.getName(), mvC.getBladeIndex()); parallelObject.accept(gappCreator, gMvC);
@Override public Object visitCalculateMvCoeff(GAPPCalculateMvCoeff gappCalculateMvCoeff, Object arg) { result.append("calculateMvCoeff "); result.append(gappCalculateMvCoeff.getDestination().getName()); result.append("["); result.append(Integer.toString(gappCalculateMvCoeff.getDestination().getBladeIndex())); result.append("]"); result.append(" = "); result.append(gappCalculateMvCoeff.getType().toString()); result.append("("); printMultivector(gappCalculateMvCoeff.getOperand1()); if (gappCalculateMvCoeff.getOperand2() != null) { result.append(","); printMultivector(gappCalculateMvCoeff.getOperand2()); } result.append(");\n"); return null; }
ParallelObject nonTerminalObj = dotProduct.get(row, col); GAPPMultivector mvTmp = createMv(); GAPPMultivectorComponent gMvC = new GAPPMultivectorComponent(mvTmp.getName(), 0); nonTerminalObj.accept(this, gMvC); dotProduct.set(row, col, new MvComponent(new MultivectorComponent(mvTmp.getName(), 0))); GAPPDotVectors dotVectors = new GAPPDotVectors(destination, parts, algebra.getBlade(destination.getBladeIndex()).toString()); selDest.add(new PosSelector(altDestination.getBladeIndex(), algebra.getBlade(altDestination.getBladeIndex()).toString())); selSrc.add(new Selector(destination.getBladeIndex(), (byte) -1, algebra.getBlade(destination.getBladeIndex()).toString())); new GAPPMultivector(altDestination.getName()), new GAPPMultivector(destination.getName()), selDest, selSrc);
@Override public Object visitCalculateMvCoeff(GAPPCalculateMvCoeff gappCalculateMvCoeff, Object arg) { curLine++; access(new GAPPMultivector(gappCalculateMvCoeff.getDestination().getName())); access(gappCalculateMvCoeff.getOperand1()); if (gappCalculateMvCoeff.getOperand2() != null) { access(gappCalculateMvCoeff.getOperand2()); } return null; }
@Override public Object visitCalculateMvCoeff(GAPPCalculateMvCoeff gappCalculateMvCoeff, Object arg) { final String destMv = GAPPOpenCLCodeGenerator.getVarName(gappCalculateMvCoeff.getDestination().getName()); final Integer thisMvSetCount = mvBladeMap.get(destMv).size(); final String bladeCoeff = getBladeCoeff(destMv,thisMvSetCount); result.append(bladeCoeff); result.append(" = "); visitCalculateOp(gappCalculateMvCoeff.getType(), GAPPOpenCLCodeGenerator.getVarName(gappCalculateMvCoeff.getOperand1().getName()), GAPPOpenCLCodeGenerator.getVarName(gappCalculateMvCoeff.getOperand2().getName())); result.append(";\n"); mvBladeMap.get(destMv).put(gappCalculateMvCoeff.getDestination().getBladeIndex(),bladeCoeff); return null; }
GAPPMultivectorComponent gMvC1 = new GAPPMultivectorComponent(mvTmp1.getName(), 0); extCalculation.getOperand1().accept(this, gMvC1); extCalculation.setOperand1(new MvComponent(new MultivectorComponent(mvTmp1.getName(), 0))); if (!extCalculation.getOperand2().isTerminal()) { GAPPMultivector mvTmp2 = createMv(); GAPPMultivectorComponent gMvC2 = new GAPPMultivectorComponent(mvTmp2.getName(), 0); extCalculation.getOperand2().accept(this, gMvC2); extCalculation.setOperand2(new MvComponent(new MultivectorComponent(mvTmp2.getName(), 0))); selDest.add(new PosSelector(altDestination.getBladeIndex(), algebra.getBlade(altDestination.getBladeIndex()).toString())); selSrc.add(new Selector(destination.getBladeIndex(), (byte) -1, algebra.getBlade(destination.getBladeIndex()).toString())); new GAPPMultivector(altDestination.getName()), new GAPPMultivector(destination.getName()), selDest, selSrc);
@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; }
MultivectorWithValues target = getMultivector(gappCalculateCoeff.getDestination().getName()); target.setEntry(gappCalculateCoeff.getDestination().getBladeIndex(), result);
@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; }