Skip to main content

Hello, 

In sequential mode I am trying to optimizing a lens with Geometric Image Analysis. The light has to pass several apertures. It seems that the optimization algorithm is not finding the optimal solution. I suspect the reason for this, are the hard edges of the apertures. This is also described in the manual in section “Optimizing with the IMAE Operand”. It is written there to use a dll. Now I am stuck. I could not figure out how to apply a dll to an aperture. 

I am thankful for any advice

Best regards

Marcel 

@MRudolf

 

The DLLs that this section of the Help File is referring to are User-Defined Surfaces. It is not a DLL that you should apply to an aperture. Instead, it is a custom Surface that has parameters to define its aperture.

For example, US_FILT4.DLL, which is referenced into the Help File section you mention, can be setup by changing the Surface Type column of the Lens Data Editor (LDE) to User Defined. When you do so, you get prompted with an number of pre-installed DLLs and you can pick US_FILT4.DLL.

Alternatively, you can also open a User Defined Surface Properties in the LDE and under the Type tab you find the Surface Dll drop-down menu.

You will notice that the User Defined Surface with US_FILT4.DLL has two parameters: R filter and Delta, which control the aperture of the User Defined Surface.

Those are defined in the Help File at this section: The Setup Tab » Editors Group (Setup Tab) » Lens Data Editor » Sequential Surfaces (lens data editor) » User Defined. And for US_FILT4.DLL specifically you have the following excerpt:

Help File excerpt regarding US_FIL4.DLL.

This is a sort of smooth circular aperture where the radius is given by R filter and the “smoothness” is controlled by the Delta parameter (bigger Delta means larger transition from completely opaque to completely transmissive). There are other DLLs with different apertures (see Help File), and if need be, you can also program your own.

I hope this helps and take care,

EDIT: unless I’m mistaken, there’s probably a typo in the Help File I imagine one of the first two equations should be:

T(r) =0 if r > R- ΔR

Would you mind having a look @Allie or @Chris Normanshire?

 

David


Thank you very much David, 

this was exactly what I was looking for. Do you know if I can use this dll also as an obscuration with smoot edge, when I choose Cirular Oscuration in the Aperture tab? Or do I need to write a personalized dll in this case?

Best regards

Marcel


@MRudolf 

 

If you didn’t find such a DLL among the preinstalled files. Then, you’d have to program the obscuration yourself indeed. There’s no point in using the Aperture tab anymore. Luckily, you should also have the source code: US_FILT4.c. If you’ve never written your own User-Defined Surface it can be intimidating, but the transmission is programmed in lines 185-187:

if (r <= (R - d*R)) UD->rel_surf_tran = 1.0;
else if (r >= (R + d*R)) UD->rel_surf_tran = 0.0;
else UD->rel_surf_tran = (1.0 + cos( (r-(R-d*R))*pi/(2.0*d*R) )) / 2.0;

If you change the transmission inside the radius (first IF statement) to 0.0, and the transmission outside the radius (ELSE-IF statement) to 1.0, and finally add a phase of pi to the cosine in the transition region (ELSE statement), it should be enough to make the obscuration DLL:

if (r <= (R - d*R)) UD->rel_surf_tran = 0.0;
else if (r >= (R + d*R)) UD->rel_surf_tran = 1.0;
else UD->rel_surf_tran = (1.0 + cos( (r-(R-d*R))*pi/(2.0*d*R) - pi )) / 2.0;

(please double-check my math cause its late today and I wrote this in a rush)

To compile the DLL, have a look at this article:

https://support.zemax.com/hc/en-us/articles/1500005577602-How-to-compile-a-User-Defined-DLL

If you don’t manage, let me know, and I can have a look in more detail when I have time.

Take care,


David


Thanks again David,

this helps me a lot !!

Have a great day!

Marcel


Reply