phd-scripts/Biomaterials13/Scripts/wrap_balloon.f95

55 lines
1.9 KiB
Fortran
Raw Normal View History

2024-05-13 19:50:21 +00:00
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