@Override public LevelSetApproximationAssemblier synchronizeClone() { LevelSetApproximationAssemblier result = new LevelSetApproximationAssemblier(); result.setWeightFunction(weightFunction.synchronizeClone()); result.setNodesNum(nodesNum); result.setDirichletNodesNum(dirichletNodesNum); result.prepare(); return result; }
@Override public void assembleVolume() { double aimFunc = load[0]; double wholeWeight = weight * weightFunction.values(aimFunc, weightFunctionValue)[0]; TDoubleArrayList shapeFunc = shapeFunctionValues[0]; for (int i = 0; i < nodesAssemblyIndes.size(); i++) { int row = nodesAssemblyIndes.getQuick(i); double rowShapeFunc = shapeFunc.getQuick(i); mainVector.add(row, wholeWeight * aimFunc * rowShapeFunc); for (int j = 0; j < nodesAssemblyIndes.size(); j++) { int col = nodesAssemblyIndes.getQuick(j); if (isUpperSymmertric() && row > col) { continue; } double colShapeFunc = shapeFunc.getQuick(j); mainMatrix.add(row, col, wholeWeight * rowShapeFunc * colShapeFunc); } } }
public void setWeightFunction(RadialFunctionCore weightFunction) { this.weightFunction = weightFunction; weightFunction.setDiffOrder(0); }