public boolean Jion(OptimusArray a1, OptimusArray a2, OptimusArray a3, OptimusShape start, OptimusShape off,OptimusCalculator c) throws WrongArgumentException
	{
		OptimusZone z1 = ci.openZone(a1.getZid());
		DataChunk chunk = new DataChunk(z1.getSize().getShape(), z1.getPstep().getShape());
		do{
			int id = chunk.getChunkNum();
			PID p = new PID(id);
			
			
			
			try {
				Partition p1 = new Partition(a1.getZid(),a1.getId(),p,new RID(0));
				Partition p2 = new Partition(a1.getZid(),a2.getId(),p,new RID(0));
				Partition p3 = new Partition(a1.getZid(),a3.getId(),p,new RID(0));
			
				Host h = ci.getReplicateHost(p1, new RID( 0 ));
				
				OptimusCalculatorProtocol cp = (OptimusCalculatorProtocol) h.getCalculateProtocol();
				
				BooleanWritable b = cp.JoinArray(p1, p2, p3, c);
				if( b.get() )
				{
					System.out.println("CalCulate OK");
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return false;
			}
			
			
		}while(chunk.nextChunk());
		
		return true;
	}