194                                   lat_grid, dlong_grid, dlat_grid, output_data)
   197     real (r8), 
intent(in) :: 
long, lat, long_grid, lat_grid, dlong_grid
   198     real (r8), 
intent(in) :: dlat_grid
   199     real (r8), 
intent(in), 
dimension(4) :: input_data
   200     real (r8), 
intent(out), 
dimension(4) :: output_data
   206     real (r8), 
intent(in), 
dimension(4) :: data_in
   207     real (r8), 
intent(out), 
dimension(4) :: data_out
   213     real (r8), 
intent(in) :: sa, ct, p 
   220     real (r8), 
intent(in) :: t, p
   227     real (r8), 
intent(in) :: sa, ct, p
   234     real (r8), 
intent(in) :: sa, ct, p
   241     real (r8), 
intent(in) :: sa, t, p 
   248     real (r8), 
intent(in) :: t, p
   255     real (r8), 
intent(in) :: sa, ct, p
   262     real (r8), 
intent(in) :: sa, t, p  
   269     real (r8), 
intent(in) :: sp, t, p       
   276     real (r8), 
intent(in) :: sa, ct, p
   283     real (r8), 
intent(in) :: t, p
   290     real (r8), 
intent(in) :: sa, t, p
   297     real (r8), 
intent(in) :: t, p
   304     real (r8), 
intent(in) :: sa, pt
   305     real (r8), 
intent(out), 
optional :: ct_sa, ct_pt
   309                                            ct_sa_wrt_t, ct_t_wrt_t, ct_p_wrt_t)
   312     real (r8), 
intent(in) :: sa, t, p
   313     real (r8), 
intent(out), 
optional :: ct_p_wrt_t, ct_sa_wrt_t, ct_t_wrt_t
   319     real (r8), 
intent(in) :: sa, p, saturation_fraction
   320     logical, 
intent(in), 
optional :: poly
   327     real (r8), 
intent(in) :: sa, p, saturation_fraction
   332                               saturation_fraction, ctfreezing_sa, ctfreezing_p)
   335     real (r8), 
intent(in) :: sa, p, saturation_fraction
   336     real (r8), 
intent(out), 
optional :: ctfreezing_sa, ctfreezing_p
   340                               saturation_fraction, ctfreezing_sa, ctfreezing_p)
   343     real (r8), 
intent(in) :: sa, p, saturation_fraction
   344     real (r8), 
intent(out), 
optional :: ctfreezing_sa, ctfreezing_p
   350     real (r8), 
intent(in) :: sa, p, saturation_fraction
   357     real (r8), 
intent(in) :: sa, h, p
   364     real (r8), 
intent(in) :: sa, h, p
   371     real (r8), 
intent(in) :: sa, entropy
   378     real (r8), 
intent(in) :: sa, pt 
   385     real (r8), 
intent(in) :: rho, sa, p
   386     real (r8), 
intent(out) :: ct
   387     real (r8), 
intent(out), 
optional :: ct_multiple
   393     real (r8), 
intent(in) :: sa, t, p 
   400     real (r8), 
intent(in) :: sa, p
   408     real (r8), 
intent(in) :: sa, pt
   409     real (r8), 
intent(out), 
optional :: ct_sa_sa, ct_sa_pt, ct_pt_pt
   415     real (r8), 
intent(in) :: p, 
long, lat
   422     real (r8), 
intent(in) :: sp, p, 
long, lat 
   429     real (r8), 
intent(in) :: sa, t, p
   436     real (r8), 
intent(in) :: sa, ct, p
   443     real (r8), 
intent(in) :: sa, ct, p
   450     real (r8), 
intent(in) :: sa, ct, p
   457     real (r8), 
intent(in) :: sa, ct, p_shallow, p_deep
   464     real (r8), 
intent(in) :: sa, ct, p
   465     real (r8), 
intent(out), 
optional :: h_sa, h_ct
   472     real (r8), 
intent(in) :: sa, ct, p
   473     real (r8), 
intent(out), 
optional :: h_sa, h_ct
   479     real (r8), 
intent(in) :: t, p
   487     real (r8), 
intent(in) :: sa, ct, p
   488     real (r8), 
intent(out), 
optional :: h_sa_sa, h_sa_ct, h_ct_ct
   492                                                      h_sa_sa, h_sa_ct, h_ct_ct)
   495     real (r8), 
intent(in) :: sa, ct, p
   496     real (r8), 
intent(out), 
optional :: h_sa_sa, h_sa_ct, h_ct_ct
   502     real (r8), 
intent(in) :: p
   509     real (r8), 
intent(in) :: sa, t, p 
   516     real (r8), 
intent(in) :: sa, ct
   517     real (r8), 
intent(out), 
optional :: eta_sa, eta_ct
   523     real (r8), 
intent(in) :: sa, pt
   530     real (r8), 
intent(in) :: sa, t, p 
   537     real (r8), 
intent(in) :: t, p
   544     real (r8), 
intent(in) :: sa, t, p
   551     real (r8), 
intent(in) :: sa, pt0
   556                                                          eta_sa_ct, eta_ct_ct)
   559     real (r8), 
intent(in) :: sa, ct
   560     real (r8), 
intent(out), 
optional :: eta_sa_sa, eta_sa_ct, eta_ct_ct
   566     real (r8), 
intent(in) :: p, 
long, lat
   571                                                 sa_final, ct_final, w_ih_final)
   574     real (r8), 
intent(in) :: sa_bulk, h_bulk, p
   575     real (r8), 
intent(out) :: sa_final, ct_final, w_ih_final
   579                                              p, sa_final, ct_final, w_ih_final)
   582     real (r8), 
intent(in) :: sa_bulk, h_pot_bulk, p
   583     real (r8), 
intent(out) :: sa_final, ct_final, w_ih_final
   587                                  h_pot_bulk, p, sa_final, ct_final, w_ih_final)
   590     real (r8), 
intent(in) :: sa_bulk, h_pot_bulk, p
   591     real (r8), 
intent(out) :: sa_final, ct_final, w_ih_final
   595                                   dsa_dct_frazil, dsa_dp_frazil, dct_dp_frazil)
   598     real (r8), 
intent(in) :: sa, p, w_ih
   599     real (r8), 
intent(out) :: dsa_dct_frazil, dsa_dp_frazil, dct_dp_frazil
   603                                   dsa_dct_frazil, dsa_dp_frazil, dct_dp_frazil)
   606     real (r8), 
intent(in) :: sa, p, w_ih
   607     real (r8), 
intent(out) :: dsa_dct_frazil, dsa_dp_frazil, dct_dp_frazil
   613     real (r8), 
intent(in) :: sa(:), ct(:), p(:), p_ref
   618                                                 geo_strf_dyn_height_pc, p_mid)
   621     real (r8), 
intent(in) :: sa(:), ct(:), delta_p(:)
   622     real (r8), 
intent(out) :: geo_strf_dyn_height_pc(:), p_mid(:)
   628     integer, 
intent(in) :: ns, nt, np
   629     real (r8), 
intent(in) :: sa, t, p
   636     integer, 
intent(in) :: nt, np
   637     real (r8), 
intent(in) :: t, p
   644     real (r8), 
intent(in) :: t, p
   651     real (r8), 
intent(in) :: pt0
   658     real (r8), 
intent(in) :: pt0
   665     real (r8), 
intent(in) :: sa, pt0
   672     real (r8), 
intent(in) :: lat, p  
   679     real (r8), 
intent(in) :: t, p
   686     real (r8), 
intent(in) :: t
   691                                               t_ih, sa_freeze, ct_freeze, w_ih)
   694     real (r8), 
intent(in) :: sa, ct, p, t_ih
   695     real (r8), 
intent(out) :: sa_freeze, ct_freeze, w_ih
   701     real (r8), 
intent(in) :: sa, ct, p  
   708     real (r8), 
intent(in) :: t, p
   713                                                 ipv_vs_fnsquared_ratio, p_mid)
   716     real (r8), 
intent(in) :: sa(:), ct(:), p(:), p_ref
   717     real (r8), 
intent(out) :: ipv_vs_fnsquared_ratio(:), p_mid(:)
   723     real (r8), 
intent(in) :: sa, ct, p
   730     real (r8), 
intent(in) :: t, p
   737     real (r8), 
intent(in) :: t, p
   744     real (r8), 
intent(in) :: sa, t, p  
   751     real (r8), 
intent(in) :: sa, ct 
   758     real (r8), 
intent(in) :: sa, t  
   765     real (r8), 
intent(in) :: sa, p  
   772     real (r8), 
intent(in) :: sa(:), ct(:), p(:), p_i(:)
   773     real (r8), 
intent(out) :: sa_i(:), ct_i(:)
   779     real (r8), 
intent(in) :: sa, p
   786     real (r8), 
intent(in) :: sa, p
   791                                                 sa_final, ct_final, w_ih_final)
   794     real (r8), 
intent(in) :: sa, ct, p, w_ih, t_ih
   795     real (r8), 
intent(out) :: sa_final, ct_final, w_ih_final
   801     real (r8), 
intent(in) :: sa, ct, p, t_ih
   808     real (r8), 
intent(in) :: sa, ct, p, t_ih
   815     real (r8), 
intent(in) :: sa, p
   822     real (r8), 
intent(in) :: sa, p
   827                              w_seaice, sa_seaice, t_seaice, sa_final, ct_final)
   830     real (r8), 
intent(in) :: sa, ct, p, w_seaice, sa_seaice, t_seaice
   831     real (r8), 
intent(out) :: sa_final, ct_final
   838     real (r8), 
intent(in) :: sa, ct, p, sa_seaice, t_seaice
   846     real (r8), 
intent(in) :: sa, ct, p, sa_seaice, t_seaice
   853     real (r8), 
intent(in) :: sa(:), ct(:), p(:)
   860     real (r8), 
intent(in) :: sa(:), ct(:), p(:), lat(:)
   861     real (r8), 
intent(out) :: n2(:), p_mid(:)
   867     real (r8), 
intent(in) :: p, 
long, lat
   872                                    n2_specvol, n2_alpha, n2_beta, dsa, dct, dp)
   875     real (r8), 
intent(in) :: sa(:), ct(:), p(:), lat(:)
   876     real (r8), 
intent(out) :: n2(:), n2_p(:), n2_specvol(:), n2_alpha(:)
   877     real (r8), 
intent(out) :: n2_beta(:), dsa(:), dct(:), dp(:)
   881                     n2_specvol, n2_alpha, n2_beta, dsa, dct, dp, n2_beta_ratio)
   884     real (r8), 
intent(in) :: sa(:), t(:), p(:), lat
   885     real (r8), 
intent(out) :: n2(:), n2_p(:), n2_specvol(:), n2_alpha(:)
   886     real (r8), 
intent(out) :: n2_beta(:), dsa(:), dct(:), dp(:)
   887     real (r8), 
intent(out) :: n2_beta_ratio(:)
   891                                                        sea_surface_geopotental)
   894     real (r8), 
intent(in) :: z, lat
   895     real (r8), 
intent(in), 
optional :: geo_strf_dyn_height
   896     real (r8), 
intent(in), 
optional :: sea_surface_geopotental
   903     real (r8), 
intent(in) :: pt0_ice
   910     real (r8), 
intent(in) :: pt0_ice
   917     real (r8), 
intent(in) :: sa, p
   922                   p, pot_enthalpy_ice_freezing_sa, pot_enthalpy_ice_freezing_p)
   925     real (r8), 
intent(in) :: sa, p
   926     real (r8), 
intent(out), 
optional :: pot_enthalpy_ice_freezing_sa
   927     real (r8), 
intent(out), 
optional :: pot_enthalpy_ice_freezing_p
   931              sa, p, pot_enthalpy_ice_freezing_sa, pot_enthalpy_ice_freezing_p)
   934     real (r8), 
intent(in) :: sa, p
   935     real (r8), 
intent(out), 
optional :: pot_enthalpy_ice_freezing_sa
   936     real (r8), 
intent(out), 
optional :: pot_enthalpy_ice_freezing_p
   942     real (r8), 
intent(in) :: sa, p
   949     real (r8), 
intent(in) :: sa, t, p, p_ref  
   956     real (r8), 
intent(in) :: t, p
   963     real (r8), 
intent(in) :: sa, ct, saturation_fraction
   970     real (r8), 
intent(in) :: pot_enthalpy_ice
   977     real (r8), 
intent(in) :: sa, t, p 
   984     real (r8), 
intent(in) :: t, p
   991     real (r8), 
intent(in) :: sa, ct
   992     real (r8), 
intent(out), 
optional :: pt_sa, pt_ct
   998     real (r8), 
intent(in) :: sa, ct 
  1005     real (r8), 
intent(in) :: sa, entropy
  1012     real (r8), 
intent(in) :: pot_enthalpy_ice
  1019     real (r8), 
intent(in) :: pot_enthalpy_ice
  1026     real (r8), 
intent(in) :: pot_enthalpy_ice
  1033     real (r8), 
intent(in) :: sa, t, p, p_ref 
  1040     real (r8), 
intent(in) :: t, p, p_ref
  1048     real (r8), 
intent(in) :: sa, ct
  1049     real (r8), 
intent(out), 
optional :: pt_sa_sa, pt_sa_ct, pt_ct_ct
  1055     real (r8), 
intent(in) :: sa, ct, p
  1062     real (r8), 
intent(in) :: sa, ct, p
  1063     real (r8), 
intent(out), 
optional :: rho, alpha, beta
  1070     real (r8), 
intent(in) :: sa, ct, p
  1071     logical, 
intent(in), 
optional :: stiffened
  1072     real (r8), 
intent(out) :: rho
  1073     real (r8), 
intent(out), 
optional :: alpha, beta
  1080     real (r8), 
intent(in) :: sa, ct, p
  1081     real (r8), 
intent(out), 
optional :: drho_dsa, drho_dct, drho_dp
  1088     real (r8), 
intent(in) :: sa, ct, p
  1089     real (r8), 
intent(out), 
optional :: rho_sa, rho_h
  1095     real (r8), 
intent(in) :: t, p
  1100                                       rho_sa_ct, rho_ct_ct, rho_sa_p, rho_ct_p)
  1103     real (r8), 
intent(in) :: sa, ct, p
  1104     real (r8), 
intent(out), 
optional :: rho_sa_sa, rho_sa_ct, rho_ct_ct
  1105     real (r8), 
intent(out), 
optional :: rho_sa_p, rho_ct_p
  1109                                                   rho_sa_sa, rho_sa_h, rho_h_h)
  1112     real (r8), 
intent(in) :: sa, ct, p
  1113     real (r8), 
intent(out), 
optional :: rho_sa_sa, rho_sa_h, rho_h_h
  1119     real (r8), 
intent(in) :: sa, t, p 
  1126     real (r8), 
intent(in) :: sa(:), ct(:), p(:), p_i(:)
  1127     real (r8), 
intent(out) :: sa_i(:), ct_i(:)
  1133     real (r8), 
intent(in) :: p, saturation_fraction
  1134     real (r8), 
intent(in), 
optional :: ct, t
  1141     real (r8), 
intent(in) :: ct, p, saturation_fraction
  1148     real (r8), 
intent(in) :: ct, p, saturation_fraction
  1155     real (r8), 
intent(in) :: t, p, saturation_fraction
  1162     real (r8), 
intent(in) :: t, p, saturation_fraction
  1169     real (r8), 
intent(in) :: rho, ct, p
  1176     real (r8), 
intent(in) :: sp, p, 
long, lat       
  1183     real (r8), 
intent(in) :: sp, 
long, lat
  1190     real (r8), 
intent(in) :: sstar, p, 
long, lat  
  1197     real (r8), 
intent(in) :: sa, p
  1204     real (r8), 
intent(in) :: p, 
long, lat
  1209                            sa_seaice, t_seaice, sa_freeze, ct_freeze, w_seaice)
  1212     real (r8), 
intent(in) :: sa, ct, p, sa_seaice, t_seaice
  1213     real (r8), 
intent(out) :: sa_freeze, ct_freeze, w_seaice
  1219     real (r8), 
intent(in) :: sa, ct
  1226     real (r8), 
intent(in) :: sa, ct 
  1233     real (r8), 
intent(in) :: sa, ct 
  1240     real (r8), 
intent(in) :: sa, ct 
  1247     real (r8), 
intent(in) :: sa, ct 
  1254     real (r8), 
intent(in) :: sa, ct, p
  1261     real (r8), 
intent(in) :: t, p
  1268     real (r8), 
intent(in) :: sa, t, p  
  1275     real (r8), 
intent(in) :: c, t, p       
  1282     real (r8), 
intent(in) :: sa, p, 
long, lat 
  1289     real (r8), 
intent(in) :: sa, 
long, lat
  1296     real (r8), 
intent(in) :: sk       
  1303     real (r8), 
intent(in) :: sr  
  1310     real (r8), 
intent(in) :: sstar, p, 
long, lat  
  1317     real (r8), 
intent(in) :: sa, ct, p
  1325     real (r8), 
intent(in) :: sa, ct, p
  1326     real (r8), 
intent(out), 
optional :: specvol, alpha, beta
  1332     real (r8), 
intent(in) :: sa, ct, p  
  1340     real (r8), 
intent(in) :: sa, ct, p
  1341     integer, 
intent(in), 
optional :: iflag
  1342     real (r8), 
intent(out), 
optional :: v_sa, v_ct, v_p
  1346                                                            p, v_sa, v_h, iflag)
  1349     real (r8), 
intent(in) :: sa, ct, p
  1350     integer, 
intent(in), 
optional :: iflag
  1351     real (r8), 
intent(out), 
optional :: v_sa, v_h
  1357     real (r8), 
intent(in) :: t, p
  1362                                        v_sa_ct, v_ct_ct, v_sa_p, v_ct_p, iflag)
  1365     real (r8), 
intent(in) :: sa, ct, p
  1366     integer, 
intent(in), 
optional :: iflag
  1367     real (r8), 
intent(out), 
optional :: v_sa_sa, v_sa_ct, v_ct_ct, v_sa_p, v_ct_p
  1371                                               p, v_sa_sa, v_sa_h, v_h_h, iflag)
  1374     real (r8), 
intent(in) :: sa, ct, p
  1375     integer, 
intent(in), 
optional :: iflag
  1376     real (r8), 
intent(out), 
optional :: v_sa_sa, v_sa_h, v_h_h
  1382     real (r8), 
intent(in) :: p
  1389     real (r8), 
intent(in) :: sa, t, p  
  1396     real (r8), 
intent(in) :: sa, ct
  1403     real (r8), 
intent(in) :: sa, ct
  1410     real (r8), 
intent(in) :: sa, ct
  1417     real (r8), 
intent(in) :: sp 
  1424     real (r8), 
intent(in) :: sa, p, 
long, lat 
  1431     real (r8), 
intent(in) :: sp, p, 
long, lat 
  1438     real (r8), 
intent(in) :: sa, t, p
  1445     real (r8), 
intent(in) :: sa, p, saturation_fraction
  1446     logical, 
intent(in), 
optional :: poly
  1453     real (r8), 
intent(in) :: sa, p, saturation_fraction
  1458                                 saturation_fraction, tfreezing_sa, tfreezing_p)
  1461     real (r8), 
intent(in) :: sa, p, saturation_fraction
  1462     real (r8), 
intent(out), 
optional :: tfreezing_sa, tfreezing_p
  1466                                 saturation_fraction, tfreezing_sa, tfreezing_p)
  1469     real (r8), 
intent(in) :: sa, p, saturation_fraction
  1470     real (r8), 
intent(out), 
optional :: tfreezing_sa, tfreezing_p
  1476     real (r8), 
intent(in) :: sa, p
  1477     real (r8), 
intent(in), 
optional :: saturation_fraction
  1478     logical, 
intent(in), 
optional :: polynomial
  1485     real (r8), 
intent(in) :: sa, ct, p  
  1492     real (r8), 
intent(in) :: pt0_ice, p
  1499     real (r8), 
intent(in) :: sa, ct, p
  1506     real (r8), 
intent(in) :: sa(:), ct(:), p(:)
  1507     real (r8), 
intent(out) :: tu(:), rsubrho(:), p_mid(:)
  1513     real (r8), 
intent(in) :: x(:), z
  1514     integer, 
intent(in), 
optional :: kstart
  1521     integer, 
intent(in) :: iy(:)
  1522     real (r8), 
intent(in) :: x(:), x_i(:)
  1523     real (r8) :: y_i(
size(x_i))
  1529     real (r8), 
intent(in) :: x0
  1530     real (r8), 
intent(in) :: x(:), y(:)
  1535                                                        sea_surface_geopotental)
  1538     real (r8), 
intent(in) :: p, lat
  1539     real (r8), 
intent(in), 
optional :: geo_strf_dyn_height
  1540     real (r8), 
intent(in), 
optional :: sea_surface_geopotental
 
integer, parameter, public long
 
************************************************************************GNU Lesser General Public License **This file is part of the GFDL Flexible Modeling System(FMS). ! *! *FMS is free software without even the implied warranty of MERCHANTABILITY or *FITNESS FOR A PARTICULAR PURPOSE See the GNU General Public License *for more details **You should have received a copy of the GNU Lesser General Public *License along with FMS If see< http:! ***********************************************************************subroutine READ_RECORD_CORE_(unit, field, nwords, data, start, axsiz) integer, intent(in) ::unit type(fieldtype), intent(in) ::field integer, intent(in) ::nwords MPP_TYPE_, intent(inout) ::data(nwords) integer, intent(in) ::start(:), axsiz(:) integer(SHORT_KIND) ::i2vals(nwords)!rab used in conjunction with transfer intrinsic to determine size of a variable integer(KIND=1) ::one_byte(8) integer ::word_sz!#ifdef __sgi integer(INT_KIND) ::ivals(nwords) real(FLOAT_KIND) ::rvals(nwords)!#else! integer ::ivals(nwords)! real ::rvals(nwords)!#endif real(DOUBLE_KIND) ::r8vals(nwords) pointer(ptr1, i2vals) pointer(ptr2, ivals) pointer(ptr3, rvals) pointer(ptr4, r8vals) if(mpp_io_stack_size< nwords) call mpp_io_set_stack_size(nwords) call mpp_error(FATAL, 'MPP_READ currently requires use_netCDF option') end subroutine READ_RECORD_CORE_ subroutine READ_RECORD_(unit, field, nwords, data, time_level, domain, position, tile_count, start_in, axsiz_in)!routine that is finally called by all mpp_read routines to perform the read!a non-netCDF record contains:! field ID! a set of 4 coordinates(is:ie, js:je) giving the data subdomain! a timelevel and a timestamp(=NULLTIME if field is static)! 3D real data(stored as 1D)!if you are using direct access I/O, the RECL argument to OPEN must be large enough for the above!in a global direct access file, record position on PE is given by %record.!Treatment of timestamp:! We assume that static fields have been passed without a timestamp.! Here that is converted into a timestamp of NULLTIME.! For non-netCDF fields, field is treated no differently, but is written! with a timestamp of NULLTIME. There is no check in the code to prevent! the user from repeatedly writing a static field. integer, intent(in) ::unit, nwords type(fieldtype), intent(in) ::field MPP_TYPE_, intent(inout) ::data(nwords) integer, intent(in), optional ::time_level type(domain2D), intent(in), optional ::domain integer, intent(in), optional ::position, tile_count integer, intent(in), optional ::start_in(:), axsiz_in(:) integer, dimension(size(field%axes(:))) ::start, axsiz integer ::tlevel !, subdomain(4) integer ::i, error, is, ie, js, je, isg, ieg, jsg, jeg type(domain2d), pointer ::io_domain=> tlevel if(PRESENT(start_in) .AND. PRESENT(axsiz_in)) then if(size(start(! the data domain and compute domain must refer to the subdomain being passed ! In this ! since that attempts to gather all data on PE size(field%axes(:)) axsiz(i)