10 real(sp),
dimension(3,3)::
rotm 20 real(dp),
dimension(3,3)::
rotm 63 subroutine sininmap(alon0,alat0,rot3)
64 use pietc_s,
only: u0,dtor
66 real(sp),
intent(IN ):: alon0,alat0
67 real(sp),
dimension(3,3),
intent(OUT):: rot3
68 real(sp) :: blon0,blat0,clon0,clat0,slon0,slat0
69 blon0=dtor*alon0; clon0=cos(blon0); slon0=sin(blon0)
70 blat0=dtor*alat0; clat0=cos(blat0); slat0=sin(blat0)
71 rot3(1,1)=slat0*clon0; rot3(1,2)=slat0*slon0; rot3(1,3)=-clat0
72 rot3(2,1)=-slon0; rot3(2,2)=clon0; rot3(2,3)=u0
73 rot3(3,1)=clat0*clon0; rot3(3,2)=clat0*slon0; rot3(3,3)=slat0
85 subroutine dininmap(alon0,alat0,rot3)
88 real(dp),
intent(IN ):: alon0,alat0
89 real(dp),
dimension(3,3),
intent(OUT):: rot3
90 real(dp) :: blon0,blat0,clon0,clat0,slon0,slat0
91 blon0=
dtor*alon0; clon0=cos(blon0); slon0=sin(blon0)
92 blat0=
dtor*alat0; clat0=cos(blat0); slat0=sin(blat0)
93 rot3(1,1)=slat0*clon0; rot3(1,2)=slat0*slon0; rot3(1,3)=-clat0
94 rot3(2,1)=-slon0; rot3(2,2)=clon0; rot3(2,3)=
u0 95 rot3(3,1)=clat0*clon0; rot3(3,2)=clat0*slon0; rot3(3,3)=slat0
107 subroutine sinivmap(alon0,alat0,rot3)
108 use pietc_s,
only: u0,dtor
110 real(sp),
intent(IN ):: alon0,alat0
111 real(sp),
dimension(3,3),
intent(OUT):: rot3
112 real(sp) :: blon0,blat0,clon0,clat0,slon0,slat0
122 rot3(2,1)=-slat0*clon0
123 rot3(2,2)=-slat0*slon0
125 rot3(3,1)=clat0*clon0
126 rot3(3,2)=clat0*slon0
139 subroutine dinivmap(alon0,alat0,rot3)
142 real(dp),
intent(IN ):: alon0,alat0
143 real(dp),
dimension(3,3),
intent(OUT):: rot3
144 real(dp) :: blon0,blat0,clon0,clat0,slon0,slat0
154 rot3(2,1)=-slat0*clon0
155 rot3(2,2)=-slat0*slon0
157 rot3(3,1)=clat0*clon0
158 rot3(3,2)=clat0*slon0
172 subroutine sctogr(xe,rlat,rlon)
173 use pietc_s,
only: u0
175 real(sp),
dimension(3),
intent(IN ):: xe
176 real(sp),
intent(OUT):: rlat,rlon
178 r=sqrt(xe(1)**2+xe(2)**2)
183 rlon=atan2(xe(2),xe(1))
197 subroutine dctogr(xe,rlat,rlon)
200 real(dp),
dimension(3),
intent(IN ):: xe
201 real(dp),
intent(OUT):: rlat,rlon
203 r=sqrt(xe(1)**2+xe(2)**2)
208 rlon=atan2(xe(2),xe(1))
219 subroutine sgrtoc(rlat,rlon,xe)
221 real(sp),
intent(IN ):: rlat,rlon
222 real(sp),
dimension(3),
intent(OUT):: xe
223 real(sp) :: sla,cla,slo,clo
224 sla=sin(rlat); cla=cos(rlat)
225 slo=sin(rlon); clo=cos(rlon)
226 xe(1)=cla*clo; xe(2)=cla*slo; xe(3)=sla
236 subroutine dgrtoc(rlat,rlon,xe)
238 real(dp),
intent(IN ):: rlat,rlon
239 real(dp),
dimension(3),
intent(OUT):: xe
240 real(dp) :: sla,cla,slo,clo
241 sla=sin(rlat); cla=cos(rlat)
242 slo=sin(rlon); clo=cos(rlon)
243 xe(1)=cla*clo; xe(2)=cla*slo; xe(3)=sla
256 subroutine sgrtocd(rlat,rlon,xe,dxedlat,dxedlon)
258 real(sp),
intent(IN ):: rlat,rlon
259 real(sp),
dimension(3),
intent(OUT):: xe,dxedlat,dxedlon
260 real(dp) :: rlat_d,rlon_d
261 real(dp),
dimension(3):: xe_d,dxedlat_d,dxedlon_d
262 rlat_d=rlat; rlon_d=rlon
263 call dgrtocd(rlat_d,rlon_d,xe_d,dxedlat_d,dxedlon_d)
279 subroutine dgrtocd(rlat,rlon,xe,dxedlat,dxedlon)
282 real(dp),
intent(IN ):: rlat,rlon
283 real(dp),
dimension(3),
intent(OUT):: xe,dxedlat,dxedlon
284 real(dp) :: sla,cla,slo,clo
285 sla=sin(rlat); cla=cos(rlat)
286 slo=sin(rlon); clo=cos(rlon)
287 xe(1)=cla*clo; xe(2)=cla*slo; xe(3)=sla
288 dxedlat(1)=-sla*clo; dxedlat(2)=-sla*slo; dxedlat(3)=cla
289 dxedlon(1)=-cla*slo; dxedlon(2)= cla*clo; dxedlon(3)=
u0 305 subroutine sgrtocdd(rlat,rlon,xe,dxedlat,dxedlon, &! [grtoc]
306 ddxedlatdlat,ddxedlatdlon,ddxedlondlon)
308 real(sp),
intent(IN ):: rlat,rlon
309 real(sp),
dimension(3),
intent(OUT):: xe,dxedlat,dxedlon, &
310 ddxedlatdlat,ddxedlatdlon,ddxedlondlon
311 real(dp) :: rlat_d,rlon_d
312 real(dp),
dimension(3):: xe_d,dxedlat_d,dxedlon_d, &
313 ddxedlatdlat_d,ddxedlatdlon_d,ddxedlondlon_d
314 rlat_d=rlat; rlon_d=rlon
315 call dgtocdd(rlat_d,rlon_d,xe_d,dxedlat_d,dxedlon_d, &
316 ddxedlatdlat_d,ddxedlatdlon_d,ddxedlondlon_d)
320 ddxedlatdlat=ddxedlatdlat_d
321 ddxedlatdlon=ddxedlatdlon_d
322 ddxedlondlon=ddxedlondlon_d
338 subroutine dgrtocdd(rlat,rlon,xe,dxedlat,dxedlon, &! [grtoc]
339 ddxedlatdlat,ddxedlatdlon,ddxedlondlon)
342 real(dp),
intent(IN ):: rlat,rlon
343 real(dp),
dimension(3),
intent(OUT):: xe,dxedlat,dxedlon, &
344 ddxedlatdlat,ddxedlatdlon,ddxedlondlon
345 real(dp) :: sla,cla,slo,clo
346 sla=sin(rlat); cla=cos(rlat)
347 slo=sin(rlon); clo=cos(rlon)
348 xe(1)=cla*clo; xe(2)=cla*slo; xe(3)=sla
349 dxedlat(1)=-sla*clo; dxedlat(2)=-sla*slo; dxedlat(3)=cla
350 dxedlon(1)=-cla*slo; dxedlon(2)= cla*clo; dxedlon(3)=
u0 351 ddxedlatdlat(1)=-cla*clo
352 ddxedlatdlat(2)=-cla*slo
354 ddxedlatdlon(1)= sla*slo
355 ddxedlatdlon(2)=-sla*clo
357 ddxedlondlon(1)=-cla*clo
358 ddxedlondlon(2)=-cla*slo
372 subroutine sctog(xe,dlat,dlon)
373 use pietc_s,
only: u0,rtod
375 real(sp),
dimension(3),
intent(IN ):: xe
376 real(sp),
intent(OUT):: dlat,dlon
378 r=sqrt(xe(1)**2+xe(2)**2)
379 dlat=atan2(xe(3),r)*rtod
383 dlon=atan2(xe(2),xe(1))*rtod
397 subroutine dctog(xe,dlat,dlon)
400 real(dp),
dimension(3),
intent(IN ):: xe
401 real(dp),
intent(OUT):: dlat,dlon
403 r=sqrt(xe(1)**2+xe(2)**2)
404 dlat=atan2(xe(3),r)*
rtod 408 dlon=atan2(xe(2),xe(1))*
rtod 422 subroutine sgtoc(dlat,dlon,xe)
423 use pietc_s,
only: dtor
425 real(sp),
intent(IN ):: dlat,dlon
426 real(sp),
dimension(3),
intent(OUT):: xe
427 real(sp) :: rlat,rlon,sla,cla,slo,clo
428 rlat=dtor*dlat; rlon=dtor*dlon
429 sla=sin(rlat); cla=cos(rlat)
430 slo=sin(rlon); clo=cos(rlon)
431 xe(1)=cla*clo; xe(2)=cla*slo; xe(3)=sla
444 subroutine dgtoc(dlat,dlon,xe)
447 real(dp),
intent(IN ):: dlat,dlon
448 real(dp),
dimension(3),
intent(OUT):: xe
449 real(dp) :: rlat,rlon,sla,cla,slo,clo
451 sla=sin(rlat); cla=cos(rlat)
452 slo=sin(rlon); clo=cos(rlon)
453 xe(1)=cla*clo; xe(2)=cla*slo; xe(3)=sla
469 subroutine sgtocd(dlat,dlon,xe,dxedlat,dxedlon)
471 real(sp),
intent(IN ):: dlat,dlon
472 real(sp),
dimension(3),
intent(OUT):: xe,dxedlat,dxedlon
473 real(dp) :: dlat_d,dlon_d
474 real(dp),
dimension(3):: xe_d,dxedlat_d,dxedlon_d
475 dlat_d=dlat; dlon_d=dlon
476 call dgtocd(dlat_d,dlon_d,xe_d,dxedlat_d,dxedlon_d)
495 subroutine dgtocd(dlat,dlon,xe,dxedlat,dxedlon)
498 real(dp),
intent(IN ):: dlat,dlon
499 real(dp),
dimension(3),
intent(OUT):: xe,dxedlat,dxedlon
500 real(dp) :: rlat,rlon,sla,cla,slo,clo
502 sla=sin(rlat); cla=cos(rlat)
503 slo=sin(rlon); clo=cos(rlon)
504 xe(1)=cla*clo; xe(2)=cla*slo; xe(3)=sla
505 dxedlat(1)=-sla*clo; dxedlat(2)=-sla*slo; dxedlat(3)=cla; dxedlat=dxedlat*
dtor 506 dxedlon(1)=-cla*slo; dxedlon(2)= cla*clo; dxedlon(3)=
u0 ; dxedlon=dxedlon*
dtor 526 subroutine sgtocdd(dlat,dlon,xe,dxedlat,dxedlon, &
527 ddxedlatdlat,ddxedlatdlon,ddxedlondlon)
529 real(sp),
intent(IN ):: dlat,dlon
530 real(sp),
dimension(3),
intent(OUT):: xe,dxedlat,dxedlon, &
531 ddxedlatdlat,ddxedlatdlon,ddxedlondlon
532 real(dp) :: dlat_d,dlon_d
533 real(dp),
dimension(3):: xe_d,dxedlat_d,dxedlon_d, &
534 ddxedlatdlat_d,ddxedlatdlon_d,ddxedlondlon_d
535 dlat_d=dlat; dlon_d=dlon
536 call dgtocdd(dlat_d,dlon_d,xe_d,dxedlat_d,dxedlon_d, &
537 ddxedlatdlat_d,ddxedlatdlon_d,ddxedlondlon_d)
541 ddxedlatdlat=ddxedlatdlat_d
542 ddxedlatdlon=ddxedlatdlon_d
543 ddxedlondlon=ddxedlondlon_d
563 subroutine dgtocdd(dlat,dlon,xe,dxedlat,dxedlon, &
564 ddxedlatdlat,ddxedlatdlon,ddxedlondlon)
567 real(dp),
intent(IN ):: dlat,dlon
568 real(dp),
dimension(3),
intent(OUT):: xe,dxedlat,dxedlon, &
569 ddxedlatdlat,ddxedlatdlon,ddxedlondlon
570 real(dp) :: rlat,rlon,sla,cla,slo,clo
572 sla=sin(rlat); cla=cos(rlat)
573 slo=sin(rlon); clo=cos(rlon)
574 xe(1)=cla*clo; xe(2)=cla*slo; xe(3)=sla
575 dxedlat(1)=-sla*clo; dxedlat(2)=-sla*slo; dxedlat(3)=cla; dxedlat=dxedlat*
dtor 576 dxedlon(1)=-cla*slo; dxedlon(2)= cla*clo; dxedlon(3)=
u0 ; dxedlon=dxedlon*
dtor 577 ddxedlatdlat(1)=-cla*clo
578 ddxedlatdlat(2)=-cla*slo
580 ddxedlatdlon(1)= sla*slo
581 ddxedlatdlon(2)=-sla*clo
583 ddxedlondlon(1)=-cla*clo
584 ddxedlondlon(2)=-cla*slo
586 ddxedlatdlat=ddxedlatdlat*
dtor**2
587 ddxedlatdlon=ddxedlatdlon*
dtor**2
588 ddxedlondlon=ddxedlondlon*
dtor**2
601 real(sp),
intent(in ):: splat,splon
602 real(sp),
dimension(3,3),
intent(out):: sorth
604 real(dp),
dimension(3,3):: orth
605 plat=splat; plon=splon;
call gtoframem(plat,plon,orth); sorth=orth
618 real(dp),
intent(in ):: plat,plon
619 real(dp),
dimension(3,3),
intent(out):: orth
620 real(dp),
dimension(3):: xp,yp,zp
622 orth(:,1)=xp; orth(:,2)=yp; orth(:,3)=zp
636 subroutine sgtoframev(splat,splon,sxp,syp,szp)
639 real(sp),
intent(in ):: splat,splon
640 real(sp),
dimension(3),
intent(out):: sxp,syp,szp
642 real(dp) :: plat,plon
643 real(dp),
dimension(3):: xp,yp,zp
645 plat=splat; plon=splon
647 sxp=xp; syp=yp; szp=zp
661 subroutine gtoframev(plat,plon, xp,yp,zp)
664 real(dp),
intent(in ):: plat,plon
665 real(dp),
dimension(3),
intent(out):: xp,yp,zp
666 real(dp),
dimension(3):: dzpdlat,dzpdlon
671 elseif(plat==-90)
then 676 call gtoc(plat,plon,zp,dzpdlat,dzpdlon)
677 xp=dzpdlon/sqrt(dot_product(dzpdlon,dzpdlon))
678 yp=dzpdlat/sqrt(dot_product(dzpdlat,dzpdlat))
695 subroutine sparaframe(sxp,syp,szp, sxv,syv,szv)
697 real(sp),
dimension(3),
intent(in ):: sxp,syp,szp, szv
698 real(sp),
dimension(3),
intent(out):: sxv,syv
699 real(dp),
dimension(3):: xp,yp,zp, xv,yv,zv
700 xp=sxp; yp=syp; zp=szp
721 real(dp),
dimension(3),
intent(in ):: xp,yp,zp, zv
722 real(dp),
dimension(3),
intent(out):: xv,yv
723 real(dp) :: xpofv,ypofv,theta,ctheta,stheta
724 real(dp),
dimension(3):: xq,yq
725 xpofv=dot_product(xp,zv)
726 ypofv=dot_product(yp,zv)
727 theta=atan2(ypofv,xpofv); ctheta=cos(theta); stheta=sin(theta)
728 xq=zv-zp; xq=xq-zv*dot_product(xq,zv); xq=
normalized(xq)
730 xv=xq*ctheta-yq*stheta
731 yv=xq*stheta+yq*ctheta
750 subroutine sframetwist(sxp,syp,szp, sxv,syv,szv, stwist)
752 real(sp),
dimension(3),
intent(in ):: sxp,syp,szp, sxv,syv,szv
753 real(sp),
intent(out):: stwist
754 real(dp),
dimension(3):: xp,yp,zp, xv,yv,zv
756 xp=sxp;yp=syp; zp=szp; xv=sxv; yv=syv; zv=szv
777 subroutine frametwist(xp,yp,zp, xv,yv,zv, twist)
779 real(dp),
dimension(3),
intent(in ):: xp,yp,zp, xv,yv,zv
780 real(dp),
intent(out):: twist
781 real(dp),
dimension(3):: xxv,yyv
784 c=dot_product(xv,xxv); s=dot_product(xv,yyv)
794 subroutine sctoc(s,xc1,xc2)
795 use pietc_s,
only: u1,u2
797 real(sp),
intent(IN ):: s
798 real(sp),
dimension(3),
intent(INOUT):: xc1,xc2
799 real(sp) :: x,y,z,a,b,d,e,ab2,aa,bb,di,aapbb,aambb
800 x=xc1(1); y=xc1(2); z=xc1(3)
824 subroutine sctocd(s,xc1,xc2,dxc2)
825 use pietc_s,
only: u0,u1,u2
827 real(sp),
intent(IN) :: s
828 real(sp),
dimension(3),
intent(INOUT):: xc1,xc2
829 real(sp),
dimension(3,3),
intent( OUT):: dxc2
830 real(sp) :: x,y,z,a,b,d,e, &
831 ab2,aa,bb,di,ddi,aapbb,aambb
832 x=xc1(1); y=xc1(2); z=xc1(3)
850 dxc2(1,3)=ab2*aambb*x*ddi
852 dxc2(2,3)=ab2*aambb*y*ddi
853 dxc2(3,3)=aapbb*di +ab2*e*ddi
865 subroutine sctocdd(s,xc1,xc2,dxc2,ddxc2)
866 use pietc_s,
only: u0,u1,u2
868 real(sp),
intent(IN ):: s
869 real(sp),
dimension(3),
intent(INOUT):: xc1,xc2
870 real(sp),
dimension(3,3),
intent( OUT):: dxc2
871 real(sp),
dimension(3,3,3),
intent( OUT):: ddxc2
872 real(sp) :: x,y,z,a,b,d,e, &
873 ab2,aa,bb,di,ddi,dddi, &
875 x=xc1(1); y=xc1(2); z=xc1(3)
894 dxc2(1,3)=ab2*aambb*x*ddi
896 dxc2(2,3)=ab2*aambb*y*ddi
897 dxc2(3,3)=aapbb*di +ab2*e*ddi
900 ddxc2(1,1,3)=ab2*aambb*ddi
901 ddxc2(1,3,1)=ddxc2(1,1,3)
902 ddxc2(1,3,3)=u2*ab2**2*aambb*x*dddi
903 ddxc2(2,2,3)=ab2*aambb*ddi
904 ddxc2(2,3,2)=ddxc2(2,2,3)
905 ddxc2(2,3,3)=u2*ab2**2*aambb*y*dddi
906 ddxc2(3,3,3)=u2*ab2*(aapbb*ddi+ab2*e*dddi)
915 subroutine dctoc(s,xc1,xc2)
918 real(dp),
intent(IN ):: s
919 real(dp),
dimension(3),
intent(INOUT):: xc1,xc2
920 real(dp) :: x,y,z,a,b,d,e, &
921 ab2,aa,bb,di,aapbb,aambb
922 x=xc1(1); y=xc1(2); z=xc1(3)
946 subroutine dctocd(s,xc1,xc2,dxc2)
949 real(dp),
intent(IN ):: s
950 real(dp),
dimension(3),
intent(INOUT):: xc1,xc2
951 real(dp),
dimension(3,3),
intent( OUT):: dxc2
952 real(dp) :: x,y,z,a,b,d,e, &
953 ab2,aa,bb,di,ddi,aapbb,aambb
954 x=xc1(1); y=xc1(2); z=xc1(3)
972 dxc2(1,3)=ab2*aambb*x*ddi
974 dxc2(2,3)=ab2*aambb*y*ddi
975 dxc2(3,3)=aapbb*di +ab2*e*ddi
987 subroutine dctocdd(s,xc1,xc2,dxc2,ddxc2)
990 real(dp),
intent(IN) :: s
991 real(dp),
dimension(3),
intent(INOUT):: xc1,xc2
992 real(dp),
dimension(3,3),
intent(OUT ):: dxc2
993 real(dp),
dimension(3,3,3),
intent(OUT ):: ddxc2
994 real(dp) :: x,y,z,a,b,d,e, &
995 ab2,aa,bb,di,ddi,dddi, &
997 x=xc1(1); y=xc1(2); z=xc1(3)
1016 dxc2(1,3)=ab2*aambb*x*ddi
1018 dxc2(2,3)=ab2*aambb*y*ddi
1019 dxc2(3,3)=aapbb*di +ab2*e*ddi
1022 ddxc2(1,1,3)=ab2*aambb*ddi
1023 ddxc2(1,3,1)=ddxc2(1,1,3)
1024 ddxc2(1,3,3)=
u2*ab2**2*aambb*x*dddi
1025 ddxc2(2,2,3)=ab2*aambb*ddi
1026 ddxc2(2,3,2)=ddxc2(2,2,3)
1027 ddxc2(2,3,3)=
u2*ab2**2*aambb*y*dddi
1028 ddxc2(3,3,3)=
u2*ab2*(aapbb*ddi+ab2*e*dddi)
1039 subroutine plrot(rot3,n,x,y,z)
1041 integer,
intent(IN ):: n
1042 real(sp),
dimension(3,3),
intent(IN ):: rot3
1043 real(sp),
dimension(n),
intent(INOUT):: x,y,z
1044 real(sp),
dimension(3) ::
t 1047 t(1)=x(k);
t(2)=y(k);
t(3)=z(k)
1049 x(k)=
t(1); y(k)=
t(2); z(k)=
t(3)
1051 end subroutine plrot 1061 subroutine plroti(rot3,n,x,y,z)
1063 integer,
intent(IN ):: n
1064 real(sp),
dimension(3,3),
intent(IN ):: rot3
1065 real(sp),
dimension(n),
intent(INOUT):: x,y,z
1066 real(sp),
dimension(3) ::
t 1069 t(1)=x(k);
t(2)=y(k);
t(3)=z(k)
1071 x(k)=
t(1); y(k)=
t(2); z(k)=
t(3)
1083 subroutine dplrot(rot3,n,x,y,z)
1085 integer,
intent(IN ):: n
1086 real(dP),
dimension(3,3),
intent(IN ):: rot3
1087 real(dP),
dimension(n),
intent(INOUT):: x,y,z
1088 real(dP),
dimension(3) :: t
1091 t(1)=x(k); t(2)=y(k); t(3)=z(k)
1093 x(k)=t(1); y(k)=t(2); z(k)=t(3)
1105 subroutine dplroti(rot3,n,x,y,z)
1107 integer,
intent(IN ):: n
1108 real(dP),
dimension(3,3),
intent(IN ):: rot3
1109 real(dP),
dimension(n),
intent(INOUT):: x,y,z
1110 real(dP),
dimension(3) :: t
1113 t(1)=x(k); t(2)=y(k); t(3)=z(k)
1115 x(k)=t(1); y(k)=t(2); z(k)=t(3)
1127 subroutine plctoc(s,n,x,y,z)
1128 use pietc_s,
only: u1
1130 integer,
intent(IN ):: n
1131 real(sp),
intent(IN ):: s
1132 real(sp),
dimension(n),
intent(INOUT):: x,y,z
1133 real(sp) :: a,b,d,e,ab2,aa,bb,di,aapbb,aambb
1146 x(i)=(aambb*x(i))*di
1147 y(i)=(aambb*y(i))*di
subroutine sctog(xe, dlat, dlon)
Transform "Cartesian" to "Geographical" coordinates, where the geographical coordinates refer to lati...
integer, parameter sp
Single precision real kind.
integer, parameter dp
Double precision real kind.
subroutine sgtocdd(dlat, dlon, xe, dxedlat, dxedlon, ddxedlatdlat, ddxedlatdlon, ddxedlondlon)
Transform "Geographical" to "Cartesian" coordinates, where the geographical coordinates refer to lati...
subroutine sinivmap(alon0, alat0, rot3)
Initialize the rotation matrix ROT3 needed to transform standard earth-centered cartesian components ...
Constants for orientation and stretching of map.
subroutine sgrtoc(rlat, rlon, xe)
Transform "Geographical" to "Cartesian" coordinates.
subroutine sgtoframev(splat, splon, sxp, syp, szp)
Given a geographical point by its degrees lat and lon, plat and plon, return its standard orthogonal ...
Constants for orientation and stretching of map.
real(dp) sc
Schmidt stretching factor.
Standard integer, real, and complex single and double precision kinds.
real(dp) sci
Schmidt inverse stretching factor.
real(dp), parameter u0
zero
subroutine dctocd(s, xc1, xc2, dxc2)
Evaluate Schmidt transformation, xc1 –> xc2, with scaling parameter s, and its jacobian, dxc2.
real(dp), parameter u2
two
subroutine dplrot(rot3, n, x, y, z)
Apply a constant rotation to a three dimensional polyline.
subroutine dgtocdd(dlat, dlon, xe, dxedlat, dxedlon, ddxedlatdlat, ddxedlatdlon, ddxedlondlon)
Transform "Geographical" to "Cartesian" coordinates, where the geographical coordinates refer to lati...
subroutine sctogr(xe, rlat, rlon)
Transform "Cartesian" to "Geographical" coordinates, where the geographical coordinates refer to lati...
subroutine sgrtocdd(rlat, rlon, xe, dxedlat, dxedlon, ddxedlatdlat, ddxedlatdlon, ddxedlondlon)
Transform "Geographical" to "Cartesian" coordinates, together with the 1st and 2nd partial derivative...
subroutine dgrtoc(rlat, rlon, xe)
Transform "Geographical" to "Cartesian" coordinates.
real(sp) sc
Schmidt stretching factor.
subroutine sparaframe(sxp, syp, szp, sxv, syv, szv)
Take a principal reference orthonormal frame, {xp,yp,zp} and a dependent point defined by unit vector...
subroutine sframetwist(sxp, syp, szp, sxv, syv, szv, stwist)
Given a principal cartesian orthonormal frame, {xp,yp,zp} (i.e., at P with Earth-centered cartesians...
subroutine dctog(xe, dlat, dlon)
Transform "Cartesian" to "Geographical" coordinates, where the geographical coordinates refer to lati...
subroutine gtoframem(plat, plon, orth)
From the degree lat and lon (plat and plon) return the standard orthogonal 3D frame at this location ...
real(sp), dimension(3, 3) rotm
Orthogonal rotation matrix.
subroutine dgrtocdd(rlat, rlon, xe, dxedlat, dxedlon, ddxedlatdlat, ddxedlatdlon, ddxedlondlon)
Transform "Geographical" to "Cartesian" coordinates, together with the 1st and 2nd partial derivative...
subroutine sctocd(s, xc1, xc2, dxc2)
Evaluate Schmidt transformation, xc1 –> xc2, with scaling parameter s, and its jacobian, dxc2.
real(dp), dimension(3, 3) rotm
Orthogonal rotation matrix.
Module for handy vector and matrix operations in Euclidean geometry.
subroutine sctoc(s, xc1, xc2)
Evaluate Schmidt transformation, xc1 –> xc2, with scaling parameter s.
subroutine dctocdd(s, xc1, xc2, dxc2, ddxc2)
Evaluate Schmidt transformation, xc1 –> xc2, with scaling parameter s, its jacobian, dxc2, and its 2nd derivative, ddxc2.
subroutine sgtoframem(splat, splon, sorth)
From the degree lat and lon (plat and plon) return the standard orthogonal 3D frame at this location ...
logical, parameter t
for pain-relief in logical ops
subroutine sctocdd(s, xc1, xc2, dxc2, ddxc2)
Evaluate Schmidt transformation, xc1 –> xc2, with scaling parameter s, its jacobian, dxc2, and its 2nd derivative, ddxc2.
real(dp), parameter dtor
Degrees to radians.
subroutine dgrtocd(rlat, rlon, xe, dxedlat, dxedlon)
Transform "Geographical" to "Cartesian" coordinates, together with the partial derivatives of cartesi...
real(dp), parameter rtod
radians to degrees
subroutine sgrtocd(rlat, rlon, xe, dxedlat, dxedlon)
Transform "Geographical" to "Cartesian" coordinates, together with the partial derivatives of cartesi...
subroutine gtoframev(plat, plon, xp, yp, zp)
Given a geographical point by its degrees lat and lon, plat and plon, return its standard orthogonal ...
subroutine dinivmap(alon0, alat0, rot3)
Initialize the rotation matrix ROT3 needed to transform standard earth-centered cartesian components ...
subroutine sininmap(alon0, alat0, rot3)
Initialize the rotation matrix ROT3 needed to transform standard earth-centered cartesian components ...
real(dp), parameter u1
one
subroutine sgtocd(dlat, dlon, xe, dxedlat, dxedlon)
Transform "Geographical" to "Cartesian" coordinates, where the geographical coordinates refer to lati...
subroutine dplroti(rot3, n, x, y, z)
Invert the rotation of a three-dimensional polyline.
subroutine dgtoc(dlat, dlon, xe)
Transform "Geographical" to "Cartesian" coordinates, where the geographical coordinates refer to lati...
Some of the commonly used constants (pi etc) mainly for double-precision subroutines.
subroutine sgtoc(dlat, dlon, xe)
Transform "Geographical" to "Cartesian" coordinates, where the geographical coordinates refer to lati...
subroutine dctogr(xe, rlat, rlon)
Transform "Cartesian" to "Geographical" coordinates, where the geographical coordinates refer to lati...
integer, parameter spi
Single precision integer kind.
real(sp) sci
Schmidt inverse stretching factor.
Utility routines for orienting the globe and basic geographical mappings.
subroutine dgtocd(dlat, dlon, xe, dxedlat, dxedlon)
Transform "Geographical" to "Cartesian" coordinates, where the geographical coordinates refer to lati...
subroutine dininmap(alon0, alat0, rot3)
Initialize the rotation matrix ROT3 needed to transform standard earth-centered cartesian components ...
subroutine dctoc(s, xc1, xc2)
Evaluate Schmidt transformation, xc1 –> xc2, with scaling parameter s.