37 subroutine geo_coord(phi_val, lambda_val, x_val, y_val)
45 real(dp),
intent(in) :: x_val, y_val
47 real(dp),
intent(out) :: lambda_val, phi_val
51 #if (GRID==0 || GRID==1)
56 lambda0, phi0, lambda_val, phi_val)
73 lambda0, phi0, lambda_val, phi_val)
78 real(dp),
intent(in) :: x_val, y_val, a, b, lambda0, phi0
79 real(dp),
intent(out) :: lambda_val, phi_val
82 integer(i4b) :: sign_phi0
83 real(dp) :: phi_aux, phi0_aux
84 real(dp) :: e, mc, t, tc, kp, rho, phi_p, residual
85 real(dp) :: sinphi0, sinlambda0, cosphi0, coslambda0
87 real(dp),
parameter :: pi = 3.141592653589793_dp, &
89 eps_residual = 1.0e-09_dp
93 else if (phi0 < (-eps))
then
96 stop
' geo_coord: phi0 must be different from zero!'
99 phi0_aux = phi0 * sign_phi0
101 e=sqrt((a**2-b**2)/(a**2))
103 sinphi0 = sin(phi0_aux)
104 sinlambda0 = sin(lambda0)
105 cosphi0 = cos(phi0_aux)
106 coslambda0 = cos(lambda0)
108 tc=sqrt(((1.0_dp-sinphi0)/(1.0_dp+sinphi0))* &
109 ((1.0_dp+e*sinphi0)/(1.0_dp-e*sinphi0))**e)
110 mc=cosphi0/sqrt(1.0_dp-e*e*sinphi0*sinphi0)
111 rho=sqrt(x_val*x_val+y_val*y_val)
114 lambda_val = lambda0 + sign_phi0*atan2(y_val,x_val) + 0.5_dp*pi
118 phi_p=0.5_dp*pi-2.0_dp*atan(t)
121 do while(residual >= eps_residual)
123 phi_aux=0.5_dp*pi-2.0_dp*atan(t*((1.0_dp-e*sin(phi_p))/ &
124 (1.0_dp+e*sin(phi_p)))**(0.5_dp*e))
125 residual=abs(phi_aux-phi_p)
129 phi_val = phi_aux * sign_phi0
131 if (lambda_val < 0.0_dp)
then
132 lambda_val = lambda_val + 2.0_dp*pi
133 else if (lambda_val >= (2.0_dp*pi))
then
134 lambda_val = lambda_val - 2.0_dp*pi
Declarations of kind types for SICOPOLIS.
Declarations of global variables for SICOPOLIS (for the ANT domain).
subroutine stereo_inv_ellipsoid(x_val, y_val, A, B, lambda0, phi0, lambda_val, phi_val)
Inverse stereographic projection for an ellipsoidal planet.
subroutine geo_coord(phi_val, lambda_val, x_val, y_val)
Computation of longitude lambda and latitude phi for position (x,y) in the numerical domain...
Declarations of global variables for SICOPOLIS.