コード例 #1
0
        public void Run(CartesianModel model)
        {
            FftBuffersPool.PrepareBuffersForModel(model, _memoryProvider, _mpi, _profiler);

            LogSettingsInfo();

            _solver.SetProfiler(_profiler);
            _solver
            .WithMpi(_mpi)
            .With(_project.ObservationLevels);

            int freqCounter = 0;

            foreach (var frequency in _project.Frequencies)
            {
                ForwardLoggerHelper.WriteStatus(_logger, $"\t\t\tFrequecy {frequency}, {++freqCounter} of {_project.Frequencies.Count}");
                var omegaModel = OmegaModelBuilder.BuildOmegaModel(model, frequency);
                _profiler.ClearAllRecords();

                using (var rc = _solver.Solve(omegaModel))
                {
                    if (!_solver.IsParallel || _mpi.IsMaster)
                    {
                        ExportProfiling(model, frequency);
                        Export(rc, frequency);
                    }

                    ForwardLoggerHelper.WriteStatus(_logger, "Finish");
                    ParallelMemoryUtils.ExportMemoryUsage(_project.ResultsPath, _mpi, _memoryProvider, frequency);
                }
            }
        }
コード例 #2
0
ファイル: Giem2gGreenTensor.cs プロジェクト: prisae/extreme
        static GreenTensor PrepareGIEM2GTensor(ForwardSolver solver, ref giem2g_data giem2g_ie_op, giem2g_anomaly anomaly)
        {
            int nz = solver.Model.Nz;
            int nx = solver.Model.Nx;
            int ny = solver.Model.Ny;

            giem2g_ie_op.comm = solver.Mpi.CommunicatorC2Fortran();
            giem2g_calc_data_sizes(anomaly, ref giem2g_ie_op);



            var buff = FftBuffersPool.GetBuffer(solver.Model);

            if (buff.Plan3Nz.BufferLength >= giem2g_ie_op.fft_buffers_length)
            {
                giem2g_ie_op.fft_buffer_in  = buff.Plan3Nz.Buffer1Ptr;
                giem2g_ie_op.fft_buffer_out = buff.Plan3Nz.Buffer2Ptr;
            }
            else
            {
                var len = giem2g_ie_op.fft_buffers_length;
                giem2g_ie_op.fft_buffer_in  = solver.MemoryProvider.AllocateComplex(len);
                giem2g_ie_op.fft_buffer_out = solver.MemoryProvider.AllocateComplex(len);
                solver.Logger.WriteError("Allocate additional memory for FFT inside GIEM2G!!");
            }
            var giem2g_ptrs = AllocateGiem2gDataBuffers(solver.MemoryProvider, ref giem2g_ie_op, nz);


            giem2g_prepare_ie_kernel(anomaly, giem2g_ie_op);



            var gt = GreenTensor.CreateGiem2gTensor(solver.MemoryProvider, nx, ny, nz, nz, giem2g_ptrs);

            return(gt);
        }