Lập trình fortran trong môi trường ansys CFX

20 610 0
Lập trình fortran trong môi trường ansys CFX

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Hàm người dùng định nghĩauser define fucntion (UDF), là hàm mà bạn lập trình để có thể được nhập vào (tải dữ liệu) bởi trình giải (solver) của phần mềm mô phỏng. Mục đích để nâng cao các đặc tính cơ bản của mã nguồn. Tài liệu hướng dẫn Lập trình fortran trong môi trường ansys CFX tạo hàm UFDHave fun

Lập trình bậng User Fortrận moi trường phận mem Ansys CFX Định nghĩa hàm UDF Hàm người dùng định nghĩa-user define fucntion (UDF), hàm mà bạn lập trình để nhập vào (tải liệu) trình giải (solver) phần mềm mô Mục đích để nâng cao đặc tính mã nguồn Ví dụ, bạn dùng UDF để định nghĩa điều kiện biên, đặc tính vật lý, toán tử nguồn cho chế dòng chảy riêng bạn, xác định thông số mô hình tùy biến, điều kiện ban đầu, nâng cao xử lý kết UDF viết với ngôn ngữ lập trình C Fortran, sử dụng trình biên soạn mã nguồn Một file chứa nhiều UDF, bạn định nghĩa nhiều file nguồn Tại cần dùng UDF? UDF cho phép tùy biến, thay đổi phần mềm mô phù hợp với toán tiêng UDF dùng cho nhiều ứng dụng khác Ví dụ:  Tùy biến điều kiện biên, định nghĩa đặc tính vật liệu, tốc độ phản ứng bề mặt thể tích, toán tử nguồn phương trình trao đổi…  Chỉnh sửa giá trị tính toán bước lặp  Khởi tạo lời giải ban đầu  Đồng thực thi lệnh  Cải thiện khả xử lý kết  Nâng cao mô hình có phần mềm Tổng quan User Fortran CFX Để cho người sử dụng thêm đặc tính mô hình vật lý cho ANSYS CFX, người sử dụng viết chương trình (subroutine) riêng họ ngôn ngữ lập trình FortranANSYS CFX-Solver gọi chương trình qua code nguồn giao diện Chúng ta xây dựng mô hình vật lý sẵn ANSYS CFX dựa hiểu biết suy nghĩ chắn ANSYS CFX hỗ trợ người dùng subroutine viết Fortran 77 hay Fortran 90 Một danh sách trình biên dịch hỗ trợ cho kiểu trường hợp có sử dụng Một lời khuyên đưa là: sử dụng Fortran 77 Hai loại khách routine sử dụng ANSYS CFX là:  User defined CEL (CFX Expression Language) functions: sử dụng CEL expresstion, tuân theo luật CEL chuẩn  Junction box routine: sử dụng vài nơi ANSYS CFX-Solver để chạy code người dùng Các nhiệm vụ sau thực với subroutine người dùng ANSYS CFX:  Nhập liệu người dùng ( ví dụ: liệu yêu cầu cho điều kiện biên profile hay nguồn bên ngoài)  Các điều kiện biên đặc biệt người dùng ( ví dụ: điều kiện biên profile)  Các điều kiện ban đầu đặc biệt người dùng ( ví dụ: vùng dòng chảy sinh bên ngoài, phân phối ngẫu nhiên nhiễu loạn giải pháp tồn tại)  Các giới hạn nguồn đặc biệt người dùng ( ví dụ: lực sinh bên vật thể giới hạn nguồn thêm vào cách tổng quan sử dụng mô hình vật lý) Junction box routine gọi tất bước thời gian mà hoạt động giao diện tổng qan ANSYS CFX-Solver phần mềm khác ( ví dụ: code kết cấu khí) Junction box yêu cầu giao diện cho monitor nâng cao giải pháp đầu Các User particle routine sử dụng để nguồn momen, nhiệt di chuyển khối lượng , sử dụng để vùng vào cho vật nhỏ Cấu trúc user routine nhỏ giống Chú ý ANSYS CFX bao gồm chức tăng biến thuật giải hình quan sát hay giá trị tổng quan chức mở rộng CEL, chức làm giảm nhu cầu sử dụng subroutine người dùng Để sử dụng junction box routine, người sử dụng cần phải làm quen với ANSYS CFX MMS (Memory Management System) để thiết lập đưa vào giá trị người dùng để vào routine Các thư viện chia sẻ (Shared libraries) chấp nhận subroutine sử dụng lại không cần bên dịch lại cho ANSYS CFX-Solver chạy hay chí cho ứng dụng khác Vị trí thư viện chia sẻ rõ ANSYS CFX-Pre Trong trình chạy ANSYS CFX-Solver, subroutine người dùng tải từ thư viện chia sẻ 2.1 User CEL Functions Routine User CEL function chấp nhận người dùng tạo chức riêng tùy ý để thêm vào định nghĩa ban đầu CEL function ( ví dụ: sin, cos, step…) Ta dùng chức cách diễn tả nơi mà CEL function sử dụng Một CEL function nhập vào giá trị cho subroutine người sử dụng, sử dụng giá trị trả lại từ routine để nhập lại vào giá trị mà có thay đổi Hình sau rõ ràng trình Hình 1.1 Trình tự làm việc User function Mọi biến mà CEL expression chuẩn sử dụng thì sử dụng cho User CEL Expression Có danh sách biến sử dụng Cấu trúc User CEL Function Một file User Fortran chứa vài routine, routine gọi ANSYS CFX-Solver routine gọi từ routine khác file Để miêu tả rõ hơn, cấu trúc user CEL function là: Macro dllexport():được sử dụng để chắn tên gọi biết từ bên mà trường hợp yêu cầu điều để thành công việc kết nối thời gian chạy Macro: #include "cfx5ext.h" nên dòng đầu file Fortran Một dllexport() nên xác định cho routine mà ANSYS CFX-Solver gọi file Fortran Mỗi dllexport() phải đứng trước routine mà đề cập tới phải bắt đầu cột Các argument macro dllexport nên đặt tên routine không nên có khoảng trống User CEL function có argument cố định gồm liệu lĩnh vực sau:  NLOC: số vị trí khoảng không nơi diễn phép tính  NARG: số argument chuyển tới chức  ARGS(1:NLOC,1:NARG): số argument chuyển tới chức năng( điểm khoảng trống)  NRET: số biến trả lại giá trị giá trị luôn ANSYS CFX, có khả thay đổi trình chạy chương trình  RET(1:NLOC, 1:NRET): biến trả lại giá trị (tại điểm khoảng trống)  CZ(*), DZ(*), IZ(*), RZ(*): CHARACTER, DOUBLE PRECISION, INTERGER, LOGICAL, REAL Độ dài (NLOC) argument (ARGS) giá trị trả lại (RET) user CEL function vị trí mà routine gọi Ví dụ, với nhóm yếu tố biên, NLOC số bề mặt nhóm, với đỉnh, NLOC số đỉnh vùng Chú ý rằng, mặt tổng quan, user CEL function gọi vài lần vòng lặp giá trị NLOC khác với lần gọi Đó ANSYS CFX-Solver chia vùng xác định (ví dụ: vùng điều kiện biên) thành số mảnh nhỏ gọi user CEL function cho mảnh Subroutine người dùng lập trình để thích hợp với điều Các stacks (CHARACTER, DOUBLE PRECISION ) dùng thông tin bên phía vế phải CEL expression (ví dujL B*C and D in A = UR (B*C, D)) không đủ cho tính toán A Có thể cần thiết cho việc lấy liệu bổ xung (ví dụ: giữ liệu nhập vào ngườ dùng, liệu vị trí khác, gradient …) Các liệu lấy vào từ ANSYS CFX Memory Management System yêu cầu stack tương ứng Vì stack tương ứng thêm vào danh sách argument Argument User CEL Function Khi nhập giá trị cho user CEL function routine, giá trị nhập vào argument biến đổi đơn vị cách tự động thành đơn vị xác định sẵn danh sách argument User Function Editor Khi lấy giá trị ra, đơn vị kết biến đổi tự động thành đơn vị thuật giải ANSYS CFX-Solver Khả chọn đơn vị làm việc routine với tự động biến đổi đơn vị hữu dụng cho việc tạo giao diện ANSYS CFX-Solver ứng dụng hay liệu thứ 2.2 User Junction Box Routines Để bổ xung việc định nghĩa CEL fuction riêng người sử dụng, ta gọi subroutine vài thời điểm trình chạy ANSYS CFX-Solver, gọi junction box Các junction box sử dụng để hoàn thành số nhiệm vụ khác nhau:  Nhập xuất liệu người dùng  Cải tiến chức hình thuật giải  Kết hợp ANSYS CFX với gói phần mềm khác  Điều khiển chương trình ( ví dụ: điều khiển tiêu chuẩn kết thúc hệ số vòng lặp chạy transient số vòng lặp lớn hay mục đích cần đạt được) User defined junction box routine dùng ANSYS CFX-Solver argument Không giống user CEL function, argument người sử dụng cho routine Tuy nhiên, việc sử dụng chức ANSYS CFX MMS (Memory Management System), người sử dụng có đường tốt vào cấu trúc liệu bên ANSYS CFX-Solver Các biến CEL dùng với junction box routine Ta gọi nhiều junction box trình chạy Các lựa chọn số Junction Box Routine Một junction box routine tạo ANSYS CFX-Fre cho ANSYS CFX-Solver biết nơi để tìm subroutine routine sử dụng Các số phải rõ diễn tả Các số thiết lập cho user routine CCL phải tương tự số sử dụng cho User CEL Function; nhiên số Junction Box Location CCL thêm vào điểm mà junction box routine sử dụng chạy ANSYS CFX-Solver Các số phải thiết lập cho USER ROUTINE CCL để dùng junction box routine  Calling Name: tên mà ta dùng subroutine (ví dụ: mysub cho subroutine mysub (…)) Chú ý tên nên cấp thấp chí cấp cao file Fortran  Library Name: tên thư viện chia sẻ  Library Path: đường dẫn tới thư mục chứa thư viện chia sẻ  Junction Box Location: danh sách vị trí thuật giải mà juction box routine sử dụng  First Partitioning Call: dùng chia cắt diễn Gọi junction box routine trước lưới đọc trước chia cắt diễn  Start of Partitioning: dùng chia cắt diễn Gọi junction box routine sau đọc lưới trước chia cắt diễn  End of Partitioning: dùng chia cắt diễn Gọi junction box routine sau chia cắt hoàn thành file par viết  First call: gọi trước lưới đọc sau việc nhập giá trị vật lý cho điều kiện biên Gọi sau chia cắt hoàn thành  Start of Run: gọi sau thiết lập vấn đề lưới đọc  End of Run: gọi sau kết ghi lại  User Input: gọi sau Start of Run Là vị trí khuyên dùng cho nhập code cho file Fortran người dùng, làm việc song song với nhiều phần chạy  User Start: gọi sau User Input với chia tách  User Output: gọi sau End of Run Đây vị trí khuyên dùng cho việc xuất kết quả, làm việc song song với nhiều phần chạy  Start of Timestep: gọi bắt đầu bước thời gian Việc gọi dùng chạy transient liên quan đến vòng lặp bên  User Input Start of Timestep: gọi thời điểm bắt đầu mỗi bước thời gian, làm việc hệt User Input gọi lúc bắt đầu bước thời gian chạy transient  End of Timestep: gọi kết thúc bước thời gian Chỉ ứng dụng cho chạy transient liên hệ tới vòng lặp bên  Start of Coefficient Loop: gọi vòng đặt giá trị vào, cho chạy transient liên quan đến vòng lặp bên  User Input Start of Coefficient Loop: gọi thời điểm bắt đầu hệ số vòng lặp, làm việc giống User Iput gọi thời điểm bắt đầu vòng lặp chạy transient trạng thái steady  End of Coefficient Loop: gọi thời điểm kết thúc vòng đặt giá trị, dùng chạy transient liên hệ tới vòng bên  Start of Linear Solution: gọi trước thuật giải tuyến tính cho phương trình định  End of Linear Solution: gọi sau thuật giải tuyến tính cho phương trình định  Abort: gọi thuật giải dừng lại số lý Gọi Juncton Box Routine Rất nhiều junction box routine định nghĩa, junction box routine chọn Solver Output Control tab gọi trình chạy ANSYS CFX-Solver 2.3 Thư viện chia sẻ Thư viện chia sẻ giúp ta kết nối với user routine trình chạy ANSYS CFX-Solver tránh việc cần phải tạo đoạn code dùng user subroutine, điều làm tăng chức ANSYS CFX Điều thể sau:  Các ứng dụng khác sử dụng lại thư viện thông thường hay cách sử dụng thư viện  Một ứng dụng sử dụng vài thư viện hay thư viện thay  Cả hai user CEL function junction box routine file CCL phải rõ tên thư viện, tên gọi nhât đường dẫn tới thư viện chia sẻ Cách tạo thư viện chia sẻ File cfx5mkext.exe sử dụng để tạo thư viện chia sẻ Ta phải chạy cfx5mkext –help để lấy thông tin argument chấp nhận Để tạo thư viện chia sẻ ta phải chạy: cfx5mkext myroutine1.F myroutine2.F dòng lệnh Điều tạo thư mục đặc biệt thư mục làm việc (ví dụ như: irix winnt) Thư mục chứa file chia sẻ thư viện như: libmyroutine1.so (UNIX except hpux) libmyroutine1.sl (hpux) myroutine1.dll (Windows) Một thư viện tạo cho tất file nhờ 10 cfx5mkext Mặc định, tên thư viện lấy theo file lệnh cfx5mkext Nếu ta dùng chế độ chạy hai ANSYS CFX-Solver cách xác, ta nên sử dụng argument –double với cfx5mkext để biên dịch subroutine Ta xác định tên khác cho đối tượng thư viện chia sẻ việc sử dụng lựa chọn: -name Lựa chọn sử dụng để đường dẫn đến vị trí thư viện Ví dụ: cfx5mkext -name UserRoutine -dest /home/user/SharedLibraries myroutine.F tạo libUserRoutine.so (UNIX except hpux) libmyroutine.sl (hpux) or UserRoutine.dll (Windows) Khi thiết kế, tên thư mục /home/user/SharedLibraries Khi đường dẫn đến thư viện ANSYS CFX-Pre, ta nên đường dẫn xác tới thư mục chứa chứa thư mục thiết kế (ví dụ: /home/user/SharedLibraries ví dụ trước, Window là: F:\user\SharedLibraries Một số đường dẫn tới thư viện cung cấp để chấp nhận việc chạy phân phối song song qua thiết kế khác 2.4 Phụ lục Biên dịch User Fortran Routine ANSYS CFX 11.0 Windows (32-bit) Bộ biên dịch Intel Fortran 9.0 khuyến cáo hỗ trợ việc biên dịch cho ANSYS CFX 11.0 Các đường dẫn hỗ trợ yêu cầu Visual C++2005 Express Edition sử dụng miễn phí Các thư viện tạo với Visual Fortran 6.6a (không phải 6.5) làm việc với Ansys CFX 11.0 Solver.Tuy nhiên, sản phẩm cài mặc định dùng trình dịch Intel Fortran chế độ mặc định 11 Biên dịch 64-bit User Fortran Routine ANSYS CFX 11.0 Window 64 Bộ trình dịch Intel Fortran 9.0 EM64T khuyên dùng hỗ trợ trình dịch cho CFX 11.0 Window 64 Các đường dẫn hộ trợ yêu cầu, SDK cho Windows Server 2003 cung cấp đường dẫn sử dụng Bộ trình dịch mặc định Fortran Lệnh cfx5mkext yêu cầu trình dịch Fortran đường dẫn Các chương trình lệnh bảng sau mặc định để chạy trình dịch trường hợp Bảng 1.1 Các chương trình lệnh Nếu chương trình lệnh không chạy trình dịch Fortran trường hợp của ta, ta phải copy file /etc/cfx5mkext.ccl vào thư mục làm việc Lệnh cfx5mkext tìm copy cfx5mkext.ccl thư mục làm việc trước Định dạng môi trường Fortran Windows Để định dạng môi trường Fortran:  Cài Visual C++ 2005 Express Edition  Cài Microsoft Platform SDK 12  Cập nhật thư mục Visual C++ Project and Solution Option Thêm đường dẫn xác tới phần:  File chạy: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin  File bao gồm: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include  File thư viện: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Lib Sửa lại file: corewin_express.vsprops ( đường dẫn: C:\Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults) sau, từ dòng AdditionalDependencies=”kernel32.lib” trở thành AdditionalDependencies=”kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib \advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib” Cài trình dịch Intel Fortran 9.0 Thiết lập môi trường Fortran việc chạy file IFortVars.bat chức đánh lệnh CFX (Launcher > Tools > Commande Line) Ứng dụng hàm UDF Bài toán mô dòng chảy đầu vào đoạn ống ứng dụng User Function Routine Ta có mô hình: nước chảy qua ống có bán kính 20 mm, ống có bề mặt thô bên Dòng chảy điều khiển van bướm, van đặt góc 55 độ với phương thẳng đứng Vận tốc đầu vào (m/s), profile vận tốc thừa nhận phát triển đầy đủ đầu vào ống, nghĩa vận tốc đầu vào ống tuân theo phương trình sau: 13 Trong đó:  : vận tốc đầu vào lớn ống, vận tốc điểm tâm ống = (m/s)   khoảng cách điểm vị trí đầu vào với tâm ống bán kính ống = 20 (mm)  Hình 1.2 Mô hình đoạn ống có van bướm Hình 1.3 Chia lưới cho mô hình nửa ống 14 Điều kiện thiết lập cho toán Tên biên Kiểu biên Inlet Velocity_INLET Đầu ống Outlet Pressure_OUTLET Mặt đối xứng symP Symmetry Mặt bao quanh ống Wall Wall FLUID Water Đầu vào ống Miền tính toán Các bước thiết lập User Function CEL Routine  Bước 1: copy file PipeValve_inlet.F vào thư mục sử dụng để chạy CFX  Bước 2: biên dịch file PipeValve_inlet.F Chọn: Tool > Command > Editor, gõ dòng lệnh: ! system ("cfx5mkext PipeValve_inlet.F") < or die; Khi file PipeValve_inlet.F biên dịch, thư mục thư mục mới: chạy, PipeValve_inlet.dll, winnt sinh có file: PipeValve_inlet.exp, PipeValve_inlet.lib, PipeValve_inlet.o Khi chắn việc biên dịch thành công lỗi sảy  Bước 3: tạo User CEL Function CFX – pre  Tạo User routine cách kích vào biểu tượng  Chọn Name: WprofRoutine  Chọn Option: User CEL Function  Chọn Calling Name: inlet_velocity (đây tên chương trình file PipeValve_inlet.F) 15  Chọn Library Name: PipeValve_inlet (đây tên file fortran: PipeValve_inlet.F)   Chọn Library Path: thư mục chứa file PipeValve_inlet.F Bước 4: nhập thông số đầu vào sử dụng User Function  Tạo User Function cách kích vào biểu tượng tương ứng  Chọn Name: WprofFunction  Chọn Option: User Function  Chọn User Routine Name: WprofRoutine  Chọn Argument Unit: [m s^-1], [m], [m] (đơn vị thông số đầu vào)  Chọn Result Unit: [m s^-1] (đơn vị cho thông số đầu ra) Sau sử dụng hàm WprofFunction() để nhập giá trị đầu vào định nghĩa giá trị đầu Nội dung hàm PipeValve_inlet.F #include "cfx5ext.h" dllexport(inlet_velocity) SUBROUTINE INLET_VELOCITY ( & NLOC, NRET, NARG, RET, ARGS, CRESLT, CZ,DZ,IZ,LZ,RZ ) INTEGER NLOC,NARG,NRETC CHARACTER CRESLT*(*) REAL ARGS(NLOC,NARG), RET(NLOC,NRET) INTEGER IZ(*) CHARACTER CZ(*)*(1) DOUBLE PRECISION DZ(*) LOGICAL LZ(*) 16 REAL RZ(*) INTEGER ILOC REAL EXPONENT, VALUE CALL SET_A_0( RET, NLOC*NRET ) EXPONENT = 1.0/7.0 DO ILOC = 1,NLOC VALUE = 1.0-ARGS(ILOC,2)/ARGS(ILOC,3) IF (VALUE LT 0.0) VALUE = 0.0 RET(ILOC,1) = ARGS(ILOC,1)*VALUE**EXPONENT END DO CRESLT = 'GOOD' C===================================================== ================== END Ý nghĩa chương trình sau: Ta có ARGS(NLOC,NARG) bảng gồm NARG cột NLOC hàng, ta cần tới cột thứ 3: Wmax Giá trị r ( biến đổi) 17 Giá trị Rmax NLOC Ta dùng function: WprofFunction, dùng function sau: WprofFunction(Wmax, r, Rmax) Wmax Rmax giá trị ta định nghĩa r biến hệ thống định nghĩa sẵn √ , x y tọa độ Các giá trị Wmax, r, Rmax nhập vào ô tương ứng Các giá trị từ bảng lấy để tính toán sau Với r thay đổi, xét giá trị:   giá trị vận tốc không, cho vùng ống Nếu giá trị vận tốc tính theo công thức: Vậy vận tốc điểm ứng với giá trị r tính Các giá trị vận tốc nhập vào bảng RET(NLOC,NRET), với NLOC hàng NRET cột, ta cần dùng tới NLOC hàng cột Giá trị vận tốc NLOC 18 Các giá trị vận tốc đặt đơn vị m/s trình Pre CFX-Solver nhận biết sử dụng Kết Trường vận tốc mặt symmetry: Trường vận tốc đầu vào inlet: 19 Biểu đồ profile vận tốc: Nhận xét kết thu được: profile vận tốc đầu vào có giá trị lớn (m/s), vị trí tâm ống, gần biên vận tốc tiến dần (m/s), hình dạng profile vận tốc tựa phương trình: 20 ... User Fortran CFX Để cho người sử dụng thêm đặc tính mô hình vật lý cho ANSYS CFX, người sử dụng viết chương trình (subroutine) riêng họ ngôn ngữ lập trình Fortran có ANSYS CFX- Solver gọi chương trình. .. sử dụng Bộ trình dịch mặc định Fortran Lệnh cfx5 mkext yêu cầu trình dịch Fortran đường dẫn Các chương trình lệnh bảng sau mặc định để chạy trình dịch trường hợp Bảng 1.1 Các chương trình lệnh... sử dụng lại không cần bên dịch lại cho ANSYS CFX- Solver chạy hay chí cho ứng dụng khác Vị trí thư viện chia sẻ rõ ANSYS CFX- Pre Trong trình chạy ANSYS CFX- Solver, subroutine người dùng tải từ

Ngày đăng: 27/06/2017, 17:25

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan