# map3d6.rb

require "narray"
require "numru/dcl"
include NMath
include NumRu

nx=37; ny=37
xmin=0.0;  xmax=360.0;  ymin= -90.0;  ymax= 90.0
vxmin=-0.4; vxmax=0.4; vymin=-0.3; vymax=0.3
zmin=-1.9;  zmax=1.9
vzmin=-0.2; vzmax=0.2
drad=PI/180

alon = xmin + (xmax-xmin)/(nx-1) * NArray.sfloat(nx).indgen!
alat = ymin + (ymax-ymin)/(ny-1) * NArray.sfloat(ny).indgen!

slat = sin(alat*drad).reshape!(1,ny)
p = 3*sqrt(1.0-slat**2)*slat*cos(alon*drad) - 0.5*(3*slat**2-1)

iws = (ARGV[0] || (puts ' WORKSTATION ID (I)  ? ;'; DCL::sgpwsn; gets)).to_i
DCL::sgopn iws
DCL::sgfrm

#-- X-Y PLANE ----

DCL::sgswnd(  xmin,  xmax,  ymin,  ymax )
DCL::sgsvpt( vxmin, vxmax, vymin, vymax )
DCL::sgstrn( 1 )
DCL::sgstrf

DCL::scspln( 1, 2, vzmin)
DCL::scseye( -2.1, -1.1, 0.7 )
DCL::scsobj(  0.0,  0.0, 0.0 )
DCL::scsprj

DCL::uxaxdv( 'B', 10.0, 60.0 )
DCL::uxaxdv( 'T', 10.0, 60.0 )
DCL::uxsttl( 'B', 'LONGITUDE', 0.0 )
DCL::uyaxdv( 'L', 10.0, 30.0 )
DCL::uyaxdv( 'R', 10.0, 30.0 )
DCL::uysttl( 'L', 'LATITUDE', 0.0 )

#-- X-Z PLANE ----

DCL::sgswnd(  xmin,  xmax,  zmin,  zmax )
DCL::sgsvpt( vxmin, vxmax, vzmin, vzmax )
DCL::sgstrn( 1 )
DCL::sgstrf

DCL::scspln( 1, 3, vymax)
DCL::scsprj

DCL::uzinit
DCL::uxaxdv( 'T', 10.0, 60.0 )
DCL::uzlset( 'LABELXB', false )
DCL::uxaxdv( 'B', 10.0, 60.0 )
DCL::uyaxdv( 'L', 0.2, 1.0 )
DCL::uyaxdv( 'R', 0.2, 1.0 )
DCL::uysttl( 'L', 'AMPLITUDE', 0.0 )

#-- Y-Z PLANE ----

DCL::sgswnd(  ymin,  ymax,  zmin,  zmax )
DCL::sgsvpt( vymin, vymax, vzmin, vzmax )
DCL::sgstrn( 1 )
DCL::sgstrf

DCL::scspln( 2, 3, vxmax)
DCL::scsprj

DCL::uzinit
DCL::uxaxdv( 'T', 10.0, 30.0 )
DCL::uxaxdv( 'B', 10.0, 30.0 )
DCL::uzlset( 'LABELYL', false )
DCL::uyaxdv( 'L', 0.2, 1.0 )
DCL::uyaxdv( 'R', 0.2, 1.0 )

#---------------- 3-D ------------------

DCL::scsvpt(vxmin, vxmax, vymin, vymax, vzmin, vzmax)
DCL::scswnd( xmin,  xmax,  ymin,  ymax,  zmin,  zmax)
DCL::scslog(false, false, false)
DCL::scstrn(1)
DCL::scstrf

(ny-2).downto(0){|j|
  (nx-2).downto(0){|i|
    xp = [ alon[i], alon[i],   alon[i+1],  alon[i+1], alon[i] ]
    yp = [ alat[j], alat[j+1], alat[j+1],  alat[j],   alat[j] ]
    zp = [ p[i,j],  p[i,j+1],  p[i+1,j+1], p[i+1,j],  p[i,j] ]
    DCL::sctnzu(xp[0..2], yp[0..2], zp[0..2], 10999, 50999)
    DCL::sctnzu(xp[2..4], yp[2..4], zp[2..4], 10999, 50999)
    DCL::scplu(xp, yp, zp)
 }
}

DCL::sgcls
