Tôi đã triển khai một bộ giải đa biến V-Chu kỳ bằng cách sử dụng cả hiệu chỉnh sai số tuyến tính (LDC) và sơ đồ xấp xỉ đầy đủ (FAS).
Vấn đề của tôi là như sau: Sử dụng LDC, phần dư giảm đi 3% mỗi chu kỳ. Việc triển khai FAS cũng hội tụ với một yếu tố tuyến tính, nhưng hệ số này chỉ ~ 0,58. Do đó FAS cần khoảng 20 lần số chu kỳ.
Hầu hết các mã được chia sẻ, sự khác biệt duy nhất là tính toán xuống / lên, LDC sử dụng
xuống:
lên:
và FAS sử dụng
xuống:
lên:
Cài đặt thử nghiệm của tôi là từ "Hướng dẫn đa luồng, Ấn bản thứ hai" của Brigg, tr. 64, có giải pháp phân tích
với
và phương trình là bằng cách sử dụng điển hình tuyến tính stencil 5 điểm như Laplace-Operator L . Dự đoán ban đầu là v = 0 .
Thay đổi cài đặt thử nghiệm, ví dụ: tầm thường ( x , y ) = 0 bằng cách sử dụng dự đoán ban đầu là v = 1 dẫn đến các yếu tố hội tụ gần như giống nhau.
Vì chỉ có mã giảm / giảm khác nhau, kết quả LDC tuân thủ cuốn sách và ít nhất FAS dường như cũng hoạt động, tôi không biết tại sao nó lại chậm hơn nhiều trong cùng một cài đặt tuyến tính.
Có một hành vi kỳ lạ trong cả LDC và FAS mà tôi không thể giải thích được nêu ra mà chỉ xảy ra nếu đoán ban đầu là xấu (ví dụ mà còn trong các thí nghiệm multigrid đầy đủ của tôi nơi suy cho lưới điện tốt mới làm tăng còn sót lại từ 10 - 15 đến 10 - 1 ): Nếu tôi tăng số lần thư giãn hiệu chỉnh bài lên một số rất cao sao cho giải pháp được giải quyết với độ chính xác của máy trên lưới thô, nó sẽ mất gần như tất cả các chữ số khi đi lên một bước tới lưới mịn tiếp theo.
Vì một bức tranh nói nhiều hơn lời nói:
// first cycle, levels 0-4
// DOWN
VCycle top 4, start res_norm 3.676520e+02 // initial residual
VCycle top 4, cycle 0, current 4, res_norm 3.676520e+02
VCycle top 4, cycle 0, current 4, res_norm 1.520312e+02 // relaxed (2 iterations)
VCycle tau_norm 2.148001e+01 (DEBUG calculation)
VCycle top 4, cycle 0, current 3, res_norm 1.049619e+02 // restricted
VCycle top 4, cycle 0, current 3, res_norm 5.050392e+01 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 2, res_norm 3.518764e+01 // restricted
VCycle top 4, cycle 0, current 2, res_norm 1.759372e+01 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 1, res_norm 1.234398e+01 // restricted
VCycle top 4, cycle 0, current 1, res_norm 4.728777e+00 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 0, res_norm 3.343750e+00 // restricted
// coarsest grid
VCycle top 4, cycle 0, current 0, res_norm 0.000000e+00 // solved
// UP
VCycle top 4, cycle 0, current 1, res_norm 3.738426e+00 // prolonged
VCycle top 4, cycle 0, current 1, res_norm 0.000000e+00 // relaxed (many iterations)
VCycle top 4, cycle 0, current 2, res_norm 1.509429e+01 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 2, res_norm 2.512148e-15 // relaxed (many iterations)
VCycle top 4, cycle 0, current 3, res_norm 4.695979e+01 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 3, res_norm 0.000000e+00 // relaxed (many iterations)
VCycle top 4, cycle 0, current 4, res_norm 1.469312e+02 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 4, res_norm 9.172812e-24 // relaxed (many iterations)
Tôi không chắc chắn nếu chỉ có thể có một vài chữ số đạt được trong mỗi chu kỳ hoặc nếu điều này chỉ ra lỗi trong quá trình nội suy vào lưới mịn. Nếu là trường hợp sau, làm thế nào LDC có thể đạt được tỷ lệ còn lại trong sách ~ 0,03 khi sử dụng luôn 2 lần thư giãn?