- #1

- 56

- 9

This function clearly has its return value declared as complex*16:

Fortran:

```
!----------4-vector dot product under Minkowski metric----------
function dot4(v1,v2) result(res)
implicit none
complex*16 v1(4),v2(4)
complex*16, dimension(0):: res
res=v1(1)*v2(1)-v1(2)*v2(2)-v1(3)*v2(3)-v1(4)*v2(4)
return
end
```

Fortran:

```
!----------laser-dressed 4-vec----------
function bar(v,k,mu) result(res)
implicit none
complex*16 v(4),k(4)
complex*16, dimension(4):: res
real*8 me,c, mu
me=9.10938291E-31 !electron rest mass, in kg
c=137.0 !speed of light, in au
res=v+((mu*me*c)**2)/(4*dot4(k,v))*k
return
end
```

I can't declare dot4 in the "bar" function because it would then be considered a local variable instead of a function being called. This creates the error of "dot4(k,v)" trying to look for a matrix element in dot4, causing a type mismatch within "bar".res=v+((mu*me*c)**2)/(4*dot4(k,v))*k

................................................1

Error: function 'dot4' at (1) has no implicit type

I was searching for information about this issue and saw that using modules and public statements may help, but I am confused as to how these work. Is this the right direction to be looking in, or is it some other syntax issue? Thanks.