⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readdata.f90

📁 动力学计算程序
💻 F90
字号:
subroutine ReadData()
!-------------------------------------------------
! Purpose: Read data from files specified by K_filename, M_filename, IniD_filename, etc.
!-------------------------------------------------

	use module_parameter
	use module_data
	use module_ioport
	implicit none
	logical :: InquireFile, pcomp
	integer :: i,j
	allocate( K_matrix(ndof,ndof), M_matrix(ndof,ndof), C_matrix(ndof,ndof))
	allocate( d0_vector(ndof), v0_vector(ndof), NodalForceId(ndof))
	
	write(oport_runmsg, 200)
200 format(/, '====== Begin to read data file ... ======') 
! -------Read Stiff Matrix from K_filename.---------------------- 
	if(InquireFile(K_filename)) then ! K_filename exists
		open(unit=iport_data,file=K_filename, status='old')
		read(iport_data,*) ((K_matrix(i,j),j=1,ndof),i=1,ndof)
		close(iport_data)
		write(oport_runmsg, 210)  
		write(oport_runmsg,211) ((K_matrix(i,j),j=1,ndof),i=1,ndof)
		
	endif
210 format(/,'Read data of stiff matrix...')
211	format(4X,'Stiff matrix is :', /,(4X,<ndof>F12.4))
! -------Read Mass Matrix from M_filename.---------------------
	M_matrix=0.0
	if(InquireFile(M_filename)) then ! K_filename exists
		open(unit=iport_data,file=M_filename, status='old')
		if(pcomp(M_type, 'cons',4)) then
			read(iport_data,*) ((M_matrix(i,j),j=1,ndof),i=1,ndof)
			write(oport_runmsg, 220)
			write(oport_runmsg,221) ((M_matrix(i,j),j=1,ndof),i=1,ndof)
		elseif(pcomp(M_type, 'lump',4)) then
			read(iport_data,*) (M_matrix(i,i),i=1,ndof)
			write(oport_runmsg, 220)
			write(oport_runmsg, 222) (M_matrix(i,i),i=1,ndof)
		else
			write(oport_runmsg, 223)
			stop '***Error : The type of Mass Matrix is wrong! Check input file!'
		end if
		close(iport_data)
	endif
220 format(/,'Read data of mass matrix...')
221 format(4X,'Consistent mass matrix is :', /,(4X,<ndof>F12.4))
222 format(4X, 'Lumped mass matrix is :', /, 4X, <ndof>f12.4)
223 format(/,'***Error : The type of Mass Matrix is wrong! Check input file!')
! -------Construct Damping Matrix.-----------------------------
	! If C_type is 'file', read Damping Matrix from C_filename;
	! If C_type is 'rayl', compute Damping Matrix from K_matrix and M_matrix.
	
	if(C_exist) then
		if(pcomp(C_type, 'file',4)) then
			if(InquireFile(C_filename)) then
				open(unit=iport_data,file=C_filename, status='old')
				read(iport_data,*) ((C_matrix(i,j),j=1,ndof),i=1,ndof)
				close(iport_data)
				write(oport_runmsg, 230)
				
			endif
		elseif(pcomp(C_type, 'rayl', 4)) then
			C_matrix = K_matrix*rayl_coef(1) + M_matrix*rayl_coef(2)
		else
			write(oport_runmsg, 232)
			stop '***Error : The type of Damping Matrix is wrong! Check input file!'
		endif
	else
		C_matrix = 0.0
	end if
	write(oport_runmsg,231) ((C_matrix(i,j),j=1,ndof),i=1,ndof)
230 format(/,'Read data of damping matrix...')
231 format(4X,'Damping matrix is :', /,(4X,<ndof>F12.4))
232 format(/,'***Error : The type of Damping Matrix is wrong! Check input file!')
! ------Read Initial Displacement.-----------------------------
	if(pcomp(IniD_type, 'file',4)) then
		if(InquireFile(IniD_filename)) then
			open(unit=iport_data,file=IniD_filename, status='old')
			read(iport_data,*) (d0_vector(i),i=1,ndof)
			close(iport_data)
			write(oport_runmsg, 240) 
			write(oport_runmsg, 241) (d0_vector(i),i=1,ndof)
		endif
	elseif(pcomp(IniD_type, 'zero',4) .or. pcomp(IniV_type, '    ',4)) then
		d0_vector = 0.0
	else
		stop '***Error : The type of u0 is wrong! Check input file!'
	endif
240 format(/,'Read data of initial displacement ...')
241 format(4X, 'Initial displacement is :',/, 4X, <ndof>f12.4)
! ------Read Initial Velocity.-----------------------------
	if(pcomp(IniV_type, 'file',4)) then
		if(InquireFile(IniV_filename)) then
			open(unit=iport_data,file=IniV_filename, status='old')
			read(iport_data,*) (v0_vector(i),i=1,ndof)
			close(iport_data)
			write(oport_runmsg, 250) 
			write(oport_runmsg, 251) (v0_vector(i),i=1,ndof)
		endif
	elseif(pcomp(IniV_type, 'zero',4) .or. pcomp(IniV_type, '    ',4)) then
		v0_vector = 0.0
	else
		stop '***Error : The type of v0 is wrong! Check input file!'
	endif
250 format(/,'Read data of initial velocity ...')
251 format(4X, 'Initial velocity is :',/, 4X, <ndof>f12.4)
! ------Read nodal force ID.-----------------------------

	if(pcomp(F_type, 'file',4)) then
		if(InquireFile(F_filename)) then
			open(unit=iport_data,file=F_filename, status='old')
			read(iport_data,*) (NodalForceId(i),i=1,ndof)
			close(iport_data)
			write(oport_runmsg, 260) 
			write(oport_runmsg, 261) (NodalForceId(i),i=1,ndof)
		endif
	elseif(pcomp(F_type, 'sing',4)) then
		NodalForceId=0.0
		NodalForceId(F_dof)=1.0
	else
		NodalForceId=0.0
	endif
260 format(/,'Read data of nodal force ID ...')
261 format(4X, 'Nodal force ID is :',/, 4X, <ndof>i4)
! --------------------------------------------------------------
	write(oport_runmsg, 201)
201 format(/, '------ End of reading data file ------') 
end subroutine ReadData

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -