All this said, it may be a simple workaround to get this model into Xyce if you are willing to hack simply on the verilog input.
The sole use of arrays in this model is so trivial that it could be done just as easily without arrays. It is being used just to select one of two values in a loop that runs over two values. Could be done just as easily with a ternary operator and no array. Try modifying the CarrierDensity analog function, which in the original is:
analog function real CarrierDensity;
input Eg, Ef; // Ef is the Fermi level w.r.t. Efi
real Eg, Ef;
real Evh[0:1], x, n1, n2, a0, a1, del, fsmo, n, n0, d2_E2, P_1_vt;
integer i;
begin
n0 = 1.9926e9; // n0 = 8/3/pi/acc/Vp;
n = 0;
P_1_vt = 1/$vt;
Evh[0] = Eg/2;
Evh[1] = Eg;
for (i = 0;i<2;i = i+1) begin
x = exp((Evh[i]-Ef)*P_1_vt);
n1 = n0*sqrt(`M_PI*$vt/2*Evh[i])/x;
a0 = 1/(1+x);
a1 = -x*P_1_vt/((1+x)*(1+x));
del = Ef + $vt*ln(1+x);
d2_E2 = sqrt(del*del-Evh[i]*Evh[i]);
n2 = n0*((a1/2*del+a0-a1*Evh[i])*d2_E2+a1/2*Evh[i]*Evh[i]*ln((del+d2_E2)/Evh[i]));
fsmo = 1/(1+pow(x,-1.3));
n = n + (n1*fsmo + n2*(1-fsmo));
end
CarrierDensity = n;
end
endfunction // CarrierDensity
If this were rewritten:
analog function real CarrierDensity;
input Eg, Ef; // Ef is the Fermi level w.r.t. Efi
real Eg, Ef;
real Evhkludge, x, n1, n2, a0, a1, del, fsmo, n, n0, d2_E2, P_1_vt;
integer i;
begin
n0 = 1.9926e9; // n0 = 8/3/pi/acc/Vp;
n = 0;
P_1_vt = 1/$vt;
for (i = 0;i<2;i = i+1) begin
Evhkludge = (i==0)?Eg/2:Eg;
x = exp((Evhkludge-Ef)*P_1_vt);
n1 = n0*sqrt(`M_PI*$vt/2*Evhkludge)/x;
a0 = 1/(1+x);
a1 = -x*P_1_vt/((1+x)*(1+x));
del = Ef + $vt*ln(1+x);
d2_E2 = sqrt(del*del-Evhkludge*Evhkludge);
n2 = n0*((a1/2*del+a0-a1*Evhkludge)*d2_E2+a1/2*Evhkludge*Evhkludge*ln((del+d2_E2)/Evhkludge));
fsmo = 1/(1+pow(x,-1.3));
n = n + (n1*fsmo + n2*(1-fsmo));
end
CarrierDensity = n;
end
endfunction // CarrierDensity
then it should generate code that does exactly the same thing as the other, without any use of arrays. This might get you to the point of being able to do your work as quickly as possible.