34 public :: mprj_rotcoef
36 interface mprj_rotcoef
39 end interface mprj_rotcoef
52 private :: mprj_none_setup
53 private :: mprj_lambertconformal_setup
54 private :: mprj_polarstereographic_setup
55 private :: mprj_mercator_setup
56 private :: mprj_equidistantcylindrical_setup
58 private :: mprj_none_xy2lonlat
59 private :: mprj_lambertconformal_xy2lonlat
60 private :: mprj_polarstereographic_xy2lonlat
61 private :: mprj_mercator_xy2lonlat
62 private :: mprj_equidistantcylindrical_xy2lonlat
64 private :: mprj_none_lonlat2xy
65 private :: mprj_lambertconformal_lonlat2xy
66 private :: mprj_polarstereographic_lonlat2xy
67 private :: mprj_mercator_lonlat2xy
68 private :: mprj_equidistantcylindrical_lonlat2xy
70 private :: mprj_none_mapfactor
71 private :: mprj_lambertconformal_mapfactor
72 private :: mprj_polarstereographic_mapfactor
73 private :: mprj_mercator_mapfactor
74 private :: mprj_equidistantcylindrical_mapfactor
76 private :: mprj_none_rotcoef_2d
77 private :: mprj_lambertconformal_rotcoef_2d
78 private :: mprj_polarstereographic_rotcoef_2d
79 private :: mprj_mercator_rotcoef_2d
80 private :: mprj_equidistantcylindrical_rotcoef_2d
82 private :: mprj_none_rotcoef_0d
83 private :: mprj_lambertconformal_rotcoef_0d
84 private :: mprj_polarstereographic_rotcoef_0d
85 private :: mprj_mercator_rotcoef_0d
86 private :: mprj_equidistantcylindrical_rotcoef_0d
92 character(len=H_SHORT),
private :: mprj_type =
'NONE' 99 real(DP),
private :: mprj_hemisphere
101 real(DP),
private :: mprj_basepoint_x
102 real(DP),
private :: mprj_basepoint_y
104 real(DP),
private :: mprj_pole_x
105 real(DP),
private :: mprj_pole_y
106 real(DP),
private :: mprj_eq_x
107 real(DP),
private :: mprj_eq_y
109 real(DP),
private :: mprj_rotation = 0.0_dp
111 real(DP),
private :: mprj_lc_lat1 = 30.0_dp
112 real(DP),
private :: mprj_lc_lat2 = 60.0_dp
113 real(DP),
private :: mprj_lc_c
114 real(DP),
private :: mprj_lc_fact
116 real(DP),
private :: mprj_ps_lat
117 real(DP),
private :: mprj_ps_fact
119 real(DP),
private :: mprj_m_lat = 0.0_dp
120 real(DP),
private :: mprj_m_fact
122 real(DP),
private :: mprj_ec_lat = 0.0_dp
123 real(DP),
private :: mprj_ec_fact
125 real(DP),
private :: pi
126 real(DP),
private :: d2r
127 real(DP),
private :: radius
133 subroutine mprj_setup( DOMAIN_CENTER_X, DOMAIN_CENTER_Y )
143 real(RP),
intent(in) :: domain_center_x
144 real(RP),
intent(in) :: domain_center_y
146 namelist / param_mapproj / &
163 if(
io_l )
write(
io_fid_log,*)
'++++++ Module[MAPPROJ] / Categ[ATMOS-RM GRID] / Origin[SCALElib]' 165 pi =
real(pi_rp, kind=
dp)
166 d2r =
real(d2r_rp, kind=
dp)
167 radius =
real(radius_rp, kind=
dp)
169 mprj_basepoint_x = undef
170 mprj_basepoint_y = undef
173 mprj_basepoint_x = domain_center_x
174 mprj_basepoint_y = domain_center_y
181 if(
io_l )
write(
io_fid_log,*)
'*** Not found namelist. Default used.' 182 elseif( ierr > 0 )
then 183 write(*,*)
'xxx Not appropriate names in namelist PARAM_MAPPROJ. Check!' 191 if(
io_l )
write(
io_fid_log,*)
'*** Map projection type : ', trim(mprj_type)
192 select case(trim(mprj_type))
197 if(
io_l )
write(
io_fid_log,*)
'*** => Lambert Conformal projection' 198 call mprj_lambertconformal_setup
200 if(
io_l )
write(
io_fid_log,*)
'*** => Polar Stereographic projection' 201 call mprj_polarstereographic_setup
204 call mprj_mercator_setup
206 if(
io_l )
write(
io_fid_log,*)
'*** => Equidistant Cylindrical projection' 207 call mprj_equidistantcylindrical_setup
209 write(*,*)
'xxx Unsupported MPRJ_type. STOP' 213 if(
io_l )
write(
io_fid_log,
'(1x,A,F15.3)')
'*** Basepoint(x) = ', mprj_basepoint_x
214 if(
io_l )
write(
io_fid_log,
'(1x,A,F15.3)')
'*** Basepoint(y) = ', mprj_basepoint_y
230 real(RP),
intent(in) :: x
231 real(RP),
intent(in) :: y
232 real(RP),
intent(out) :: lon
233 real(RP),
intent(out) :: lat
236 select case(mprj_type)
238 call mprj_none_xy2lonlat( x, y, lon, lat )
240 call mprj_lambertconformal_xy2lonlat( x, y, lon, lat )
242 call mprj_polarstereographic_xy2lonlat( x, y, lon, lat )
244 call mprj_mercator_xy2lonlat( x, y, lon, lat )
246 call mprj_equidistantcylindrical_xy2lonlat( x, y, lon, lat )
248 write(*,*)
'xxx Unsupported MPRJ_type. STOP' 266 real(RP),
intent(in) :: lon
267 real(RP),
intent(in) :: lat
268 real(RP),
intent(out) :: x
269 real(RP),
intent(out) :: y
272 select case(mprj_type)
274 call mprj_none_lonlat2xy( lon, lat, x, y )
276 call mprj_lambertconformal_lonlat2xy( lon, lat, x, y )
278 call mprj_polarstereographic_lonlat2xy( lon, lat, x, y )
280 call mprj_mercator_lonlat2xy( lon, lat, x, y )
282 call mprj_equidistantcylindrical_lonlat2xy( lon, lat, x, y )
284 write(*,*)
'xxx Unsupported MPRJ_type. STOP' 301 real(RP),
intent(in) :: lat(
ia,
ja)
302 real(RP),
intent(out) :: m1 (
ia,
ja)
303 real(RP),
intent(out) :: m2 (
ia,
ja)
306 select case(mprj_type)
308 call mprj_none_mapfactor( lat, m1, m2 )
310 call mprj_lambertconformal_mapfactor( lat, m1, m2 )
312 call mprj_polarstereographic_mapfactor( lat, m1, m2 )
314 call mprj_mercator_mapfactor( lat, m1, m2 )
316 call mprj_equidistantcylindrical_mapfactor( lat, m1, m2 )
318 write(*,*)
'xxx Unsupported MPRJ_type. STOP' 336 real(RP),
intent(out) :: rotc(2)
337 real(RP),
intent(in) :: lon
338 real(RP),
intent(in) :: lat
341 select case(mprj_type)
343 call mprj_none_rotcoef_0d( rotc )
345 call mprj_lambertconformal_rotcoef_0d( rotc, lon, lat )
347 call mprj_polarstereographic_rotcoef_0d( rotc, lon, lat )
349 call mprj_mercator_rotcoef_0d( rotc )
351 call mprj_equidistantcylindrical_rotcoef_0d( rotc )
353 write(*,*)
'xxx Unsupported MPRJ_type. STOP' 371 real(RP),
intent(out) :: rotc(IA,JA,2)
372 real(RP),
intent(in) :: lon (IA,JA)
373 real(RP),
intent(in) :: lat (IA,JA)
376 select case(mprj_type)
378 call mprj_none_rotcoef_2d( rotc )
380 call mprj_lambertconformal_rotcoef_2d( rotc, lon, lat )
382 call mprj_polarstereographic_rotcoef_2d( rotc, lon, lat )
384 call mprj_mercator_rotcoef_2d( rotc )
386 call mprj_equidistantcylindrical_rotcoef_2d( rotc )
388 write(*,*)
'xxx Unsupported MPRJ_type. STOP' 397 subroutine mprj_none_setup
402 if(
io_l )
write(
io_fid_log,*)
'*** MPRJ_rotation = ', mprj_rotation
405 end subroutine mprj_none_setup
409 subroutine mprj_none_xy2lonlat( &
416 real(RP),
intent(in) :: x
417 real(RP),
intent(in) :: y
418 real(RP),
intent(out) :: lon
419 real(RP),
intent(out) :: lat
425 gno(1) = ( (y-mprj_basepoint_y) * sin(mprj_rotation*d2r) &
426 + (x-mprj_basepoint_x) * cos(mprj_rotation*d2r) ) / radius
427 gno(2) = ( (y-mprj_basepoint_y) * cos(mprj_rotation*d2r) &
428 - (x-mprj_basepoint_x) * sin(mprj_rotation*d2r) ) / radius
430 rho = sqrt( gno(1) * gno(1) + gno(2) * gno(2) )
433 if ( rho == 0.0_dp )
then 445 end subroutine mprj_none_xy2lonlat
449 subroutine mprj_none_lonlat2xy( &
458 real(RP),
intent(in) :: lon
459 real(RP),
intent(in) :: lat
460 real(RP),
intent(out) :: x
461 real(RP),
intent(out) :: y
463 real(DP) :: lat_d, lat0_d, dlon
469 lat_d =
real(lat,kind=
dp)
470 lat0_d =
real(MPRJ_basepoint_lat*D2R,kind=
dp)
474 cos_gmm = sin(lat0_d) * sin(lat_d) &
475 + cos(lat0_d) * cos(lat_d) * cos(dlon)
477 gno(1) = ( cos(lat_d) * sin(dlon) ) / cos_gmm
478 gno(2) = ( cos(lat0_d) * sin(lat_d) &
479 - sin(lat0_d) * cos(lat_d) * cos(dlon) ) / cos_gmm
481 x = mprj_basepoint_x + ( gno(1) * cos(mprj_rotation*d2r) &
482 - gno(2) * sin(mprj_rotation*d2r) ) * radius
483 y = mprj_basepoint_y + ( gno(1) * sin(mprj_rotation*d2r) &
484 + gno(2) * cos(mprj_rotation*d2r) ) * radius
487 end subroutine mprj_none_lonlat2xy
491 subroutine mprj_none_mapfactor( &
497 real(RP),
intent(in) :: lat(IA,JA)
498 real(RP),
intent(out) :: m1 (IA,JA)
499 real(RP),
intent(out) :: m2 (IA,JA)
506 end subroutine mprj_none_mapfactor
510 subroutine mprj_none_rotcoef_0d( &
514 real(RP),
intent(out) :: rotc(2)
521 end subroutine mprj_none_rotcoef_0d
525 subroutine mprj_none_rotcoef_2d( &
529 real(RP),
intent(out) :: rotc(IA,JA,2)
536 end subroutine mprj_none_rotcoef_2d
540 subroutine mprj_lambertconformal_setup
545 real(DP) :: lat1rot, lat2rot
546 real(DP) :: dlon, latrot, dist
549 if ( mprj_lc_lat1 >= mprj_lc_lat2 )
then 550 write(*,*)
'xxx Please set MPRJ_LC_lat1 < MPRJ_LC_lat2 in degree. STOP' 555 mprj_hemisphere = sign(1.0_dp,mprj_lc_lat1+mprj_lc_lat2)
557 lat1rot = 0.5_dp*pi - mprj_hemisphere * mprj_lc_lat1 * d2r
558 lat2rot = 0.5_dp*pi - mprj_hemisphere * mprj_lc_lat2 * d2r
561 mprj_lc_c = ( log( sin(lat1rot) ) - log( sin(lat2rot) ) ) &
562 / ( log( tan(0.5_dp*lat1rot) ) - log( tan(0.5_dp*lat2rot) ) )
565 mprj_lc_fact = sin(lat1rot) / mprj_lc_c / tan(0.5_dp*lat1rot)**mprj_lc_c
572 dist = mprj_lc_fact * radius * tan(0.5_dp*latrot)**mprj_lc_c
574 mprj_pole_x = mprj_basepoint_x - dist * sin(mprj_lc_c*dlon)
575 mprj_pole_y = mprj_basepoint_y + mprj_hemisphere * dist * cos(mprj_lc_c*dlon)
578 if(
io_l )
write(
io_fid_log,*)
'*** MPRJ_LC_lat1 = ', mprj_lc_lat1
579 if(
io_l )
write(
io_fid_log,*)
'*** MPRJ_LC_lat2 = ', mprj_lc_lat2
580 if(
io_l )
write(
io_fid_log,*)
'*** MPRJ_hemisphere = ', mprj_hemisphere
582 if(
io_l )
write(
io_fid_log,*)
'*** MPRJ_LC_fact = ', mprj_lc_fact
587 end subroutine mprj_lambertconformal_setup
591 subroutine mprj_lambertconformal_xy2lonlat( &
598 real(RP),
intent(in) :: x
599 real(RP),
intent(in) :: y
600 real(RP),
intent(out) :: lon
601 real(RP),
intent(out) :: lat
603 real(DP) :: xx, yy, dist
606 xx = ( x - mprj_pole_x ) / radius / mprj_lc_fact
607 yy = -mprj_hemisphere * ( y - mprj_pole_y ) / radius / mprj_lc_fact
609 dist = sqrt( xx*xx + yy*yy )
614 lat = mprj_hemisphere * ( 0.5_dp*pi - 2.0_dp*atan( dist**(1.0_dp/mprj_lc_c) ) )
617 end subroutine mprj_lambertconformal_xy2lonlat
621 subroutine mprj_lambertconformal_lonlat2xy( &
628 real(RP),
intent(in) :: lon
629 real(RP),
intent(in) :: lat
630 real(RP),
intent(out) :: x
631 real(RP),
intent(out) :: y
633 real(DP) :: dlon, latrot, dist
637 if ( dlon > pi ) dlon = dlon - pi*2.0_dp
638 if ( dlon < -pi ) dlon = dlon + pi*2.0_dp
640 latrot = 0.5_dp*pi - mprj_hemisphere * lat
642 dist = mprj_lc_fact * radius * tan(0.5_dp*latrot)**mprj_lc_c
644 x = mprj_pole_x + dist * sin(mprj_lc_c*dlon)
645 y = mprj_pole_y - mprj_hemisphere * dist * cos(mprj_lc_c*dlon)
648 end subroutine mprj_lambertconformal_lonlat2xy
652 subroutine mprj_lambertconformal_mapfactor( &
658 real(RP),
intent(in) :: lat(IA,JA)
659 real(RP),
intent(out) :: m1 (IA,JA)
660 real(RP),
intent(out) :: m2 (IA,JA)
668 latrot = 0.5_dp*pi - mprj_hemisphere * lat(i,j)
670 m1(i,j) = mprj_lc_fact / sin(latrot) * mprj_lc_c * tan(0.5_dp*latrot)**mprj_lc_c
676 end subroutine mprj_lambertconformal_mapfactor
679 subroutine mprj_lambertconformal_rotcoef_0d( &
685 real(RP),
intent(out) :: rotc(2)
686 real(RP),
intent(in) :: lon
687 real(RP),
intent(in) :: lat
694 if ( dlon > pi ) dlon = dlon - pi*2.0_dp
695 if ( dlon < -pi ) dlon = dlon + pi*2.0_dp
697 alpha = - mprj_lc_c * dlon * mprj_hemisphere
699 rotc(1) = cos( alpha )
700 rotc(2) = sin( alpha )
703 end subroutine mprj_lambertconformal_rotcoef_0d
706 subroutine mprj_lambertconformal_rotcoef_2d( &
712 real(RP),
intent(out) :: rotc(IA,JA,2)
713 real(RP),
intent(in) :: lon (IA,JA)
714 real(RP),
intent(in) :: lat (IA,JA)
725 if ( dlon > pi ) dlon = dlon - pi*2.0_dp
726 if ( dlon < -pi ) dlon = dlon + pi*2.0_dp
728 alpha = - mprj_lc_c * dlon * mprj_hemisphere
730 rotc(i,j,1) = cos( alpha )
731 rotc(i,j,2) = sin( alpha )
736 end subroutine mprj_lambertconformal_rotcoef_2d
740 subroutine mprj_polarstereographic_setup
744 real(DP) :: dlon, latrot, dist
748 mprj_hemisphere = sign(1.0_dp,mprj_ps_lat)
750 lat0 = mprj_hemisphere * mprj_ps_lat * d2r
753 mprj_ps_fact = 1.0_dp + sin(lat0)
760 dist = mprj_ps_fact * radius * tan(0.5_dp*latrot)
762 mprj_pole_x = mprj_basepoint_x - dist * sin(dlon)
763 mprj_pole_y = mprj_basepoint_y + mprj_hemisphere * dist * cos(dlon)
767 if(
io_l )
write(
io_fid_log,*)
'*** MPRJ_hemisphere = ', mprj_hemisphere
768 if(
io_l )
write(
io_fid_log,*)
'*** MPRJ_PS_fact = ', mprj_ps_fact
773 end subroutine mprj_polarstereographic_setup
777 subroutine mprj_polarstereographic_xy2lonlat( &
784 real(RP),
intent(in) :: x
785 real(RP),
intent(in) :: y
786 real(RP),
intent(out) :: lon
787 real(RP),
intent(out) :: lat
789 real(DP) :: xx, yy, dist
792 xx = ( x - mprj_pole_x ) / radius / mprj_ps_fact
793 yy = -mprj_hemisphere * ( y - mprj_pole_y ) / radius / mprj_ps_fact
795 dist = sqrt( xx*xx + yy*yy )
799 lat = mprj_hemisphere * ( 0.5_dp*pi - 2.0_dp*atan(dist) )
802 end subroutine mprj_polarstereographic_xy2lonlat
806 subroutine mprj_polarstereographic_lonlat2xy( &
813 real(RP),
intent(in) :: lon
814 real(RP),
intent(in) :: lat
815 real(RP),
intent(out) :: x
816 real(RP),
intent(out) :: y
818 real(DP) :: dlon, latrot, dist
823 latrot = 0.5_dp*pi - mprj_hemisphere * lat
825 dist = mprj_ps_fact * radius * tan(0.5_dp*latrot)
827 x = mprj_pole_x + dist * sin(dlon)
828 y = mprj_pole_y - mprj_hemisphere * dist * cos(dlon)
831 end subroutine mprj_polarstereographic_lonlat2xy
835 subroutine mprj_polarstereographic_mapfactor( &
841 real(RP),
intent(in) :: lat(IA,JA)
842 real(RP),
intent(out) :: m1 (IA,JA)
843 real(RP),
intent(out) :: m2 (IA,JA)
850 m1(i,j) = mprj_ps_fact / ( 1.0_dp + sin(mprj_hemisphere*lat(i,j)) )
856 end subroutine mprj_polarstereographic_mapfactor
859 subroutine mprj_polarstereographic_rotcoef_0d( &
865 real(RP),
intent(out) :: rotc(2)
866 real(RP),
intent(in) :: lon
867 real(RP),
intent(in) :: lat
874 if ( dlon > pi ) dlon = dlon - pi*2.0_dp
875 if ( dlon < -pi ) dlon = dlon + pi*2.0_dp
877 alpha = - dlon * mprj_hemisphere
879 rotc(1) = cos( alpha )
880 rotc(2) = sin( alpha )
883 end subroutine mprj_polarstereographic_rotcoef_0d
886 subroutine mprj_polarstereographic_rotcoef_2d( &
892 real(RP),
intent(out) :: rotc(IA,JA,2)
893 real(RP),
intent(in) :: lon (IA,JA)
894 real(RP),
intent(in) :: lat (IA,JA)
905 if ( dlon > pi ) dlon = dlon - pi*2.0_dp
906 if ( dlon < -pi ) dlon = dlon + pi*2.0_dp
908 alpha = - dlon * mprj_hemisphere
910 rotc(i,j,1) = cos( alpha )
911 rotc(i,j,2) = sin( alpha )
916 end subroutine mprj_polarstereographic_rotcoef_2d
920 subroutine mprj_mercator_setup
926 real(DP) :: latrot, dist
929 lat0 = mprj_m_lat * d2r
932 mprj_m_fact = cos(lat0)
934 if ( mprj_m_fact == 0.0_dp )
then 935 write(*,*)
'xxx MPRJ_M_lat cannot be set to pole point! value=', mprj_m_lat
942 dist = 1.0_dp / tan(0.5_dp*latrot)
944 mprj_eq_x = mprj_basepoint_x
945 mprj_eq_y = mprj_basepoint_y - radius * mprj_m_fact * log(dist)
954 end subroutine mprj_mercator_setup
958 subroutine mprj_mercator_xy2lonlat( &
965 real(RP),
intent(in) :: x
966 real(RP),
intent(in) :: y
967 real(RP),
intent(out) :: lon
968 real(RP),
intent(out) :: lat
973 xx = ( x - mprj_eq_x ) / radius / mprj_m_fact
974 yy = ( y - mprj_eq_y ) / radius / mprj_m_fact
978 lat = 0.5_dp*pi - 2.0_dp*atan( 1.0_dp/exp(yy) )
981 end subroutine mprj_mercator_xy2lonlat
985 subroutine mprj_mercator_lonlat2xy( &
992 real(RP),
intent(in) :: lon
993 real(RP),
intent(in) :: lat
994 real(RP),
intent(out) :: x
995 real(RP),
intent(out) :: y
997 real(DP) :: dlon, latrot, dist
1002 latrot = 0.5_dp*pi - lat
1004 dist = 1.0_dp / tan(0.5_dp*latrot)
1006 x = mprj_eq_x + radius * mprj_m_fact * dlon
1007 y = mprj_eq_y + radius * mprj_m_fact * log(dist)
1010 end subroutine mprj_mercator_lonlat2xy
1014 subroutine mprj_mercator_mapfactor( &
1020 real(RP),
intent(in) :: lat(IA,JA)
1021 real(RP),
intent(out) :: m1 (IA,JA)
1022 real(RP),
intent(out) :: m2 (IA,JA)
1028 m1(i,j) = mprj_m_fact / cos(
real(lat(i,j),kind=
dp))
1034 end subroutine mprj_mercator_mapfactor
1037 subroutine mprj_mercator_rotcoef_0d( &
1041 real(RP),
intent(out) :: rotc(2)
1048 end subroutine mprj_mercator_rotcoef_0d
1051 subroutine mprj_mercator_rotcoef_2d( &
1055 real(RP),
intent(out) :: rotc(IA,JA,2)
1058 rotc(:,:,1) = 1.0_rp
1059 rotc(:,:,2) = 0.0_rp
1062 end subroutine mprj_mercator_rotcoef_2d
1066 subroutine mprj_equidistantcylindrical_setup
1074 lat0 = mprj_ec_lat * d2r
1077 mprj_ec_fact = cos(lat0)
1079 if ( mprj_ec_fact == 0.0_dp )
then 1080 write(*,*)
'xxx MPRJ_EC_lat cannot be set to pole point! value=', mprj_ec_lat
1084 mprj_eq_x = mprj_basepoint_x
1089 if(
io_l )
write(
io_fid_log,*)
'*** MPRJ_EC_fact = ', mprj_ec_fact
1094 end subroutine mprj_equidistantcylindrical_setup
1098 subroutine mprj_equidistantcylindrical_xy2lonlat( &
1107 real(RP),
intent(in) :: x
1108 real(RP),
intent(in) :: y
1109 real(RP),
intent(out) :: lon
1110 real(RP),
intent(out) :: lat
1115 xx = ( x - mprj_eq_x ) / radius / mprj_ec_fact
1116 yy = ( y - mprj_eq_y ) / radius
1122 if ( abs(lat) > 0.5_dp*pi )
then 1123 write(*,*)
'xxx Invalid latitude range! value=', lat
1128 end subroutine mprj_equidistantcylindrical_xy2lonlat
1132 subroutine mprj_equidistantcylindrical_lonlat2xy( &
1139 real(RP),
intent(in) :: lon
1140 real(RP),
intent(in) :: lat
1141 real(RP),
intent(out) :: x
1142 real(RP),
intent(out) :: y
1149 x = mprj_eq_x + radius * mprj_ec_fact * dlon
1150 y = mprj_eq_y + radius * lat
1153 end subroutine mprj_equidistantcylindrical_lonlat2xy
1157 subroutine mprj_equidistantcylindrical_mapfactor( &
1163 real(RP),
intent(in) :: lat(IA,JA)
1164 real(RP),
intent(out) :: m1 (IA,JA)
1165 real(RP),
intent(out) :: m2 (IA,JA)
1171 m1(i,j) = mprj_ec_fact / cos(
real(lat(i,j),kind=
dp))
1177 end subroutine mprj_equidistantcylindrical_mapfactor
1180 subroutine mprj_equidistantcylindrical_rotcoef_0d( &
1184 real(RP),
intent(out) :: rotc(2)
1191 end subroutine mprj_equidistantcylindrical_rotcoef_0d
1194 subroutine mprj_equidistantcylindrical_rotcoef_2d( &
1198 real(RP),
intent(out) :: rotc(IA,JA,2)
1201 rotc(:,:,1) = 1.0_rp
1202 rotc(:,:,2) = 0.0_rp
1205 end subroutine mprj_equidistantcylindrical_rotcoef_2d
subroutine, public prc_mpistop
Abort MPI.
real(rp), public mprj_basepoint_lat
logical, public io_l
output log or not? (this process)
subroutine, public mprj_xy2lonlat(x, y, lon, lat)
(x,y) -> (lon,lat)
real(rp), public const_radius
radius of the planet [m]
real(rp), public const_d2r
degree to radian
real(rp), public mprj_basepoint_lon
real(rp), public const_undef
subroutine mprj_rotcoef_2d(rotc, lon, lat)
u(lat,lon) = cos u(x,y) - sin v(x,y) v(lat,lon) = sin u(x,y) + cos v(x,y)
logical, public io_nml
output log or not? (for namelist, this process)
integer, public ia
of whole cells: x, local, with HALO
subroutine, public mprj_lonlat2xy(lon, lat, x, y)
(lon,lat) -> (x,y)
subroutine, public mprj_mapfactor(lat, m1, m2)
(x,y) -> (lon,lat)
real(rp), public const_pi
pi
subroutine mprj_rotcoef_0d(rotc, lon, lat)
u(lat,lon) = cos u(x,y) - sin v(x,y) v(lat,lon) = sin u(x,y) + cos v(x,y)
integer, public io_fid_conf
Config file ID.
integer, public io_fid_log
Log file ID.
subroutine, public mprj_setup(DOMAIN_CENTER_X, DOMAIN_CENTER_Y)
Setup.
integer, parameter, public dp
integer, public io_fid_nml
Log file ID (only for output namelist)
integer, public ja
of whole cells: y, local, with HALO