С недопустимыми значениями параметров вопрос актуален, т.к. скорости фильтрации редко превышают мкм/с. Со случайными числами проблем нет, т.к. фазовый переход описан кинетическим уравнением вида dx/dt ~ Cx (вполне типичное уравнение Аррениуса).
Порядок точности схемы, как ни странно, на результат радикально не влиял. Изменение происходило на уровне 3й-4й значащей цифры. Тестировал и первый, и второй порядки. Хотя была нереализованная идея сделать трёхслойную схему по времени, дабы получить второй же порядок в d/dt.
Суммирование результата с разных итераций чаще всего требует определённой неявности, а писать разные громоздкие методы решения таких сеточных систем и отлаживать их довольно противно, простите лентяя.
Параллелизм считать источником ошибки не склонен, поскольку результаты двухпоточного совпадают с вычислениями на одном потоке. А больше, чем на два потока, пока распараллеливать не на чем. Доступа на новый вузовский кластер по статусу не дают (ибо ещё магистр), а старый кластер кафедры, упомянутый в тексте, содержит gcc/gfortran 4.1.2, где OpenMP ещё не было.
Основная причина погрешностей скрыта именно в разных порядках переменных. Особенно если начальным условием по одной из переменной задан ноль.
Исходники вряд ли несут большой интерес — там простое решение системы сеточных уравнений явным методом. Переменные не масштабировались, порядки их сохранились, отсюда и эффект.
С недопустимыми значениями параметров вопрос актуален, т.к. скорости фильтрации редко превышают мкм/с. Со случайными числами проблем нет, т.к. фазовый переход описан кинетическим уравнением вида dx/dt ~ Cx (вполне типичное уравнение Аррениуса).
Порядок точности схемы, как ни странно, на результат радикально не влиял. Изменение происходило на уровне 3й-4й значащей цифры. Тестировал и первый, и второй порядки. Хотя была нереализованная идея сделать трёхслойную схему по времени, дабы получить второй же порядок в d/dt.
Суммирование результата с разных итераций чаще всего требует определённой неявности, а писать разные громоздкие методы решения таких сеточных систем и отлаживать их довольно противно, простите лентяя.
Параллелизм считать источником ошибки не склонен, поскольку результаты двухпоточного совпадают с вычислениями на одном потоке. А больше, чем на два потока, пока распараллеливать не на чем. Доступа на новый вузовский кластер по статусу не дают (ибо ещё магистр), а старый кластер кафедры, упомянутый в тексте, содержит gcc/gfortran 4.1.2, где OpenMP ещё не было.
микропаяльником?Исходники вряд ли несут большой интерес — там простое решение системы сеточных уравнений явным методом. Переменные не масштабировались, порядки их сохранились, отсюда и эффект.