Job script special options

1. Is it possible to force the scheduler to actually use more nodes instead of filling up one?

When asking for more nodes, for example #PBS -l nodes=2:ppn=3 , the resource manager may decide to fill up a single node instead of using more than one. So all the 6 processes end up in the same node. It is sometime important to really have the processes running on different nodes (for example for hybrid MPI/OpenMP codes, or when there are few processes but they use a lot of memory). In this case, one can force the Resource manager to actually use the requested number of nodes, adding the line:
#PBS -W x=nmatchpolicy=exactnode

3. Is it possible have a node assigned for one single job only?

Normally, a user’s job is assigned only some of the cores on a node. If there are nodes available, these could be assigned to other jobs. But it may be important to have an exclusive reservation, for example when the job is not using many cores, but a lot of memory. This can be obtained with the line:
#PBS -l naccesspolicy=singlejob

2. Is it possible request nodes with a different number of cores?

Yes, it is. However it can be bit complex to manage the reserved cores/nodes, so that the processes get assigned to the right core/node. It can be sometimes easier just to reserve more nodes/cores that necessary, and use only a subsets of them.
An example is
#PBS -l nodes=1:ppn=8+3:ppn=4, that asks for 8 cores on one node, and 4 on each of other 3 (3*4+8=20 cores on 4 nodes). This option can be combine with all the other PBS options. This specification is not enough to guarantee that some of the 4-cores end up on the same node. See here.