module calcvector use constants implicit none contains subroutine fileinit implicit none open(10,file=readname,access="sequential",form="unformatted") open(11,file=writename,access="sequential",form="unformatted") end subroutine fileinit subroutine fileread implicit none integer::m,k do m=1,8 do k=1,mz2 read(10) f(1:mx2,1:my2,k,m) end do end do end subroutine fileread subroutine filewrite(m) implicit none integer,intent(in)::m integer::k do k=1,mz2 write(11) f(1:mx2,1:my2,k,m) end do end subroutine filewrite subroutine hasihosei(m) implicit none integer,intent(in)::m integer::a,b,c do a=2,mx2-1 do b=2,my2-1 f(a,b,1,m)=f(a,b,2,m) f(a,b,mz2,m)=f(a,b,mz2-1,m) end do end do do a=2,mx2-1 do c=1,mz2 f(a,1,c,m)=f(a,2,c,m) f(a,my2,c,m)=f(a,my2-1,c,m) end do end do do b=1,my2 do c=1,mz2 f(1,b,c,m)=f(2,b,c,m) f(mx2,b,c,m)=f(mx2-1,b,c,m) end do end do end subroutine hasihosei subroutine rot(x1,x2) implicit none integer,intent(in)::x1,x2 integer::a,b,c,y1,z1,y2,z2 y1=x1+1;z1=x1+2;y2=x2+1;z2=x2+2 do a=2,mx+1 do b=2,my+1 do c=2,mz+1 f(a,b,c,x2)=(f(a,b+1,c,z1)-f(a,b-1,c,z1)-f(a,b,c+1,y1)+f(a,b,c-1,y1))/d f(a,b,c,y2)=(f(a,b,c+1,x1)-f(a,b,c-1,x1)-f(a+1,b,c,z1)+f(a-1,b,c,z1))/d f(a,b,c,z2)=(f(a+1,b,c,y1)-f(a,b+1,c,y1)-f(a,b+1,c,x1)+f(a,b-1,c,x1))/d end do end do end do end subroutine rot subroutine vpro(x1,x2,x3) implicit none integer,intent(in)::x1,x2,x3 integer::a,b,c,y1,z1,y2,z2,y3,z3 y1=x1+1;z1=x1+2;y2=x2+1;z2=x2+2;y3=x3+1;z3=x3+2 do a=1,mx2 do b=1,my2 do c=1,mz2 f(a,b,c,x3)=f(a,b,c,y1)*f(a,b,c,z2)-f(a,b,c,z1)*f(a,b,c,y2) f(a,b,c,y3)=f(a,b,c,z1)*f(a,b,c,x2)-f(a,b,c,x1)*f(a,b,c,z2) f(a,b,c,z3)=f(a,b,c,x1)*f(a,b,c,y2)-f(a,b,c,y1)*f(a,b,c,x2) end do end do end do end subroutine vpro subroutine vprominus(x1,x2,x3) implicit none integer,intent(in)::x1,x2,x3 integer::a,b,c,y1,z1,y2,z2,y3,z3 y1=x1+1;z1=x1+2;y2=x2+1;z2=x2+2;y3=x3+1;z3=x3+2 do a=1,mx2 do b=1,my2 do c=1,mz2 f(a,b,c,x3)=-f(a,b,c,y1)*f(a,b,c,z2)+f(a,b,c,z1)*f(a,b,c,y2) f(a,b,c,y3)=-f(a,b,c,z1)*f(a,b,c,x2)+f(a,b,c,x1)*f(a,b,c,z2) f(a,b,c,z3)=-f(a,b,c,x1)*f(a,b,c,y2)+f(a,b,c,y1)*f(a,b,c,x2) end do end do end do end subroutine vprominus subroutine spro(x1,x2,ans) implicit none integer,intent(in)::x1,x2,ans integer::a,b,c,y1,z1,y2,z2 y1=x1+1;z1=x1+2;y2=x2+1;z2=x2+2 do a=1,mx2 do b=1,my2 do c=1,mz2 f(a,b,c,ans)=f(a,b,c,x1)*f(a,b,c,x2)+f(a,b,c,y1)*f(a,b,c,y2)+f(a,b,c,z1)*f(a,b,c,z2) end do end do end do end subroutine spro subroutine crossvec(x1,x2,x3) implicit none integer,intent(in)::x1,x2,x3 integer::a,b,c,y1,z1,y2,z2,y3,z3 y1=x1+1;z1=x1+2;y2=x2+1;z2=x2+2;y3=x3+1;z3=x3+2 do a=1,mx2 do b=1,my2 do c=1,mz2 f(a,b,c,x3)=f(a,b,c,x1)*f(a,b,c,x2) f(a,b,c,y3)=f(a,b,c,y1)*f(a,b,c,y2) f(a,b,c,z3)=f(a,b,c,z1)*f(a,b,c,z2) end do end do end do end subroutine crossvec subroutine unitvector(x1,x2) implicit none integer,intent(in)::x1,x2 integer::a,b,c,y1,z1,y2,z2 real::length y1=x1+1;z1=x1+2;y2=x2+1;z2=x2+2 do a=1,mx2 do b=1,my2 do c=1,mz2 length=sqrt(f(a,b,c,x1)**2+f(a,b,c,y1)**2+f(a,b,c,z1)**2) f(a,b,c,x2)=f(a,b,c,x1)/length f(a,b,c,y2)=f(a,b,c,y1)/length f(a,b,c,z2)=f(a,b,c,z1)/length end do end do end do end subroutine unitvector subroutine crosseta(x1,x2) implicit none integer,intent(in)::x1,x2 integer::a,b,c do a=1,mx2 do b=1,my2 do c=1,mz2 f(a,b,c,x2)=eta*f(a,b,c,x1) end do end do end do end subroutine crosseta subroutine calclength(x1,x2) implicit none integer,intent(in)::x1,x2 integer::a,b,c,y1,z1 y1=x1+1;z1=x1+2 do a=1,mx2 do b=1,my2 do c=1,mz2 f(a,b,c,x2)=sqrt(f(a,b,c,x1)**2+f(a,b,c,y1)**2+f(a,b,c,z1)**2) end do end do end do end subroutine calclength subroutine zettaiti(m) implicit none integer,intent(in)::m integer::a,b,c do a=1,mx2 do b=1,my2 do c=1,mz2 if(f(a,b,c,m)<0)then f(a,b,c,m)=-f(a,b,c,m) end if end do end do end do end subroutine zettaiti subroutine kiriotosi(m,n,line) implicit none integer,intent(in)::m,n real,intent(in)::line integer::a,b,c do a=1,mx2 do b=1,my2 do c=1,mz2 if(f(a,b,c,m)>line)then f(a,b,c,n)=0 end if end do end do end do end subroutine kiriotosi subroutine vecsubtraction(x1,x2,x3) implicit none integer,intent(in)::x1,x2,x3 integer::a,b,c,y1,z1,y2,z2,y3,z3 y1=x1+1;z1=x1+2;y2=x2+1;z2=x2+2;y3=x3+1;z3=x3+2 do a=1,mx2 do b=1,my2 do c=1,mz2 f(a,b,c,x3)=f(a,b,c,x1)-f(a,b,c,x2) f(a,b,c,y3)=f(a,b,c,y1)-f(a,b,c,y2) f(a,b,c,z3)=f(a,b,c,z1)-f(a,b,c,z2) end do end do end do end subroutine vecsubtraction subroutine scalarcrossvector(m,x1,x2) implicit none integer,intent(in)::m,x1,x2 integer::a,b,c,y1,z1,y2,z2 y1=x1+1;z1=x1+2;y2=x2+1;z2=x2+2 do a=1,mx2 do b=1,my2 do c=1,mz2 f(a,b,c,x2)=f(a,b,c,m)*f(a,b,c,x1) f(a,b,c,y2)=f(a,b,c,m)*f(a,b,c,y1) f(a,b,c,z2)=f(a,b,c,m)*f(a,b,c,z1) end do end do end do end subroutine scalarcrossvector end module calcvector