mat-f90
-
Upload
kevin-devalentino-versi-ii -
Category
Documents
-
view
2 -
download
0
description
Transcript of mat-f90
A MATLAB to Fortran conversion "Manual" 1
General remarks and programming
MATLAB FORTRAN90Editor Built-in Built-inCompilation Run-time compilation Compile by Ctrl+Shift+b and run by Ctrl+F5Cases Case sensitive (K 6= k) Case in-sensitive (K = k)Variables Scalar variables need not be defined All variables must be defined:
integer :: nreal(8) :: lengthreal(8) :: d, f(17), k(13,13)real(8), dimension(17) :: fcharacter(len = 6) :: wordlogical :: banded
Dynamicallocation NA
real(8), dimension(:,:), allocatable :: k...allocate (k(neqn, neqn))
Modules NA May contain "private" and "public" subroutinesTypes We did not use it see under "FEM specific remarks"
Subroutinecalls
[areas] = bisect(areas,amin, ...);
function [areas] = bisect(aold,amin, ...)...
call bisect(areas, amin, ...)
subroutine bisect(aold, amin, ...)real(8), intent(in) :: amin, ...real(8), dimension(:), intent(inout) :: aold...
Programming
MATLAB FORTRAN90
do loopsf or i = 1 : n...
end
do i = 1,n...
end do
if statementsi f (...)...
end
i f (...) then...
end i fIndexing K(edof,edof) = K(edof,edof) + k k(edof,edof) = k(edof,edof) + ke
Vector mul-tiplication
a = b’*c a = dot_product(b,c)
Matrix mul-tiplication
a = b*c a = matmul(b,c)
printing toscreen
remove ";" print*,’aout=’,aout
print matrix Kdo i = 1,neqnprint "(24(f4.2,tr1))",k(i,1:neqn)
end do# of columsin matrix
size(K,2) size(k,2)
Assigning i = 1500 i = 1500 (integer)variables d = 1500 d = 1.5e3 (or 1500.0) (real(4))
d = 1500 d = 1.5d3 (or 1500.0d0) (real(8))banded = 0 (or 1) banded = .false. [or .true.] (logical)word = ’blabla’ word = ’blabla’ (character)
Integer divi-sion
i=1, j=3 => i/j = 0.3333 i=1, j=3 => i/j = 0 (NB! Integer part of result!)
1Written for the course FEM-Heavy, Fall 2010 by Ole Sigmund.
1
FEM-Heavy-specific remarks
MATLAB FORTRAN90Number ofequations
neqn neqn
Number of el-ements
ne ne
Topology ma-trix
IX ix
Nodal coordi-nate matrix
X x
Element vec-tor (type)
NA
NA
NAIX(e,3)
element(e)%numnode number of nodes in element e
element(e)%id element type of element e ={
1 truss2 4−node
element(e)%ix(i) node i of element eelement(e)%mat material property number of element e
Number ofnodes pr.element
2 nen=element(e)%numnode
X-coord. ofnode 2 in ele-ment e
X(IX(e,2),1) x(element(e)%ix(2),1)
Materialpropertymatrix (type)
Young’s mod.:mprop(IX(e,3),1)
Area:mprop(IX(e,3),2)
mprop(element(e)%mat)%youngmprop(element(e)%mat)%areamprop(element(e)%mat)%numprop(element(e)%mat)%thkmprop(element(e)%mat)%densmprop(element(e)%mat)%youngymprop(element(e)%mat)%shear
number ofboundaryconditions
size(bound,1) nb
boundarycond. matrix
bound(:,3) bound(1:nb,1:3)
number ofloads
size(loads,1) np
load matrixloads(:,1:3)(node,dof,force)
loads(1:np,1:4)load-type=1: point load: (load-type,node,dof,force)load-type=2: pressure load: (load-type,element,face,pressure)
equation solv-ing
D = K \ Pcall factor(k)call solve(k,p)d(1:neqn)=p(1:neqn)
2