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

📄 tim_central.f90

📁 动力学计算程序
💻 F90
字号:
subroutine TIM_Central()

! Purpose: Central Difference Method.
	use linear_operators
	use module_parameter
	use module_data
	
	implicit none
	integer i
	real :: c0, c1, c2, c3, t, M_eff(1:ndof,1:ndof), f_eff(1:ndof), &
            f_t(1:ndof), d1(1:ndof), d2(1:ndof), d3(1:ndof), v2(1:ndof), &
            a2(1:ndof), invM(ndof,ndof)
	real PropForce

! Compute integral constants.
	c0=1/dt/dt; c1=0.5/dt; c2=2*c0; c3=1/c2;

! Compute displacement at -dt.
	d1=d0_vector - dt*v0_vector +c3*a0_vector
! Form the equivalent mass matrix
	M_eff = c0*M_matrix + c1*C_matrix  
! Compute the inverse of the equivalent mass matrix
	invM = .i. M_eff  

	d2=d0_vector
	t=0.0
	do i=1,nstep
		f_t = PropForce(t)*NodalForceId  ! force at time t
! Equivalent force at time t
		f_eff = f_t - ((K_matrix - c2*M_matrix) .x. d2)    &
					- ((c0*M_matrix - c1*C_matrix) .x. d1)    
		d3 = invM .x. f_eff  ! Solve displacement at time t+dt

		if(i .gt. 1) then
			a2 = c0*(d1 - 2*d2 +d3) ! acceleration at time t.
			v2 = c1*(d3-d1)         ! velocity at time t.
			call WriteToFile(t,d2,'d')
			call WriteToFile(t,v2,'v')
			call WriteToFile(t,a2,'a')
		endif
		d1=d2
		d2=d3
		t=t+dt
	end do

! output dispalcement at the last time node.
	call WriteToFile(t+dt,d2,'d')  

end subroutine TIM_Central

⌨️ 快捷键说明

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