55 lines
1.9 KiB
Fortran
55 lines
1.9 KiB
Fortran
|
Program Balloon_Wrap
|
||
|
!
|
||
|
! Program to map an unfolded ballon geometry onto a folded configuration (Based on Laroche Paper)
|
||
|
! Input: File containing nodal coords of ballon geometry (Abaqus INP Format)
|
||
|
! Output: File containing nodal coords of mapped ballon geometry (Abaqus INP Format)
|
||
|
! Rev. 1 - J. Grogan - 07/07/10
|
||
|
!
|
||
|
real pi,x_cor,y_cor,z_cor,theta,radius,theta_hat,rad_hat,alpha,beta,phi
|
||
|
real inner_radius,outer_radius,num_folds,multiplier
|
||
|
integer node_num
|
||
|
logical outer_flap
|
||
|
!
|
||
|
open(unit=10,file='in.dat',status='old')
|
||
|
open(unit=11,file='out.dat',status='unknown')
|
||
|
!
|
||
|
pi=acos(-1.)
|
||
|
inner_radius=0.25
|
||
|
outer_radius=0.43
|
||
|
num_folds=3.
|
||
|
phi=(2*pi)/num_folds
|
||
|
outer_flap=.false.
|
||
|
!
|
||
|
do i=1, 9821
|
||
|
read(10,*)node_num,x_cor,y_cor,z_cor
|
||
|
theta=(atan2(z_cor,x_cor))
|
||
|
radius=sqrt(z_cor*z_cor+x_cor*x_cor)
|
||
|
!
|
||
|
if(theta<0.)then
|
||
|
theta=theta+2*pi
|
||
|
endif
|
||
|
!
|
||
|
beta=(phi/2.)*(1.+(2*radius)/(inner_radius+outer_radius))
|
||
|
alpha=((outer_radius+inner_radius)/(2*radius))*beta
|
||
|
!
|
||
|
do j=1,num_folds
|
||
|
if((theta>=(j-1)*phi).and.(theta<=(alpha+(j-1)*phi)))then
|
||
|
multiplier=j-1
|
||
|
outer_flap=.true.
|
||
|
elseif((theta>=(alpha+(j-1)*phi)).and.(theta<=(j*phi)))then
|
||
|
multiplier=j
|
||
|
outer_flap=.false.
|
||
|
endif
|
||
|
enddo
|
||
|
!
|
||
|
if(outer_flap)then
|
||
|
theta_hat=(beta/alpha)*(theta-multiplier*phi)+multiplier*phi
|
||
|
rad_hat=inner_radius+((outer_radius-inner_radius)/beta)*(theta_hat-multiplier*phi)
|
||
|
else
|
||
|
theta_hat=((beta-phi)/(phi-alpha))*(multiplier*phi-theta)+multiplier*phi
|
||
|
rad_hat=inner_radius+((outer_radius-inner_radius)/(beta-phi))*(theta_hat-multiplier*phi)
|
||
|
endif
|
||
|
!
|
||
|
write(11,*)node_num,',',rad_hat*cos(theta_hat),',',y_cor,',',rad_hat*sin(theta_hat)
|
||
|
enddo
|
||
|
end program
|