source: codes/icosagcm/trunk/src/sphere/vector.f90 @ 810

Last change on this file since 810 was 810, checked in by adurocher, 5 years ago

cherrypick r745 : fix accuracy issue with cross_product2 => -xHost now conserves mass on Irene

File size: 1.3 KB
Line 
1MODULE vector
2  USE genmod
3
4CONTAINS
5
6  FUNCTION Norm(V)
7  IMPLICIT NONE
8    REAL(rstd)            :: Norm
9    REAL(rstd),INTENT(IN) :: V(3)
10   
11    Norm=sqrt(V(1)*V(1)+V(2)*V(2)+V(3)*V(3))
12 
13  END FUNCTION Norm
14 
15  FUNCTION dot_product(V1,V2)
16  IMPLICIT NONE
17    REAL(rstd)       :: dot_product
18    REAL(rstd),INTENT(IN) :: V1(3)
19    REAL(rstd),INTENT(IN) :: V2(3)
20   
21    dot_product=V1(1)*V2(1)+V1(2)*V2(2)+V1(3)*V2(3)
22   
23   END FUNCTION dot_product
24   
25   FUNCTION cross_product(V1,V2)
26   IMPLICIT NONE
27     REAL(rstd)     ::cross_product(3)
28     REAL(rstd),INTENT(IN) :: V1(3)
29     REAL(rstd),INTENT(IN) :: V2(3)
30     cross_product(1)=V1(2)*V2(3)-V1(3)*V2(2)
31     cross_product(2)=V1(3)*V2(1)-V1(1)*V2(3)
32     cross_product(3)=V1(1)*V2(2)-V1(2)*V2(1)     
33   END FUNCTION cross_product
34
35   SUBROUTINE cross_product2(Va,Vb,cross_product)
36   IMPLICIT NONE
37     REAL(rstd),INTENT(OUT):: cross_product(3)
38     REAL(rstd),INTENT(IN) :: Va(3), Vb(3)
39     REAL(rstd) :: V1(3),V2(3)
40     V1=.5*(Va+Vb)
41     V2=Va-Vb
42     cross_product(1)=V1(2)*V2(3)-V1(3)*V2(2)
43     cross_product(2)=V1(3)*V2(1)-V1(1)*V2(3)
44     cross_product(3)=V1(1)*V2(2)-V1(2)*V2(1)
45   END SUBROUTINE cross_product2
46
47    FUNCTION arc(lon,lat, lonc,latc)
48      REAL(rstd) :: lon,lat, lonc,latc, arc
49      arc=ACOS(sin(latc)*sin(lat)+cos(latc)*cos(lat)*cos(lon-lonc))
50    END FUNCTION arc
51
52END MODULE vector
Note: See TracBrowser for help on using the repository browser.