On the ngspice side of things, you need to include the model in your circuit, using one of various commands.
The simplest is to put the .model into your netlist, and use the name to refer to it, e.g. your model looks like this:
.model D1N914 D(Is=168.1E-21 N=1 Rs=.1 Ikf=0 Xti=3 Eg=1.11 Cjo=4p M=.3333
+ Vj=.75 Fc=.5 Isr=100p Nr=2 Bv=100 Ibv=100u Tt=11.54n)
Note ngspice seems to have a problem with a couple of parameters in this model (Isr and Nr), so the simulation may be unrealistic as I removed them just to get things working.
It appears to be a psice model, and (according to LTSpice):
Isr = Recombination current parameter
Nr = Isr emission coefficient.
I don't think they will have much effect on the simulation, likely high order Is effects added into the commercial spices.
So here is an example netlist (with Isr and Nr removed, see above):
V1 1 0 5
R1 1 2 1k
D1 2 3 D1N914
Vdummy 3 0 0
.model D1N914 D(Is=168.1E-21 N=1 Rs=.1 Ikf=0 Xti=3 Eg=1.11 Cjo=4p M=.3333
+ Vj=.75 Fc=.5 Bv=100 Ibv=100u Tt=11.54n)
*.option noacct
.dc V1 0 10 1
*.print i(Vdummy)
.end
If we type plot i(Vdummy), we get this:
The second option would be to do something like add it to a modelcard and do .include\xxxx\xxx\modelcard.diode into your netlist. I have not tested this option though, only the first which works fine. I imagine there is some way of linking the modelcard to the symbol Matt describes in his answer (in LTspice you add the file as one of the symbol parameters)
From the sounds of it, the diode model you are using is the simple "ideal diode" with a fixed forward voltage. This model is an open circuit when \$V_{\textrm{Anode}} - V_{\textrm{Cathode}} < V_D\$ (reverse biased), and a fixed \$V_D\$ voltage supply otherwise (forward biased).
Start by making assumptions about the state of D1 and D2 (for example, D1 is forward biased, and D2 is reverse biased).
Your circuit would then look like this:
simulate this circuit – Schematic created using CircuitLab
What is \$V_o\$ here? The last step is to check your assumptions on each diode. If the assumptions are correct, the model is applicable. If not, permute your assumptions (ex.: what if D1 is reverse biased, and D2 is forward biased? or D1 and D2 are reverse biased, etc.) Only one of the 4 possible permutations will have a consistent answer.
As a side note, the answer you get will not match what the circuit simulator gives you (though it will be close). This is because the circuit simulator uses a more advanced diode model.
Best Answer
The whole point of “forward-biasing” the diode is to apply some external voltage that will counteract the built-in voltage that prevents the charge carriers from flowing between the p and n regions. That's why external voltage must be applied “in reverse” relative to the built-in voltage.