Bruce Wedan
ANSYS/ICEM CFD
include 'cgnslib_f.h' mach = 0.5 alpha = 0 re = 0 time = 0 C---- zone 1 - cube do n=1,3 idim1(n,1) = 5 idim1(n,2) = 4 idim1(n,3) = 0 enddo do i=1,5 do j=1,5 do k=1,5 r1(i,j,k,1) = i - 3 r1(i,j,k,2) = j - 3 r1(i,j,k,3) = k - 5 do n=1,5 q1(i,j,k,n) = n enddo enddo enddo enddo C---- zone 2 - cylinder do n=1,3 idim2(n,1) = 5 idim2(n,2) = 4 idim2(n,3) = 0 enddo idim2(2,1) = 10 idim2(2,2) = 9 do i=1,5 do j=1,10 do k=1,5 rad = i - 1 ang = 0.6981317*(j - 1) r2(i,j,k,1) = rad * cos(ang) r2(i,j,k,2) = rad * sin(ang) r2(i,j,k,3) = k - 1 do n=1,5 q2(i,j,k,n) = n enddo enddo enddo enddo
c---- write PLOT3D xyz file iunit = 11 open(iunit,file='example.xyz',form='unformatted') write(iunit) 2 write(iunit) (idim1(i,1),i=1,3),(idim2(i,1),i=1,3) write(iunit) ((((r1(i,j,k,n),i=1,5),j=1,5),k=1,5),n=1,3) write(iunit) ((((r2(i,j,k,n),i=1,5),j=1,10),k=1,5),n=1,3) close(iunit) c---- write PLOT3D q file open(iunit,file='example.q',form='unformatted') write(iunit) 2 write(iunit) (idim1(i,1),i=1,3),(idim2(i,1),i=1,3) write(iunit) mach,alpha,re,time write(iunit) ((((q1(i,j,k,n),i=1,5),j=1,5),k=1,5),n=1,5) write(iunit) ((((q2(i,j,k,n),i=1,5),j=1,10),k=1,5),n=1,5) close(iunit)
c---- open file and create base call cg_open_f('example.cgns',MODE_WRITE,ifile,ierr) if (ierr .ne. CG_OK) call cg_error_exit_f call cg_base_write_f(ifile,'Example',3,3,ibase,ierr) c---- zone 1 - cube call cg_zone_write_f(ifile,ibase,'Cube',idim1,Structured,izone,ierr) call cg_coord_write_f(ifile,ibase,izone,RealSingle,'CoordinateX',r1(1,1,1,1), & icoord,ierr) call cg_coord_write_f(ifile,ibase,izone,RealSingle,'CoordinateY',r1(1,1,1,2), & icoord,ierr) call cg_coord_write_f(ifile,ibase,izone,RealSingle,'CoordinateZ',r1(1,1,1,3), & icoord,ierr)
call cg_sol_write_f(ifile,ibase,izone,'Cube Solution',Vertex,isol,ierr) call cg_field_write_f(ifile,ibase,izone,isol,RealSingle,'Density', & q1(1,1,1,1),ifld,ierr) call cg_field_write_f(ifile,ibase,izone,isol,RealSingle,'MomentumX', & q1(1,1,1,2),ifld,ierr) call cg_field_write_f(ifile,ibase,izone,isol,RealSingle,'MomentumY', & q1(1,1,1,3),ifld,ierr) call cg_field_write_f(ifile,ibase,izone,isol,RealSingle,'MomentumZ', & q1(1,1,1,4),ifld,ierr) call cg_field_write_f(ifile,ibase,izone,isol,RealSingle,'EnergyStagnationDensity', & q1(1,1,1,5),ifld,ierr)
c---- zone 2 - cylinder call cg_zone_write_f(ifile,ibase,'Cylinder',idim2,Structured,izone,ierr) do n=1,3 call cg_coord_write_f(ifile,ibase,izone,RealSingle,cnames(n),r2(1,1,1,n), & icoord,ierr) enddo call cg_sol_write_f(ifile,ibase,izone,'Cylinder Solution',Vertex,isol,ierr) do n=1,5 call cg_field_write_f(ifile,ibase,izone,isol,RealSingle,snames(n),q2(1,1,1,n), & ifld,ierr) enddo c---- close file call cg_close_f(ifile,ierr)
call cg_zone_write_f(ifile,ibase,'Cube',idim1,Structured,izone,ierr) call cg_goto_f(ifile,ibase,ierr,'Zone_t',izone,'end') call cg_link_write_f('GridCoordinates','grid.cgns','/Example/Cube/GridCoordinates',ierr)
Mesh Size | 100×100×100 | 200×200×200 | 400×400×400 | |||
---|---|---|---|---|---|---|
File Size | 30.5 MB | 244 MB | 1.90 GB | |||
PLOT3D | 2.32 (3.62) secs | 16.0 (45.8) secs | 126 (216) secs | |||
CGNS (1 file) (+6K bytes) | 2.48 (0.63) secs | 17.2 (7.9) secs | 129 (40) secs | |||
CGNS (2 files) (+14K bytes) | 2.34 (0.67) secs | 17.4 (8.1) secs | 164 (41) secs | |||
call cg_goto_f(ifile,ibase,ierr,'end') text = 'This is a simple example of a cube and cylinder' call cg_descriptor_write_f('Description',text,ierr)
call cg_units_write_f(Kilogram,Meter,Second,Kelvin,Degree,ierr) call cg_unitsfull_write_f(Kilogram,Meter,Second,Kelvin,Degree,Ampere,Mole,Candela,ierr)
call cg_dataclass_write_f(NormalizedByUnknownDimensional,ierr)
call cg_state_write_f('Reference Quantities',ierr) call cg_goto_f(ifile,ibase,ierr,'ReferenceState_t',1,'end') call cg_array_write_f('Mach',RealSingle,1,1,mach,ierr) call cg_goto_f(ifile,ibase,ierr,'ReferenceState_t',1,'DataArray_t',1,'end') call cg_dataclass_write_f(NondimensionalParameter,ierr) call cg_goto_f(ifile,ibase,ierr,'ReferenceState_t',1,'end') call cg_array_write_f('LengthReference',RealSingle,1,1,reflen,ierr) call cg_goto_f(ifile,ibase,ierr,'ReferenceState_t',1,'DataArray_t',3,'end') call cg_dataclass_write_f(Dimensional,ierr) call cg_units_write_f(Null,Foot,Null,Null,Null,ierr)
call cg_simulation_type_write_f(ifile,ibase,NonTimeAccurate,ierr)
call cg_goto_f(ifile,ibase,ierr,'end') call cg_equationset_write_f(5,ierr) call cg_goto_f(ifile,ibase,ierr,'FlowEquationSet_t',1,'end') call cg_governing_write_f(Euler,ierr) call cg_model_write_f('GasModel_t',Ideal,ierr)
call cg_coord_write_f(ifile,ibase,izone,RealSingle,'CoordinateR',rc(1,1,1,1), & icoord,ierr) call cg_coord_write_f(ifile,ibase,izone,RealSingle,'CoordinateTheta',rc(1,1,1,2), & icoord,ierr) call cg_coord_write_f(ifile,ibase,izone,RealSingle,'CoordinateZ',rc(1,1,1,3), & icoord,ierr)
do n=1,3 transform(n) = n range(n,1) = 1 range(n,2) = 5 d_range(n,1) = 1 d_range(n,2) = 5 enddo range(2,2) = 1 d_range(2,1) = 10 d_range(2,2) = 10 call cg_1to1_write_f(ifile,ibase,izone,'Periodic','Cylinder',range,d_range,transform, & iconn,ierr)
n = 0 do j=1,5 do i=1,5 rad = sqrt(r1(i,j,5,1)**2 + r1(i,j,5,2)**2) ang = atan2(r1(i,j,5,2), r1(i,j,5,1)) ic = rad if (ic .ge. 4) ic = 3 if (ang .lt. 0.0) ang = ang + 6.2831853 ang = ang / 0.6981317 jc = ang if (jc .ge. 9) jc = 8; pts(n+1) = i; pts(n+2) = j; pts(n+3) = 5; d_cell(n+1) = ic + 1; d_cell(n+2) = jc + 1; d_cell(n+3) = 1; interp(n+1) = rad - ic; interp(n+2) = ang - jc; interp(n+3) = 0.0; n = n + 3 enddo enddo call cg_conn_write_f(ifile,ibase,izone,'Cube -> Cylinder',Vertex,Abutting,PointList, & n/3,pts,'Cylinder',Structured,CellListDonor,Integer,n/3,d_cell, & iconn,ierr) c write the interpolants call cg_goto_f(ifile,ibase,ierr,'Zone_t',izone,'ZoneGridConnectivity_t',1, & 'GridConnectivity_t',iconn,'end') dims(1) = 3; dims(2) = n / 3; call cg_array_write_f('InterpolantsDonor',RealSingle,2,dims,interp,ierr)
do n=1,3 range(n,1) = 1 range(n,2) = 5 enddo range(3,2) = 1 call cg_boco_write_f(ifile,ibase,izone,'Inlet',BCInflow,PointRange,2,range,ibc,ierr)
call cg_dataset_write_f(ifile,ibase,izone,ibc,'Inflow Conditions',BCInflowSubsonic, & idset,ierr) call cg_bcdata_write_f(ifile,ibase,izone,ibc,idset,Dirichlet,ierr) call cg_goto_f(ifile,ibase,ierr,'Zone_t',izone,'ZoneBC_t',1,'BC_t',ibc,'BCDataSet_t', & idset,'BCData_t',Dirichlet,'end') call cg_array_write_f('Density',RealSingle,1,1,0.9,ierr) call cg_array_write_f('VelocityX',RealSingle,1,1,1.5,ierr) call cg_array_write_f('VelocityY',RealSingle,1,1,0.0,ierr) call cg_array_write_f('VelocityZ',RealSingle,1,1,0.0,ierr)
n = 0 do k=1,5 do i=1,4 pts(n+1) = i+1 pts(n+2) = 1 pts(n+3) = k pts(n+4) = i pts(n+5) = 5 pts(n+6) = k n = n + 6 enddo do j=1,4 pts(n+1) = 1 pts(n+2) = j pts(n+3) = k pts(n+4) = 5 pts(n+5) = j+1 pts(n+6) = k n = n + 6 enddo enddo call cg_boco_write_f(ifile,ibase,izone,'Walls',BCWall,PointList,n/3,pts,ibc,ierr)
range(1,1) = 1 range(1,2) = 1 range(2,1) = 1 range(2,2) = 10 range(3,1) = 1 range(3,2) = 5 call cg_boco_write_f(ifile,ibase,izone,'Axis',BCDegenerateLine,PointRange,2,range, & ibc,ierr)
call cg_sol_write_f(ifile,ibase,izone,'Cylinder Solution',Vertex,isol,ierr)
call cg_sol_write_f(ifile,ibase,izone,'Cylinder Solution',CellCenter,isol,ierr)
rind(1,1) = 0 rind(2,1) = 1 rind(1,2) = 0 rind(2,2) = 0 rind(1,3) = 0 rind(2,3) = 1 call cg_goto_f(ifile,ibase,ierr,'Zone_t',izone,'FlowSolution_t',isol,'end') call cg_rind_write_f(rind,ierr)