inoput_gw2.f90 Source File


Contents

Source Code


Source Code

module inoput_gw3
	use gnuplot
	implicit none
	contains
 !===================================
 subroutine input_gw3(restart,max_angle,LDL,max_length,&
		Apical_dominance_p,seedling_day,harvesting_day,RUE,max_leaf_angle,&
		max_leaf_length,max_leaf_width,leaf_shape_rate,limit_leaf_day,&
		peti_length,max_pod_number,source_convection_rate,source_limitation,&
		seed_pod_rate,threshold)
	real(8),intent(out)::max_angle,max_length,RUE,LDL,max_leaf_angle,&
		max_leaf_length,max_leaf_width,leaf_shape_rate,peti_length,&
		source_convection_rate,source_limitation,seed_pod_rate,threshold
	integer,intent(out)::restart,Apical_dominance_p,limit_leaf_day,max_pod_number
	integer,allocatable,intent(out)::seedling_day(:),harvesting_day(:)
	character*50 infile
	
	print *, "growth simulator 1.0"
	print *, "input file name"
	read(*,*) infile
	
	open(10,file=infile)
	
	allocate(seedling_day(3),harvesting_day(3) )
	
	read(10,*)max_angle,max_leaf_angle
	read(10,*)max_length
	read(10,*)RUE,limit_leaf_day
	read(10,*)seedling_day(1),seedling_day(2),seedling_day(3)
	read(10,*)harvesting_day(1),harvesting_day(2),harvesting_day(3)
	read(10,*)LDL
	read(10,*)Apical_dominance_p
	read(10,*)max_leaf_length,max_leaf_width,peti_length,leaf_shape_rate
	read(10,*)max_pod_number,source_convection_rate,source_limitation,&
		seed_pod_rate
	read(10,*)restart
	
	close(10)
	
 end subroutine input_gw3
 !===================================
 subroutine input_daylength(day,daylength)
	integer,allocatable,intent(out)::day(:,:)
	real(8),allocatable,intent(out)::daylength(:)
	integer i,j,n
	
	open(10,file="daylength.txt")
	read(10,*)n
	allocate(day(n,3),daylength(n) )
	
	do i=1,n
		read(10,*)day(i,1:3),daylength(i)!yy,mm,dd,daylength
	enddo
	close(10)
	
 end subroutine input_daylength
 !===================================
 subroutine gnuplot_gw3(d_connect,d_node,step,day,day_ID)
	integer,intent(in)::d_connect(:,:),step,day(:,:),day_ID
	real(8),allocatable::nod_coord(:,:)
	real(8),intent(in)::d_node(:,:)
	integer,allocatable::elem_nod(:,:)
	integer i,j,n
	
	n=size(d_node,1)
	allocate( nod_coord(n,3),elem_nod(n,2) )
	do i=1,n
		nod_coord(i,1:3)=d_node(i,1:3)
		elem_nod(i,1)=i
		elem_nod(i,2)=d_connect(i,1)
	enddo
	
	call gnuplot_out(elem_nod,nod_coord,step,day,day_ID)
	
	
 end subroutine gnuplot_gw3
 !=================================== 
 subroutine gnuplot_leaf_gw3(leaf_coord,peti_coord,d_node,step)
	real(8), intent(in) ::d_node(:,:),leaf_coord(:,:,:,:),peti_coord(:,:,:)
	integer,intent(in)::step
	integer i,j
	character filename1*17
	character filename2*17
	!======gnuplot動画出力用コマンド===========
	!データ作成用プログラム
	!連番ファイルの作成-----------------------
	i = step
	write (filename1, '("gnu_pet", i6.6, ".txt")') i ! ここでファイル名を生成している
	!write (filename2, '("gnu_pet", i6.6, ".png")') i
	open(40,file=filename1)
	!----------------------------------------
	
	
	!png出力用スクリプトファイル-----------------
	
	!open(50,file='png_script.gp',position='append')
	
	
	!write(50,*)'set output ','"',filename2,'"'
	!write(50,*)'replot ','"',filename1,'" with vectors'
	!=============================================
	
	do i =1, size(peti_coord,1)
		if(d_node(i,5)==0.0d0 )then
			write(40,*)d_node(1,1:3)
			write(40,*)d_node(1,1:3)
			write(40,*) '    '
			write(40,*) '    '
			cycle
		endif
		
		write(40,*)peti_coord(i,1,1:3)
		write(40,*)d_node(i,1:3)
		write(40,*) '    '
		write(40,*) '    '
		write(40,*)peti_coord(i,2,1:3)
		write(40,*)peti_coord(i,1,1:3)
		write(40,*) '    '
		write(40,*) '    '
		write(40,*)peti_coord(i,3,1:3)
		write(40,*)peti_coord(i,1,1:3)
		write(40,*) '    '
		write(40,*) '    '		
		write(40,*)peti_coord(i,4,1:3)
		write(40,*)peti_coord(i,1,1:3)
		write(40,*) '    '
		write(40,*) '    '
	enddo
	
	
	
	close(40)
	!close(50)
	
	i = step
	write (filename1, '("gnu_lef", i6.6, ".txt")') i ! ここでファイル名を生成している
	!write (filename2, '("gnu_pet", i6.6, ".png")') i
	open(40,file=filename1)
	!----------------------------------------
	
	
	!png出力用スクリプトファイル-----------------
	
	!open(50,file='png_script.gp',position='append')
	
	
	!write(50,*)'set output ','"',filename2,'"'
	!write(50,*)'replot ','"',filename1,'" with lines'
	!=============================================
	
	do i =2, size(leaf_coord,1)
		if(d_node(i,5)==0.0d0 )then
			write(40,*)d_node(1,1:3)
			write(40,*)d_node(1,1:3)
			write(40,*) '    '
			write(40,*) '    '
			cycle
		endif		
		
		do j=1, size(leaf_coord,2)
			!plot leaf 
			write(40,*)leaf_coord(i,j,1,1:3)
			write(40,*)leaf_coord(i,j,2,1:3)
			write(40,*)leaf_coord(i,j,3,1:3)
			write(40,*)leaf_coord(i,j,4,1:3)
			write(40,*)leaf_coord(i,j,1,1:3)
			write(40,*) '    '
			write(40,*) '    '
		enddo
	enddo
	
	
	
	close(40)
	!close(50)
	
	
 end subroutine gnuplot_leaf_gw3
 !===================================
 subroutine output_gw3(d_connect,d_node)
	integer,intent(in)::d_connect(:,:)
	real(8),intent(in)::d_node(:,:)
	integer i,n
	
	open(10,file="output_gw.d")
	n=size(d_connect,1)
	
	do i=1,n
		write(10,*)d_connect(i,:)
	enddo
	
	do i=1,n
		write(10,*)d_node(i,:)
	enddo
	
	close(10)
	
 end subroutine output_gw3
 !===================================
 subroutine output_factor(d_node,leaf_coord,occupied_area,step)
	real(8),intent(in)::d_node(:,:),leaf_coord(:,:,:,:)
	real(8),intent(out)::occupied_area
	real(8),allocatable::a(:),b(:)
	real(8) total_factor,r,r_tr,pi,x1,x2,l1,l2,LA
	integer,intent(in)::step
	integer i,j,k
	
	allocate(a(3),b(3))
	
	pi=3.1415926535d0
	
	if(step==1)then
		open(10,file="resource.txt")
		write(10,*)"days, resource/area, LAI, total resource,  area(m^2), leaf area(m^2)"
	else
		open(10,file="resource.txt",position='append')
	endif
	
	r=0.0d0
	!compute occupied areaby circle
	do i=1,size(leaf_coord,1) !node ID
		do j=1,size(leaf_coord,2)! Leaf ID
			do k=1,size(leaf_coord,3)! edge ID
				x1=leaf_coord(i,j,k,1)
				x2=leaf_coord(i,j,k,2)
				r_tr=dsqrt( x1*x1+x2*x2 )
				if(r < r_tr)then
					r=r_tr
				else
					cycle
				endif
			enddo
		enddo
	enddo
	occupied_area=r*r*pi*0.01*0.01
	
	LA=0.0d0
	!compute total leaf area
	do i=1,size(leaf_coord,1) !node ID
		do j=1,size(leaf_coord,2)! Leaf ID
			
			a(:)=leaf_coord(i,j,3,:)-leaf_coord(i,j,1,:)
			b(:)=leaf_coord(i,j,4,:)-leaf_coord(i,j,2,:)
			
			l1=dsqrt(dot_product(a,a) )
			l2=dsqrt(dot_product(b,b) )
			
			LA=LA+0.50d0*l1*l2*0.01*0.01
			
		enddo
	enddo	
	
	
	
	total_factor=0.0d0
	do i=1,size(d_node,1)
		total_factor=total_factor+d_node(i,5)
	enddo
	write(10,*)step,int(total_factor/occupied_area),LA/occupied_area,&
		total_factor,occupied_area,LA
	
	close(10)
	
	
 end subroutine output_factor
 !===================================
 subroutine output_harvest(d_pod,structural_TDW,d_node,seed_pod_rate,&
	occupied_area)
	real(8),intent(in)::d_pod(:,:),structural_TDW,d_node(:,:),&
		seed_pod_rate,occupied_area
	real(8) TDW,Harvest_TDW,seed_weight,yield,soyseed_per_dw,pod_weight
	integer i,j
	
	TDW=structural_TDW
	Harvest_TDW=0.0d0
	do i=1,size(d_pod,1)
		do j=1,size(d_pod,2)
			Harvest_TDW=Harvest_TDW+d_pod(i,j)
		enddo 
	enddo
	
	soyseed_per_dw=2.0d0
	
	
	seed_weight=seed_pod_rate/(1.0d0+soyseed_per_dw*seed_pod_rate)&
		*Harvest_TDW
	pod_weight=	1.0d0/(1.0d0+soyseed_per_dw*seed_pod_rate)&
		*Harvest_TDW
	
	TDW=TDW+seed_weight+pod_weight
	do i=1,size(d_node,1)
		TDW=TDW+d_node(i,5)
	enddo
	
	
	
	open(10,file="harvest.txt")
	write(10,*)"seed weight (g)     :",seed_weight
	write(10,*)"Yield (kg/10a)      :",seed_weight/occupied_area
	write(10,*)"Total Dry Weight(g) :",TDW
	write(10,*)"TDW yield (kg/10a)  :",TDW/occupied_area
	write(10,*)"Harvest Index       :",seed_weight/TDW
	
	close(10)
 
 end subroutine output_harvest
 !===================================
end module inoput_gw3