Microcontroller registers (atmega16) Can we store the value of a port to a variable directly using portx register without the pinx register?
The PORTD register is buffered, it's a one way register in the sense that the pins will follow the register, but the register won't follow the pins. The actual pins cannot change that particular register. 

The PIND register is taking its data from the pins. You will only read from this register. So it is a one way register in the sense that you will only read from it, not write to it. 



Extra info:
The PORTD register is also used to select which pins that should activate their internal pull-ups, if the pin is set to being an input. 

The DDR register controls which pins that are output or input. 

Extra info for atmega16:
The PIND register is a read only register. 

Extra info for atmega328p:
If you write a 1 to PIND, then that particular pin will toggle. If it was 1 it will become 0, if it was 0 it will become 1. So writing to PIND will change PORTD and not change PIND. 

As always, grab the datasheet and read. The information is free. It doesn't bite.