37 public :: mprj_rotcoef
39 interface mprj_rotcoef
42 end interface mprj_rotcoef
55 private :: mprj_none_setup
56 private :: mprj_lambertconformal_setup
57 private :: mprj_polarstereographic_setup
58 private :: mprj_mercator_setup
59 private :: mprj_equidistantcylindrical_setup
61 private :: mprj_none_xy2lonlat
62 private :: mprj_lambertconformal_xy2lonlat
63 private :: mprj_polarstereographic_xy2lonlat
64 private :: mprj_mercator_xy2lonlat
65 private :: mprj_equidistantcylindrical_xy2lonlat
67 private :: mprj_none_lonlat2xy
68 private :: mprj_lambertconformal_lonlat2xy
69 private :: mprj_polarstereographic_lonlat2xy
70 private :: mprj_mercator_lonlat2xy
71 private :: mprj_equidistantcylindrical_lonlat2xy
73 private :: mprj_none_mapfactor
74 private :: mprj_lambertconformal_mapfactor
75 private :: mprj_polarstereographic_mapfactor
76 private :: mprj_mercator_mapfactor
77 private :: mprj_equidistantcylindrical_mapfactor
79 private :: mprj_none_rotcoef_2d
80 private :: mprj_lambertconformal_rotcoef_2d
81 private :: mprj_polarstereographic_rotcoef_2d
82 private :: mprj_mercator_rotcoef_2d
83 private :: mprj_equidistantcylindrical_rotcoef_2d
85 private :: mprj_none_rotcoef_0d
86 private :: mprj_lambertconformal_rotcoef_0d
87 private :: mprj_polarstereographic_rotcoef_0d
88 private :: mprj_mercator_rotcoef_0d
89 private :: mprj_equidistantcylindrical_rotcoef_0d
95 character(len=H_SHORT),
private :: mprj_type =
'NONE' 102 real(DP),
private :: mprj_hemisphere
104 real(DP),
private :: mprj_basepoint_x
105 real(DP),
private :: mprj_basepoint_y
107 real(DP),
private :: mprj_pole_x
108 real(DP),
private :: mprj_pole_y
109 real(DP),
private :: mprj_eq_x
110 real(DP),
private :: mprj_eq_y
112 real(DP),
private :: mprj_rotation = 0.0_dp
114 real(DP),
private :: mprj_lc_lat1 = 30.0_dp
115 real(DP),
private :: mprj_lc_lat2 = 60.0_dp
116 real(DP),
private :: mprj_lc_c
117 real(DP),
private :: mprj_lc_fact
119 real(DP),
private :: mprj_ps_lat
120 real(DP),
private :: mprj_ps_fact
122 real(DP),
private :: mprj_m_lat
123 real(DP),
private :: mprj_m_fact
125 real(DP),
private :: mprj_ec_lat
126 real(DP),
private :: mprj_ec_fact
128 real(DP),
private :: pi
129 real(DP),
private :: d2r
130 real(DP),
private :: radius
136 subroutine mprj_setup( DOMAIN_CENTER_X, DOMAIN_CENTER_Y )
145 real(RP),
intent(in) :: DOMAIN_CENTER_X
146 real(RP),
intent(in) :: DOMAIN_CENTER_Y
148 namelist / param_mapproj / &
167 pi =
real(pi_rp, kind=
dp)
168 d2r =
real(d2r_rp, kind=
dp)
169 radius =
real(radius_rp, kind=
dp)
171 mprj_basepoint_x = undef
172 mprj_basepoint_y = undef
177 mprj_basepoint_x = domain_center_x
178 mprj_basepoint_y = domain_center_y
185 if(
io_l )
write(
io_fid_log,*)
'*** Not found namelist. Default used.' 186 elseif( ierr > 0 )
then 187 write(*,*)
'xxx Not appropriate names in namelist PARAM_MAPPROJ. Check!' 200 if(
io_l )
write(
io_fid_log,*)
'+++ MPRJ_basepoint_x :', mprj_basepoint_x
201 if(
io_l )
write(
io_fid_log,*)
'+++ MPRJ_basepoint_y :', mprj_basepoint_y
204 if(
io_l )
write(
io_fid_log,*)
'*** Projection type:', trim(mprj_type)
205 select case(trim(mprj_type))
211 call mprj_lambertconformal_setup
213 if(
io_l )
write(
io_fid_log,*)
'=> Polar Stereographic projection' 214 call mprj_polarstereographic_setup
217 call mprj_mercator_setup
219 if(
io_l )
write(
io_fid_log,*)
'=> Equidistant Cylindrical projection' 220 call mprj_equidistantcylindrical_setup
222 write(*,*)
' xxx Unsupported TYPE. STOP' 240 real(RP),
intent(in) :: x
241 real(RP),
intent(in) :: y
242 real(RP),
intent(out) :: lon
243 real(RP),
intent(out) :: lat
246 select case(mprj_type)
248 call mprj_none_xy2lonlat( x, y, lon, lat )
250 call mprj_lambertconformal_xy2lonlat( x, y, lon, lat )
252 call mprj_polarstereographic_xy2lonlat( x, y, lon, lat )
254 call mprj_mercator_xy2lonlat( x, y, lon, lat )
256 call mprj_equidistantcylindrical_xy2lonlat( x, y, lon, lat )
258 write(*,*)
' xxx Unsupported TYPE. STOP' 276 real(RP),
intent(in) :: lon
277 real(RP),
intent(in) :: lat
278 real(RP),
intent(out) :: x
279 real(RP),
intent(out) :: y
282 select case(mprj_type)
284 call mprj_none_lonlat2xy( lon, lat, x, y )
286 call mprj_lambertconformal_lonlat2xy( lon, lat, x, y )
288 call mprj_polarstereographic_lonlat2xy( lon, lat, x, y )
290 call mprj_mercator_lonlat2xy( lon, lat, x, y )
292 call mprj_equidistantcylindrical_lonlat2xy( lon, lat, x, y )
294 write(*,*)
' xxx Unsupported TYPE. STOP' 311 real(RP),
intent(in) :: lat(
ia,
ja)
312 real(RP),
intent(out) :: m1 (
ia,
ja)
313 real(RP),
intent(out) :: m2 (
ia,
ja)
316 select case(mprj_type)
318 call mprj_none_mapfactor( lat, m1, m2 )
320 call mprj_lambertconformal_mapfactor( lat, m1, m2 )
322 call mprj_polarstereographic_mapfactor( lat, m1, m2 )
324 call mprj_mercator_mapfactor( lat, m1, m2 )
326 call mprj_equidistantcylindrical_mapfactor( lat, m1, m2 )
328 write(*,*)
' xxx Unsupported TYPE. STOP' 346 real(RP),
intent(out) :: rotc(2)
347 real(RP),
intent(in) :: lon
348 real(RP),
intent(in) :: lat
351 select case(mprj_type)
353 call mprj_none_rotcoef_0d( rotc )
355 call mprj_lambertconformal_rotcoef_0d( rotc, lon, lat )
357 call mprj_polarstereographic_rotcoef_0d( rotc, lon, lat )
359 call mprj_mercator_rotcoef_0d( rotc )
361 call mprj_equidistantcylindrical_rotcoef_0d( rotc )
363 write(*,*)
' xxx Unsupported TYPE. STOP' 381 real(RP),
intent(out) :: rotc(
ia,
ja,2)
382 real(RP),
intent(in) :: lon (
ia,
ja)
383 real(RP),
intent(in) :: lat (
ia,
ja)
386 select case(mprj_type)
388 call mprj_none_rotcoef_2d( rotc )
390 call mprj_lambertconformal_rotcoef_2d( rotc, lon, lat )
392 call mprj_polarstereographic_rotcoef_2d( rotc, lon, lat )
394 call mprj_mercator_rotcoef_2d( rotc )
396 call mprj_equidistantcylindrical_rotcoef_2d( rotc )
398 write(*,*)
' xxx Unsupported TYPE. STOP' 407 subroutine mprj_none_setup
412 if(
io_l )
write(
io_fid_log,*)
'+++ MPRJ_rotation:', mprj_rotation
415 end subroutine mprj_none_setup
419 subroutine mprj_none_xy2lonlat( &
426 real(RP),
intent(in) :: x
427 real(RP),
intent(in) :: y
428 real(RP),
intent(out) :: lon
429 real(RP),
intent(out) :: lat
435 gno(1) = ( (y-mprj_basepoint_y) * sin(mprj_rotation*d2r) &
436 + (x-mprj_basepoint_x) * cos(mprj_rotation*d2r) ) / radius
437 gno(2) = ( (y-mprj_basepoint_y) * cos(mprj_rotation*d2r) &
438 - (x-mprj_basepoint_x) * sin(mprj_rotation*d2r) ) / radius
440 rho = sqrt( gno(1) * gno(1) + gno(2) * gno(2) )
443 if ( rho == 0.0_dp )
then 455 end subroutine mprj_none_xy2lonlat
459 subroutine mprj_none_lonlat2xy( &
468 real(RP),
intent(in) :: lon
469 real(RP),
intent(in) :: lat
470 real(RP),
intent(out) :: x
471 real(RP),
intent(out) :: y
479 lat_d =
real(lat,kind=
dp)
487 x = mprj_basepoint_x + (gno(1) * cos(mprj_rotation*d2r) &
488 - gno(2) * sin(mprj_rotation*d2r)) * radius
489 y = mprj_basepoint_y + (gno(1) * sin(mprj_rotation*d2r) &
490 + gno(2) * cos(mprj_rotation*d2r)) * radius
493 end subroutine mprj_none_lonlat2xy
497 subroutine mprj_none_mapfactor( &
503 real(RP),
intent(in) :: lat(
ia,
ja)
504 real(RP),
intent(out) :: m1 (
ia,
ja)
505 real(RP),
intent(out) :: m2 (
ia,
ja)
512 end subroutine mprj_none_mapfactor
516 subroutine mprj_none_rotcoef_0d( &
520 real(RP),
intent(out) :: rotc(2)
527 end subroutine mprj_none_rotcoef_0d
531 subroutine mprj_none_rotcoef_2d( &
535 real(RP),
intent(out) :: rotc(
ia,
ja,2)
542 end subroutine mprj_none_rotcoef_2d
546 subroutine mprj_lambertconformal_setup
551 real(DP) :: lat1rot, lat2rot
552 real(DP) :: dlon, latrot, dist
555 if ( mprj_lc_lat1 >= mprj_lc_lat2 )
then 556 write(*,*)
' xxx Please set MPRJ_LC_lat1 < MPRJ_LC_lat2 in degree. STOP' 561 mprj_hemisphere = sign(1.0_dp,mprj_lc_lat1+mprj_lc_lat2)
563 lat1rot = 0.5_dp*pi - mprj_hemisphere * mprj_lc_lat1 * d2r
564 lat2rot = 0.5_dp*pi - mprj_hemisphere * mprj_lc_lat2 * d2r
567 mprj_lc_c = (
log( sin(lat1rot) ) -
log( sin(lat2rot) ) ) &
568 / (
log( tan(0.5_dp*lat1rot) ) -
log( tan(0.5_dp*lat2rot) ) )
571 mprj_lc_fact = sin(lat1rot) / mprj_lc_c / tan(0.5_dp*lat1rot)**mprj_lc_c
578 dist = mprj_lc_fact * radius * tan(0.5_dp*latrot)**mprj_lc_c
580 mprj_pole_x = mprj_basepoint_x - dist * sin(mprj_lc_c*dlon)
581 mprj_pole_y = mprj_basepoint_y + mprj_hemisphere * dist * cos(mprj_lc_c*dlon)
586 if(
io_l )
write(
io_fid_log,*)
'+++ MPRJ_hemisphere:', mprj_hemisphere
593 end subroutine mprj_lambertconformal_setup
597 subroutine mprj_lambertconformal_xy2lonlat( &
604 real(RP),
intent(in) :: x
605 real(RP),
intent(in) :: y
606 real(RP),
intent(out) :: lon
607 real(RP),
intent(out) :: lat
609 real(DP) :: xx, yy, dist
612 xx = ( x - mprj_pole_x ) / radius / mprj_lc_fact
613 yy = -mprj_hemisphere * ( y - mprj_pole_y ) / radius / mprj_lc_fact
615 dist = sqrt( xx*xx + yy*yy )
618 lon = mod( lon+2.0_dp*pi, 2.0_dp*pi )
621 lat = mprj_hemisphere * ( 0.5_dp*pi - 2.0_dp*atan( dist**(1.0_dp/mprj_lc_c) ) )
624 end subroutine mprj_lambertconformal_xy2lonlat
628 subroutine mprj_lambertconformal_lonlat2xy( &
635 real(RP),
intent(in) :: lon
636 real(RP),
intent(in) :: lat
637 real(RP),
intent(out) :: x
638 real(RP),
intent(out) :: y
640 real(DP) :: dlon, latrot, dist
644 if ( dlon > pi ) dlon = dlon - pi*2.0_dp
645 if ( dlon < -pi ) dlon = dlon + pi*2.0_dp
647 latrot = 0.5_dp*pi - lat
649 dist = mprj_lc_fact * radius * tan(0.5_dp*latrot)**mprj_lc_c
651 x = mprj_pole_x + dist * sin(mprj_lc_c*dlon)
652 y = mprj_pole_y - mprj_hemisphere * dist * cos(mprj_lc_c*dlon)
655 end subroutine mprj_lambertconformal_lonlat2xy
659 subroutine mprj_lambertconformal_mapfactor( &
665 real(RP),
intent(in) :: lat(
ia,
ja)
666 real(RP),
intent(out) :: m1 (
ia,
ja)
667 real(RP),
intent(out) :: m2 (
ia,
ja)
675 latrot = 0.5_dp*pi - mprj_hemisphere * lat(i,j)
677 m1(i,j) = mprj_lc_fact / sin(latrot) * mprj_lc_c * tan(0.5_dp*latrot)**mprj_lc_c
683 end subroutine mprj_lambertconformal_mapfactor
686 subroutine mprj_lambertconformal_rotcoef_0d( &
692 real(RP),
intent(out) :: rotc(2)
693 real(RP),
intent(in) :: lon
694 real(RP),
intent(in) :: lat
701 if( dlon > pi ) dlon = dlon - pi*2.0_dp
702 if( dlon < -pi ) dlon = dlon + pi*2.0_dp
703 alpha = - mprj_lc_c * dlon * mprj_hemisphere
704 rotc(1) = cos( alpha )
705 rotc(2) = sin( alpha )
708 end subroutine mprj_lambertconformal_rotcoef_0d
711 subroutine mprj_lambertconformal_rotcoef_2d( &
717 real(RP),
intent(out) :: rotc(
ia,
ja,2)
718 real(RP),
intent(in) :: lon (
ia,
ja)
719 real(RP),
intent(in) :: lat (
ia,
ja)
730 if( dlon > pi ) dlon = dlon - pi*2.0_dp
731 if( dlon < -pi ) dlon = dlon + pi*2.0_dp
732 alpha = - mprj_lc_c * dlon * mprj_hemisphere
733 rotc(i,j,1) = cos( alpha )
734 rotc(i,j,2) = sin( alpha )
739 end subroutine mprj_lambertconformal_rotcoef_2d
743 subroutine mprj_polarstereographic_setup
747 real(DP) :: dlon, latrot, dist
751 mprj_hemisphere = sign(1.0_dp,mprj_ps_lat)
753 lat0 = mprj_hemisphere * mprj_ps_lat * d2r
756 mprj_ps_fact = 1.0_dp + sin(lat0)
763 dist = mprj_ps_fact * radius * tan(0.5_dp*latrot)
765 mprj_pole_x = mprj_basepoint_x - dist * sin(dlon)
766 mprj_pole_y = mprj_basepoint_y + mprj_hemisphere * dist * cos(dlon)
770 if(
io_l )
write(
io_fid_log,*)
'+++ MPRJ_hemisphere:', mprj_hemisphere
776 end subroutine mprj_polarstereographic_setup
780 subroutine mprj_polarstereographic_xy2lonlat( &
787 real(RP),
intent(in) :: x
788 real(RP),
intent(in) :: y
789 real(RP),
intent(out) :: lon
790 real(RP),
intent(out) :: lat
792 real(DP) :: xx, yy, dist
795 xx = ( x - mprj_pole_x ) / radius / mprj_ps_fact
796 yy = -mprj_hemisphere * ( y - mprj_pole_y ) / radius / mprj_ps_fact
798 dist = sqrt( xx*xx + yy*yy )
801 lon = mod( lon+2.0_dp*pi, 2.0_dp*pi )
802 lat = mprj_hemisphere * ( 0.5_dp*pi - 2.0_dp*atan(dist) )
805 end subroutine mprj_polarstereographic_xy2lonlat
809 subroutine mprj_polarstereographic_lonlat2xy( &
816 real(RP),
intent(in) :: lon
817 real(RP),
intent(in) :: lat
818 real(RP),
intent(out) :: x
819 real(RP),
intent(out) :: y
821 real(DP) :: dlon, latrot, dist
826 latrot = 0.5_dp*pi - lat
828 dist = mprj_ps_fact * radius * tan(0.5_dp*latrot)
830 x = mprj_pole_x + dist * sin(dlon)
831 y = mprj_pole_y - mprj_hemisphere * dist * cos(dlon)
834 end subroutine mprj_polarstereographic_lonlat2xy
838 subroutine mprj_polarstereographic_mapfactor( &
844 real(RP),
intent(in) :: lat(
ia,
ja)
845 real(RP),
intent(out) :: m1 (
ia,
ja)
846 real(RP),
intent(out) :: m2 (
ia,
ja)
853 m1(i,j) = mprj_ps_fact / ( 1.0_dp + sin(mprj_hemisphere*lat(i,j)) )
859 end subroutine mprj_polarstereographic_mapfactor
862 subroutine mprj_polarstereographic_rotcoef_0d( &
868 real(RP),
intent(out) :: rotc(2)
869 real(RP),
intent(in) :: lon
870 real(RP),
intent(in) :: lat
877 if( dlon > pi ) dlon = dlon - pi*2.0_dp
878 if( dlon < -pi ) dlon = dlon + pi*2.0_dp
879 alpha = - dlon * mprj_hemisphere
880 rotc(1) = cos( alpha )
881 rotc(2) = sin( alpha )
884 end subroutine mprj_polarstereographic_rotcoef_0d
887 subroutine mprj_polarstereographic_rotcoef_2d( &
893 real(RP),
intent(out) :: rotc(
ia,
ja,2)
894 real(RP),
intent(in) :: lon (
ia,
ja)
895 real(RP),
intent(in) :: lat (
ia,
ja)
906 if( dlon > pi ) dlon = dlon - pi*2.0_dp
907 if( dlon < -pi ) dlon = dlon + pi*2.0_dp
908 alpha = - dlon * mprj_hemisphere
909 rotc(i,j,1) = cos( alpha )
910 rotc(i,j,2) = sin( alpha )
915 end subroutine mprj_polarstereographic_rotcoef_2d
919 subroutine mprj_mercator_setup
923 real(DP) :: latrot, dist
926 lat0 = mprj_m_lat * d2r
929 mprj_m_fact = cos(lat0)
934 dist = 1.0_dp / tan(0.5_dp*latrot)
936 mprj_eq_x = mprj_basepoint_x
937 mprj_eq_y = mprj_basepoint_y - radius * mprj_m_fact *
log(dist)
946 end subroutine mprj_mercator_setup
950 subroutine mprj_mercator_xy2lonlat( &
957 real(RP),
intent(in) :: x
958 real(RP),
intent(in) :: y
959 real(RP),
intent(out) :: lon
960 real(RP),
intent(out) :: lat
965 xx = ( x - mprj_eq_x ) / radius / mprj_m_fact
966 yy = ( y - mprj_eq_y ) / radius / mprj_m_fact
969 lon = mod( lon+2.0_dp*pi, 2.0_dp*pi )
970 lat = 0.5_dp*pi - 2.0_dp*atan( 1.0_dp/exp(yy) )
973 end subroutine mprj_mercator_xy2lonlat
977 subroutine mprj_mercator_lonlat2xy( &
984 real(RP),
intent(in) :: lon
985 real(RP),
intent(in) :: lat
986 real(RP),
intent(out) :: x
987 real(RP),
intent(out) :: y
989 real(DP) :: dlon, latrot, dist
994 latrot = 0.5_dp*pi - lat
996 dist = 1.0_dp / tan(0.5_dp*latrot)
998 x = mprj_eq_x + radius * mprj_m_fact * dlon
999 y = mprj_eq_y + radius * mprj_m_fact *
log(dist)
1002 end subroutine mprj_mercator_lonlat2xy
1006 subroutine mprj_mercator_mapfactor( &
1012 real(RP),
intent(in) :: lat(
ia,
ja)
1013 real(RP),
intent(out) :: m1 (
ia,
ja)
1014 real(RP),
intent(out) :: m2 (
ia,
ja)
1020 m1(i,j) = mprj_m_fact / cos(
real(lat(i,j),kind=
dp))
1026 end subroutine mprj_mercator_mapfactor
1029 subroutine mprj_mercator_rotcoef_0d( &
1033 real(RP),
intent(out) :: rotc(2)
1040 end subroutine mprj_mercator_rotcoef_0d
1043 subroutine mprj_mercator_rotcoef_2d( &
1047 real(RP),
intent(out) :: rotc(
ia,
ja,2)
1050 rotc(:,:,1) = 1.0_rp
1051 rotc(:,:,2) = 0.0_rp
1054 end subroutine mprj_mercator_rotcoef_2d
1058 subroutine mprj_equidistantcylindrical_setup
1064 lat0 = mprj_ec_lat * d2r
1067 mprj_ec_fact = cos(lat0)
1069 mprj_eq_x = mprj_basepoint_x
1079 end subroutine mprj_equidistantcylindrical_setup
1083 subroutine mprj_equidistantcylindrical_xy2lonlat( &
1090 real(RP),
intent(in) :: x
1091 real(RP),
intent(in) :: y
1092 real(RP),
intent(out) :: lon
1093 real(RP),
intent(out) :: lat
1098 xx = ( x - mprj_eq_x ) / radius / mprj_ec_fact
1099 yy = ( y - mprj_eq_y ) / radius
1102 lon = mod( lon+2.0_dp*pi, 2.0_dp*pi )
1106 end subroutine mprj_equidistantcylindrical_xy2lonlat
1110 subroutine mprj_equidistantcylindrical_lonlat2xy( &
1117 real(RP),
intent(in) :: lon
1118 real(RP),
intent(in) :: lat
1119 real(RP),
intent(out) :: x
1120 real(RP),
intent(out) :: y
1127 x = mprj_eq_x + radius * mprj_ec_fact * dlon
1128 y = mprj_eq_y + radius * lat
1131 end subroutine mprj_equidistantcylindrical_lonlat2xy
1135 subroutine mprj_equidistantcylindrical_mapfactor( &
1141 real(RP),
intent(in) :: lat(
ia,
ja)
1142 real(RP),
intent(out) :: m1 (
ia,
ja)
1143 real(RP),
intent(out) :: m2 (
ia,
ja)
1149 m1(i,j) = mprj_ec_fact / cos(
real(lat(i,j),kind=
dp))
1155 end subroutine mprj_equidistantcylindrical_mapfactor
1158 subroutine mprj_equidistantcylindrical_rotcoef_0d( &
1162 real(RP),
intent(out) :: rotc(2)
1169 end subroutine mprj_equidistantcylindrical_rotcoef_0d
1172 subroutine mprj_equidistantcylindrical_rotcoef_2d( &
1176 real(RP),
intent(out) :: rotc(
ia,
ja,2)
1179 rotc(:,:,1) = 1.0_rp
1180 rotc(:,:,2) = 0.0_rp
1183 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)
integer, public ia
of x whole cells (local, with HALO)
integer, parameter, public dp
subroutine, public mprj_lonlat2xy(lon, lat, x, y)
(lon,lat) -> (x,y)
subroutine, public log(type, message)
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, public ja
of y whole cells (local, with HALO)