public Boolean deterministic(float dt, rrandom rng) {

		double saturation;
		saturation = (double) 1.;
		for (int i = 0; i < input_species.size(); i++) {
			double cons;
			cons = input_species.get(i).getNumber();
//			cons = input_species.get(i).getMy_concentration();
			saturation = saturation * cons;
		}

		double dpdt;
		dpdt = rate_constant * saturation * dt;
		double idpdt = dpdt;
							
		Boolean reactantIsEnough;
		reactantIsEnough = false;
		
		int number_done = 0;
		for (int i = 0; i < input_species.size(); i++) {
			Reactant x;
			x = input_species.get(i);
			if (x.isReactantEnough(idpdt)) {
				number_done++;
				x.subtract(idpdt);
				reactantIsEnough = true;
			} else {
				//if one reactant is less than the required, than the 
				//remaining reactant will proceed for the reaction
				int available_reactant = (int) input_species.get(i).getNumber();
				if (available_reactant > 0) {
					double difference = idpdt - available_reactant;
					idpdt = available_reactant;
					x.subtract(idpdt);
					reactantIsEnough = true;
					for (int j = 0; j < number_done; j++) {
						Reactant y;
						y = input_species.get(j);
						y.add(difference);
					}
				} else {
					for (int j = 0; j < number_done; j++) {
						Reactant y;
						y = input_species.get(j);
						y.add(idpdt);
					}
					break;
				}
			}
		}
		
		if (reactantIsEnough) {
			for (int i = 0; i < output_species.size(); i++) {
				output_species.get(i).add(idpdt);
			}
		}
		return true;
	}