#c #sundials
#c #солнечные часы
Вопрос:
Я использую числовой решатель солнечных часов для решения уравнений DAE. Мне удалось создать рабочий код, но я не уверен, каков наилучший способ эффективного сохранения вектора решения. Ниже приведен фрагмент кода для решения уравнений и сохранения решения в текстовом файле с использованием for
цикла.
FILE* file;
int i;
tout = dt;
file = fopen("solution.txt", "w");
/*
for (iout = 1; iout < NOUT; iout ) {
tout = iout * dt; // dt : Time step
retval = IDASolve(mem, tout, amp;tret, uu, up, IDA_NORMAL); // Solve equation
if (retval < 0) break;
/* Save the solution vector in a text file*/
// MGRID : length of vector, uu
for (i = 0; i < MGRID; i ) {
fprintf(file, "%lft", NV_Ith_S(uu, i)); // access vector uu element using macro NV_Ith_S
}
fprintf(file, "n");
}
fclose(file);
Есть ли какой-либо другой способ сохранить вектор uu в текстовом файле (или другом эффективном формате) без внутреннего цикла ‘for’?
Комментарии:
1. Откуда
MGRID
берется?2.
MGRID
является целым числом, которое является длиной вектораuu
.3. Я собрал столько же, однако откуда это взялось ?
4. Он определяется как
#define MGRID 120
5. Разворачивать это вручную кажется немного чрезмерным. Я не могу придумать очень веской причины для этого. Компилятор, вероятно, может развернуть его для вас с включенной оптимизацией. Однако, чтобы ответить на ваш вопрос, если базовый буфер для векторных данных является непрерывным, то наиболее эффективным способом его хранения является простая запись буфера как есть одним выстрелом на диск. Однако, очевидно, что он не будет в удобочитаемом формате.