CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > General Forums > Main CFD Forum

multi-dimensional dynamic array allocation for multi-block solver using fortran

Register Blogs Community New Posts Updated Threads Search

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old   June 24, 2012, 04:48
Post multi-dimensional dynamic array allocation for multi-block solver using fortran
  #1
New Member
 
Manokaran K
Join Date: Sep 2011
Posts: 4
Rep Power: 14
mano is on a distinguished road
I am converting my CFD solver to multi-block solver. I had used dynamic array allocation for the single block solver, but for multi-block, the dynamic array allocation syntax is not clear to me. I tried a sample code, but end up in error "Error: Expression at (1) must be scalar". I also don't know how to pass the multi dimensional allocated array to subroutines. Please, suggest solution, regards
common/iteration/nb
integer, dimension (,allocatable::nib,njb,nkb
real, dimension (:,:,:,,allocatable::x,y,z
allocate (nib(nb),njb(nb),nkb(nb))
do l=1,nb
ni=nib(l)
nj=njb(l)
nk=nkb(l)
allocate (x(l,ni,nj,nk),y(l,ni,nj,nk),z(l,ni,nj,nk))
enddo
call gridatt (x,y,z,nib,njb,nkb)
deallocate(x,y,z,nib,njb,nkb)
end
c
subroutine gridatt (x,y,z,nib,njb,nkb)
common/iteration/nb
integer, dimension (nb)::nib,njb,nkb
real, dimension (nb,nib,njb,nkb)::x,y,z
return
end
__________________
mano
mano is offline   Reply With Quote

Old   June 24, 2012, 15:03
Default
  #2
Member
 
Mohammad Reza Hadian
Join Date: Mar 2009
Location: Yazd, Iran
Posts: 52
Rep Power: 17
hadian is on a distinguished road
you can not declare an array with variable values for different indexes. thry should be fixed values. i know in this way you waist some amount of memory but there is no way ( as i know). your code should be like this:

common/iteration/nb
integer, dimension ( : ),allocatable::nib,njb,nkb
real, dimension (:,:,:,: ),allocatable::x,y,z
allocate (nib(nb),njb(nb),nkb(nb))
c calculate maximum value of ni, nj and nk in all blocks and store them in MaxNi,MaxNj and MaxNk respectively
allocate(x(nb,MaxNi,MaxNj,MaxNk),y(nb,MaxNi,MaxNj, MaxNk),z(nb,MaxNi,MaxNj,MaxNk))
call gridatt (x,y,z,MaxNi,MaxNj,MaxNk)
deallocate(x,y,z,nib,njb,nkb)
end
c
subroutine gridatt (x,y,z,MaxNi,MaxNj,MaxNk)
common/iteration/nb
integer, dimension (nb)::MaxNi,MaxNj,MaxNk
real, dimension (nb,MaxNi,MaxNj,MaxNk)::x,y,z
return
end
hadian is offline   Reply With Quote

Old   June 25, 2012, 10:24
Default
  #3
New Member
 
Manokaran K
Join Date: Sep 2011
Posts: 4
Rep Power: 14
mano is on a distinguished road
Thank you for your comments.
Well, your suggestion is to use maximum value in i,j,k direction from all blocks. It will work, but sometimes, if the block size varies drastically, this may not be optimum and giving the boundary conditions will be a tough job.
__________________
mano
mano is offline   Reply With Quote

Old   June 25, 2012, 10:50
Default
  #4
Member
 
Mohammad Reza Hadian
Join Date: Mar 2009
Location: Yazd, Iran
Posts: 52
Rep Power: 17
hadian is on a distinguished road
yes, you are right. but as i know there is no other way. if you want to use the memory efficiently, you should use one array and put the values of different blocks in continuous series. then you can access to any every variables of every block by knowing the size of its previous blocks. i think the following paper can help you in this way. note that the programming of this method is not easy.
Lien, F.S., Chen, W.L. and Leschziner,M.A. (1996). “A Multiblock Implementation of Non-Orthogonal Collocated Finite Volume Algorithm for Complex Turbulent Flows”, Int. J. Numer. Methods Fluids, 23, 567-588.
hadian is offline   Reply With Quote

Old   June 25, 2012, 21:01
Default
  #5
New Member
 
Manokaran K
Join Date: Sep 2011
Posts: 4
Rep Power: 14
mano is on a distinguished road
Thank you very much. Regards
__________________
mano
mano is offline   Reply With Quote

Reply

Tags
dynamic array, fortran, mult-block


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
CFX11 + Fortran compiler ? Mohan CFX 20 March 30, 2011 18:56
[Commercial meshers] Icem Mesh to Foam jphandrigan OpenFOAM Meshing & Mesh Conversion 4 March 9, 2010 02:58
compressible two phase flow in CFX4.4 youngan CFX 0 July 1, 2003 23:32


All times are GMT -4. The time now is 16:35.