Level increase due to EvalMult(ciphertext, plaintext) in BGV


I am not sure why the level of the output ciphertext always increases by one. I understand that it might be to compensate for the error. However, I am using it for a special case where the plaintext only has 0 or 1 as entries. Thus, the error should not be multiplied by a large factor.
I tried to use SetLevel but that doesn’t seem to work correctly.
Is there anything I could do to have a smaller log q as I need to do several such multiplications?

Can you provide some details about your use case? Which scheme (BFV, BGV, CKKS) are you using? What scaling technique are you using (FIXEDMANUAL, FIXEDAUTO, FLEXIBLEAUTO, FLEXIBLEAUTOEXT)?

I am using BGV scheme with:
→ FLEXIBLEAUTOEXT scaling technique
→ UNIFORM_TERNARY key distribution
→ Modulus 2^{32} - 2^{30} + 1

In the FLEXIBLEAUTOEXT mode, the level increases automatically by 1 before every multiplication, in order to minimize the accumulated error. A higher level corresponds to less RNS limbs, a.k.a. a smaller ciphertext modulus q. If you wish to set levels manually, you should use the scaling technique FIXEDMANUAL, and call the ModReduce function manually to increase the level.