// 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); }
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); } }