Ejemplo n.º 1
0
        //	public static ForwardSolver current_solver;

        public static GreenTensor CalcAtoATensor(ForwardSolver solver, GreenTensor gt)
        {
            var giem2g_ie_op = new giem2g_data();
            var bkg          = new giem2g_background();
            var anomaly      = new giem2g_anomaly();

            GreenTensor gt_new;

            //	current_solver = solver;


            PrepareBkgAndAnomaly(solver, ref bkg, ref anomaly);



            //giem2g_set_logger(GIEM2G_LOGGER);

            IntPtr ie_op_ptr;

            if (gt == null || !gt.Has("giem2g"))
            {
                gt_new    = PrepareGIEM2GTensor(solver, ref giem2g_ie_op, anomaly);
                ie_op_ptr = giem2g_ie_op.giem2g_tensor;
            }
            else
            {
                ie_op_ptr = new IntPtr(gt ["giem2g"].Ptr);
                gt_new    = gt;
            }



            var omega = solver.Model.Omega;

            giem2g_calc_ie_kernel(ie_op_ptr, bkg, anomaly, omega);

            solver.MemoryProvider.Release((void *)bkg.csigb);
            solver.MemoryProvider.Release((void *)bkg.thickness);
            solver.MemoryProvider.Release((void *)anomaly.z);
            solver.MemoryProvider.Release((void *)anomaly.dz);



            return(gt_new);
        }
Ejemplo n.º 2
0
        public void PopulateForFft(MemoryLayoutOrder layoutOrder)
        {
            PrepareLayoutOrder(layoutOrder);

            if (_greenTensor.Has("XX"))
            {
                PopulateForFft(_greenTensor["XX"], 1, 1);
            }
            if (_greenTensor.Has("YY"))
            {
                PopulateForFft(_greenTensor["YY"], 1, 1);
            }
            if (_greenTensor.Has("ZZ"))
            {
                PopulateForFft(_greenTensor["ZZ"], 1, 1);
            }

            if (_greenTensor.Has("XY"))
            {
                PopulateForFft(_greenTensor["XY"], -1, -1);
            }

            if (_greenTensor.Has("XZ"))
            {
                PopulateForFft(_greenTensor["XZ"], -1, 1);
            }
            if (_greenTensor.Has("YZ"))
            {
                PopulateForFft(_greenTensor["YZ"], 1, -1);
            }

            if (_greenTensor.Has("ZX"))
            {
                PopulateForFft(_greenTensor["ZX"], -1, 1);
            }
            if (_greenTensor.Has("ZY"))
            {
                PopulateForFft(_greenTensor["ZY"], 1, -1);
            }
        }