Solved

Individual Perturbation of refractive index and dispersion tolerances

  • 29 July 2020
  • 6 replies
  • 116 views

Hi All, 


for a tolerance analysis of an optical system in Zemax (Version June 24, 2015) I’m using a tolerance script where tolerances are consecutively perturbed and performance is optimized by optimization with specific merit functions.


Is it possible to perturb in addition to surface and parameter data also refractive index and dispersion tolerances by using the keyword “PERTURB” in a tolerance script?


If not, which approach should be used for individual perturbation of glass tolerances? 


Thank You in advance for a feedback,


Best regards,


Johann


 


 


 

icon

Best answer by Angel Morales 1 August 2020, 01:24

View original

6 replies

Userlevel 4
Badge +1

Hi Johann,


Right now OpticStudio scripts do not have a way to make perturbations to index and dispersion data.


However, if you can use the tolerance data editor, the operands TIND and TABB can be used to include index and Abbe number in the tolerancing process. The wizard can even include them for you if you check the boxes in Index Tolerances. If you want to only include specific elements/surfaces, you can just insert the operands yourself. They just need the surface number, and the nominal, min, and max values/ranges.


Best regards,


Kevin

Hi Kevin,


thank you for your answer. The reason why I was asking is the following: I'm doing a melt fit based on the measured dispersion with a measurement precision of lets say +/-0.02%. Additionally the glass dispersion has a tolerance interval of +/-0.3%. For that reason my plan was to simulate in a first step the drop in imaging performance after the melt fit and in a second step I wanted to investigate the drop in imaging performance caused by the measurement error of the dispersion. 


Best regards,


Johann


 

Userlevel 6
Badge +2

Hello Johann


As Kevin said, there is no direct way to access the index with the PERTURB keyword.


The PERTURB keyword can however work on multi-configuration operands:


Syntax:

PERTURB type int1 int2 int3 stat nstd min max

Type = 3, multi-configuration data: int1 is the configuration number, int2 is the operand number, int3 must be set to zero.

 


I have tried to set a O solve next to the material but unfortunately you can't read the value of the offset solve.


One way to read them is to define a model index. Then you can use MIND and MABB to read the index and abbe number.


Would you that be a solution for you?



Let us know.


Thank you.


Sandrine

Hello Sandrine,


modelling the glass is a good option. Even if the nominal system performance changes slightly it is possible to estimate the changes in performance. Thank you.


But in principle I'm dealing with an additional problem: when the dispersion tolerances are perturbed once, a melt fit is done. Then, in the second step glass dispersion and indices should be perturbed again in order to simulate the tight tolerance interval for the measurement accuracy: But in this case the dispersion tolerance interval should not be applied to the nominal dispersion value, but to the actual existing dispersion from the first perturbation. 


Is it possible to do a tolerance simulation according to such a procedure?


Thank you very much for your support.


Johann


 


 


 


 

Userlevel 5
Badge +1

Hi Johann,


Thanks for your follow-up here!


If I'm understanding you correctly, you want to apply two subsequent tolerance intervals. I think one approach you could take here is to use two PERTURB commands in sequence with each other. What will happen is that the first PERTURB command will adjust your nominal index/dispersion value, and the second PERTURB would be a further perturbation on top of that:



! Test to Perturb the index twice

! Clears compensators

CLEARCOMP



! Loads in INDX merit function

LOADMERIT INDX_Test.MF



! Now perturb CT

PERTURB 3 1 1 0 0 3 0.1 0.2

UPDATE



! evaluate merit function

GETMERIT

! Report INDX Value

REPORT '1st Perturb Index is ' 2



! Perturb again

PERTURB 3 1 1 0 0 3 0.4 0.5

UPDATE



! evaluate merit function

GETMERIT

! Report INDX Value again

REPORT '2nd Perturb Index is ' 2

From the above code, I've intentionally made the first PERTURB modify the index by significantly less than the second PERTURB command. If we run this .TSC script on this model, we can see that resulting REPORT lines show the index changing twice:



The index values are a little extreme just to illustrate the difference in the two PERTURB commands :)


Is this something that you think you could work with? Am I misunderstanding your needs in any way? Let us know if so, and we'll be happy to continue the conversation here further.


~ Angel

Hi Angel,


this is excactly what I need. Thank you all for the great support.


Asking you for help saved a lot of time. Figuring it out by myself was much slower. 


Best regards,


Johann

Reply