1010* Date: June 2010
1111* Origin: ISIS
1212*
13- * Multilayer Reflecting sample using matrix Formula.
13+ * Multilayer Reflecting sample using matrix Formula, v2 with 'nrepeats' for repeating multilayer structure .
1414*
1515* %D
1616*
4545* target_index: [1] Used in combination with focus_xw and focus_yh to indicate solid angle for incoherent scattering.
4646* focus_xw: [m] Used in combination with target_index and focus_yh to indicate solid angle for incoherent scattering.
4747* focus_yh: [m] Used in combination with focus_xw and target_index to indicate solid angle for incoherent scattering.
48+ * nrepeats: [1] Number of repeats of the block of layers appart from the superphase and substrate
4849*
4950* %E
5051*******************************************************************************/
5152
5253DEFINE COMPONENT Multilayer_Sample
53- SETTING PARAMETERS (xwidth = 0.2, zlength = 0.2, nlayer=1,
54+ SETTING PARAMETERS (xwidth= 0.2, zlength= 0.2, int nlayer=1, int nrepeats =1,
5455 vector sldPar={0.0,2.0e-6,0.0e-6},
5556 vector dPar={20.0},
5657 vector sigmaPar={5.0,5.0},
@@ -174,6 +175,7 @@ TRACE
174175 double dbl0,dbl1,tvar;
175176 int arrsize=nlayer+2;
176177 int i;
178+ int j;
177179
178180 gsl_complex rnf,rnf1;
179181 gsl_complex a12t,a22t,cr,c0,ci;
@@ -252,7 +254,9 @@ TRACE
252254 gsl_matrix_complex_set(a1,1,1,cr);
253255
254256 if(nlayer > 0){
255- for(i=1;i<nlayer+1;i++){
257+ if(nrepeats > 1){
258+ for(j=1;j<nrepeats-1;j++){
259+ for(i=1;i<nlayer;i++){
256260 btm=gsl_complex_mul(gsl_matrix_complex_get(betan,i,0),ci);
257261 btm1=gsl_complex_mul(gsl_complex_mul_real(gsl_matrix_complex_get(betan,i,0),-1.0),ci);
258262 cbtm=gsl_complex_exp(btm);
@@ -284,7 +288,57 @@ TRACE
284288 tcvar4=gsl_complex_mul(tcvar3,gsl_matrix_complex_get(a2,1,1));
285289 gsl_matrix_complex_set(a3,0,1,gsl_complex_add(tcvar2,tcvar4));
286290
287- tcvar1=gsl_matrix_complex_get(a1,1,0);
291+ tcvar1=gsl_matrix_complex_get(a1,1,0);
292+ tcvar2=gsl_complex_mul(tcvar1,gsl_matrix_complex_get(a2,0,0));
293+ tcvar3=gsl_matrix_complex_get(a1,1,1);
294+ tcvar4=gsl_complex_mul(tcvar3,gsl_matrix_complex_get(a2,1,0));
295+ gsl_matrix_complex_set(a3,1,0,gsl_complex_add(tcvar2,tcvar4));
296+
297+ tcvar1=gsl_matrix_complex_get(a1,1,0);
298+ tcvar2=gsl_complex_mul(tcvar1,gsl_matrix_complex_get(a2,0,1));
299+ tcvar3=gsl_matrix_complex_get(a1,1,1);
300+ tcvar4=gsl_complex_mul(tcvar3,gsl_matrix_complex_get(a2,1,1));
301+ gsl_matrix_complex_set(a3,1,1,gsl_complex_add(tcvar2,tcvar4));
302+
303+ gsl_matrix_complex_set(a1,0,0,gsl_matrix_complex_get(a3,0,0));
304+ gsl_matrix_complex_set(a1,0,1,gsl_matrix_complex_get(a3,0,1));
305+ gsl_matrix_complex_set(a1,1,0,gsl_matrix_complex_get(a3,1,0));
306+ gsl_matrix_complex_set(a1,1,1,gsl_matrix_complex_get(a3,1,1));
307+ }
308+ } // Exit the nrepeats block and do the final repeat with the substrate
309+ for(i=1;i<nlayer+1;i++){
310+ btm=gsl_complex_mul(gsl_matrix_complex_get(betan,i,0),ci);
311+ btm1=gsl_complex_mul(gsl_complex_mul_real(gsl_matrix_complex_get(betan,i,0),-1.0),ci);
312+ cbtm=gsl_complex_exp(btm);
313+ cbtm1=gsl_complex_exp(btm1);
314+ gsl_matrix_complex_set(a2,0,0,cbtm);
315+ tcvar1=gsl_matrix_complex_get(pfn,i,0);
316+ tcvar2=gsl_matrix_complex_get(pfn,i+1,0);
317+ if(GSL_REAL(gsl_complex_add(tcvar1,tcvar2))!=0.0 || GSL_IMAG(gsl_complex_add(tcvar1,tcvar2))!=0.0){
318+ a22t=gsl_complex_div(gsl_complex_sub(tcvar1,tcvar2),gsl_complex_add(tcvar1,tcvar2));
319+ } else {
320+ a22t=c0;
321+ }
322+ tcvar3=gsl_complex_mul(tcvar1,tcvar2);
323+ tcvar4=gsl_complex_mul_real(tcvar3,-1.0*tlc*sigmaPar[i]*sigmaPar[i]);
324+ a22t=gsl_complex_mul(a22t,gsl_complex_exp(tcvar4));
325+ gsl_matrix_complex_set(a2,0,1,gsl_complex_mul(a22t,cbtm));
326+ gsl_matrix_complex_set(a2,1,0,gsl_complex_mul(a22t,cbtm1));
327+ gsl_matrix_complex_set(a2,1,1,cbtm1);
328+
329+ tcvar1=gsl_matrix_complex_get(a1,0,0);
330+ tcvar2=gsl_complex_mul(tcvar1,gsl_matrix_complex_get(a2,0,0));
331+ tcvar3=gsl_matrix_complex_get(a1,0,1);
332+ tcvar4=gsl_complex_mul(tcvar3,gsl_matrix_complex_get(a2,1,0));
333+ gsl_matrix_complex_set(a3,0,0,gsl_complex_add(tcvar2,tcvar4));
334+
335+ tcvar1=gsl_matrix_complex_get(a1,0,0);
336+ tcvar2=gsl_complex_mul(tcvar1,gsl_matrix_complex_get(a2,0,1));
337+ tcvar3=gsl_matrix_complex_get(a1,0,1);
338+ tcvar4=gsl_complex_mul(tcvar3,gsl_matrix_complex_get(a2,1,1));
339+ gsl_matrix_complex_set(a3,0,1,gsl_complex_add(tcvar2,tcvar4));
340+
341+ tcvar1=gsl_matrix_complex_get(a1,1,0);
288342 tcvar2=gsl_complex_mul(tcvar1,gsl_matrix_complex_get(a2,0,0));
289343 tcvar3=gsl_matrix_complex_get(a1,1,1);
290344 tcvar4=gsl_complex_mul(tcvar3,gsl_matrix_complex_get(a2,1,0));
@@ -296,12 +350,63 @@ TRACE
296350 tcvar4=gsl_complex_mul(tcvar3,gsl_matrix_complex_get(a2,1,1));
297351 gsl_matrix_complex_set(a3,1,1,gsl_complex_add(tcvar2,tcvar4));
298352
353+ gsl_matrix_complex_set(a1,0,0,gsl_matrix_complex_get(a3,0,0));
354+ gsl_matrix_complex_set(a1,0,1,gsl_matrix_complex_get(a3,0,1));
355+ gsl_matrix_complex_set(a1,1,0,gsl_matrix_complex_get(a3,1,0));
356+ gsl_matrix_complex_set(a1,1,1,gsl_matrix_complex_get(a3,1,1));
357+ }
358+ } else { // if we are not repeating then just do the same as the original
359+ for(i=1;i<nlayer+1;i++){
360+ btm=gsl_complex_mul(gsl_matrix_complex_get(betan,i,0),ci);
361+ btm1=gsl_complex_mul(gsl_complex_mul_real(gsl_matrix_complex_get(betan,i,0),-1.0),ci);
362+ cbtm=gsl_complex_exp(btm);
363+ cbtm1=gsl_complex_exp(btm1);
364+ gsl_matrix_complex_set(a2,0,0,cbtm);
365+ tcvar1=gsl_matrix_complex_get(pfn,i,0);
366+ tcvar2=gsl_matrix_complex_get(pfn,i+1,0);
367+ if(GSL_REAL(gsl_complex_add(tcvar1,tcvar2))!=0.0 || GSL_IMAG(gsl_complex_add(tcvar1,tcvar2))!=0.0){
368+ a22t=gsl_complex_div(gsl_complex_sub(tcvar1,tcvar2),gsl_complex_add(tcvar1,tcvar2));
369+ } else {
370+ a22t=c0;
371+ }
372+ tcvar3=gsl_complex_mul(tcvar1,tcvar2);
373+ tcvar4=gsl_complex_mul_real(tcvar3,-1.0*tlc*sigmaPar[i]*sigmaPar[i]);
374+ a22t=gsl_complex_mul(a22t,gsl_complex_exp(tcvar4));
375+ gsl_matrix_complex_set(a2,0,1,gsl_complex_mul(a22t,cbtm));
376+ gsl_matrix_complex_set(a2,1,0,gsl_complex_mul(a22t,cbtm1));
377+ gsl_matrix_complex_set(a2,1,1,cbtm1);
378+
379+ tcvar1=gsl_matrix_complex_get(a1,0,0);
380+ tcvar2=gsl_complex_mul(tcvar1,gsl_matrix_complex_get(a2,0,0));
381+ tcvar3=gsl_matrix_complex_get(a1,0,1);
382+ tcvar4=gsl_complex_mul(tcvar3,gsl_matrix_complex_get(a2,1,0));
383+ gsl_matrix_complex_set(a3,0,0,gsl_complex_add(tcvar2,tcvar4));
384+
385+ tcvar1=gsl_matrix_complex_get(a1,0,0);
386+ tcvar2=gsl_complex_mul(tcvar1,gsl_matrix_complex_get(a2,0,1));
387+ tcvar3=gsl_matrix_complex_get(a1,0,1);
388+ tcvar4=gsl_complex_mul(tcvar3,gsl_matrix_complex_get(a2,1,1));
389+ gsl_matrix_complex_set(a3,0,1,gsl_complex_add(tcvar2,tcvar4));
390+
391+ tcvar1=gsl_matrix_complex_get(a1,1,0);
392+ tcvar2=gsl_complex_mul(tcvar1,gsl_matrix_complex_get(a2,0,0));
393+ tcvar3=gsl_matrix_complex_get(a1,1,1);
394+ tcvar4=gsl_complex_mul(tcvar3,gsl_matrix_complex_get(a2,1,0));
395+ gsl_matrix_complex_set(a3,1,0,gsl_complex_add(tcvar2,tcvar4));
396+
397+ tcvar1=gsl_matrix_complex_get(a1,1,0);
398+ tcvar2=gsl_complex_mul(tcvar1,gsl_matrix_complex_get(a2,0,1));
399+ tcvar3=gsl_matrix_complex_get(a1,1,1);
400+ tcvar4=gsl_complex_mul(tcvar3,gsl_matrix_complex_get(a2,1,1));
401+ gsl_matrix_complex_set(a3,1,1,gsl_complex_add(tcvar2,tcvar4));
402+
299403 gsl_matrix_complex_set(a1,0,0,gsl_matrix_complex_get(a3,0,0));
300404 gsl_matrix_complex_set(a1,0,1,gsl_matrix_complex_get(a3,0,1));
301405 gsl_matrix_complex_set(a1,1,0,gsl_matrix_complex_get(a3,1,0));
302406 gsl_matrix_complex_set(a1,1,1,gsl_matrix_complex_get(a3,1,1));
303407 }
304- }
408+ }
409+ }
305410 ac1=gsl_matrix_complex_get(a1,1,0);
306411 ac2=gsl_complex_conjugate(ac1);
307412 ac3=gsl_matrix_complex_get(a1,0,0);
0 commit comments