New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 1359 for trunk/NEMO/OPA_SRC/IOM/iom.F90 – NEMO

Ignore:
Timestamp:
2009-03-31T14:36:28+02:00 (15 years ago)
Author:
smasson
Message:

first implementation of iom_put, see ticket:387

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/IOM/iom.F90

    r1341 r1359  
    2626   USE iom_rstdimg     ! restarts access direct format "dimg" style... 
    2727 
     28#if defined key_ioserver 
     29   USE mod_event_client 
     30# endif 
     31 
    2832   IMPLICIT NONE 
    2933   PUBLIC   !   must be public to be able to access iom_def through iom 
    3034    
    31    PUBLIC iom_open, iom_close, iom_varid, iom_get, iom_gettime, iom_rstput 
     35   PUBLIC iom_init, iom_open, iom_close, iom_setkt, iom_varid, iom_get, iom_gettime, iom_rstput, iom_put 
    3236 
    3337   PRIVATE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d 
    3438   PRIVATE iom_g0d, iom_g1d, iom_g2d, iom_g3d, iom_get_123d 
     39   PRIVATE iom_p2d, iom_p3d 
     40#if defined key_ioserver 
     41   PRIVATE iom_init_chkcpp 
     42   PRIVATE set_grid 
     43# endif 
    3544 
    3645   INTERFACE iom_get 
     
    4049      MODULE PROCEDURE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d 
    4150   END INTERFACE 
     51  INTERFACE iom_put 
     52     MODULE PROCEDURE iom_p2d, iom_p3d 
     53  END INTERFACE 
     54#if defined key_ioserver 
     55   INTERFACE iom_setkt 
     56      MODULE PROCEDURE event__set_timestep 
     57   END INTERFACE 
     58# endif 
    4259 
    4360   !!---------------------------------------------------------------------- 
     
    4865 
    4966CONTAINS 
     67 
     68   SUBROUTINE iom_init( pjulian ) 
     69      !!---------------------------------------------------------------------- 
     70      !!                     ***  ROUTINE   *** 
     71      !! 
     72      !! ** Purpose :    
     73      !! 
     74      !!---------------------------------------------------------------------- 
     75      REAL(wp), INTENT(in) ::  pjulian   !: julian day at nit000 = 0 
     76#if defined key_ioserver 
     77      !!---------------------------------------------------------------------- 
     78      ! read the xml file 
     79      CALL event__parse_xml_file( 'iodef.xml' )   ! <- to get from the nameliste (namrun)... 
     80 
     81      ! calendar parameters 
     82      CALL event__set_time_parameters( nit000 - 1, pjulian, rdt ) 
     83 
     84      ! horizontal grid definition 
     85      CALL set_grid( "grid_T", glamt, gphit ) 
     86      CALL set_grid( "grid_U", glamu, gphiu ) 
     87      CALL set_grid( "grid_V", glamv, gphiv ) 
     88      CALL set_grid( "grid_W", glamt, gphit ) 
     89 
     90      ! vertical grid definition 
     91      CALL event__set_vert_axis( "deptht", gdept_0 ) 
     92      CALL event__set_vert_axis( "depthu", gdept_0 ) 
     93      CALL event__set_vert_axis( "depthv", gdept_0 ) 
     94      CALL event__set_vert_axis( "depthw", gdepw_0 ) 
     95 
     96      ! consistency regarding CPP keys... 
     97      CALL iom_init_chkcpp 
     98 
     99      ! end file definition 
     100      CALL event__close_io_definition 
     101#endif 
     102 
     103   END SUBROUTINE iom_init 
     104 
    50105 
    51106   SUBROUTINE iom_open( cdname, kiomid, ldwrt, kdom, kiolib, ldstop, ldiof ) 
     
    92147      ! if iom_open is called for the first time: initialize iom_file(:)%nfid to 0 
    93148      ! (could be done when defining iom_file in f95 but not in f90) 
    94       IF( iom_init == 0 ) THEN 
     149      IF( iom_open_init == 0 ) THEN 
    95150         iom_file(:)%nfid = 0 
    96          iom_init = 1 
     151         iom_open_init = 1 
    97152      ENDIF 
    98153      ! do we read or write the file? 
     
    244299         i_s = 1 
    245300         i_e = jpmax_files 
     301#if defined key_ioserver 
     302         CALL event__stop_ioserver 
     303#endif 
    246304      ENDIF 
    247305 
     
    822880      ENDIF 
    823881   END SUBROUTINE iom_rp3d 
     882 
     883 
    824884   !!---------------------------------------------------------------------- 
     885   !!                   INTERFACE iom_rstput 
     886   !!---------------------------------------------------------------------- 
     887   SUBROUTINE iom_p2d( cdname, pfield2d ) 
     888      CHARACTER(LEN=*)            , INTENT(in) ::   cdname 
     889      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   pfield2d 
     890#if defined key_ioserver 
     891      CALL event__write_field2D( cdname, pfield2d(nldi:nlei, nldj:nlej) ) 
     892#endif 
     893   END SUBROUTINE iom_p2d 
     894 
     895   SUBROUTINE iom_p3d( cdname, pfield3d ) 
     896      CHARACTER(LEN=*)                , INTENT(in) ::   cdname 
     897      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) ::   pfield3d 
     898#if defined key_ioserver 
     899      CALL event__write_field3D( cdname, pfield3d(nldi:nlei, nldj:nlej, :) ) 
     900#endif 
     901   END SUBROUTINE iom_p3d 
     902   !!---------------------------------------------------------------------- 
     903 
     904 
     905#if defined key_ioserver 
     906 
     907   SUBROUTINE set_grid( cdname, plon, plat ) 
     908      !!---------------------------------------------------------------------- 
     909      !!                     ***  ROUTINE   *** 
     910      !! 
     911      !! ** Purpose :    
     912      !! 
     913      !!---------------------------------------------------------------------- 
     914      CHARACTER(LEN=*)            , INTENT(in) ::   cdname 
     915      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   plon 
     916      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   plat 
     917 
     918      CALL event__set_grid_dimension( cdname, jpiglo, jpjglo) 
     919      CALL event__set_grid_domain( cdname, nlei-nldi+1, nlej-nldj+1, nimpp+nldi-1, njmpp+nldj-1, & 
     920         &                         plon(nldi:nlei, nldj:nlej), plat(nldi:nlei, nldj:nlej) ) 
     921      CALL event__set_grid_type_nemo( cdname ) 
     922 
     923   END SUBROUTINE set_grid 
     924 
     925 
     926   SUBROUTINE iom_init_chkcpp 
     927      !!--------------------------------------------------------------------- 
     928      !!                   ***  SUBROUTINE    *** 
     929      !! 
     930      !! ** Purpose :   
     931      !!--------------------------------------------------------------------- 
     932      USE zdfddm, ONLY :   lk_zdfddm      ! vertical  physics: double diffusion 
     933       
     934#if defined key_dynspg_rl 
     935      CALL event__disable_field( "sossheig" ) 
     936#else 
     937      CALL event__disable_field( "sobarstf" ) 
     938#endif 
     939 
     940      !!#if ! ( ! defined key_dynspg_rl && defined key_ice_lim) 
     941      !!        CALL disable_field( "iowaflup" ) 
     942      !!         CALL disable_field( "sowaflep" ) 
     943      !!#endif 
     944 
     945#if ! defined key_coupled 
     946      CALL event__enable_field( "sohefldp" ) 
     947      CALL event__enable_field( "sowafldp" ) 
     948      CALL event__enable_field( "sosafldp" ) 
     949#endif 
     950 
     951#if ( defined key_coupled && ! defined key_lim3 && ! defined key_lim2 )  
     952      CALL event__enable_field( "sohefldp" ) 
     953      CALL event__enable_field( "sowafldp" ) 
     954      CALL event__enable_field( "sosafldp" ) 
     955#endif 
     956 
     957#if ! defined key_diaspr 
     958      CALL event__disable_field( "sosurfps" ) 
     959#endif 
     960 
     961#if ! defined key_diahth 
     962      CALL event__disable_field( "sothedep" ) 
     963      CALL event__disable_field( "so20chgt" ) 
     964      CALL event__disable_field( "so28chgt" ) 
     965      CALL event__disable_field( "sohtc300" ) 
     966#endif 
     967 
     968#if defined key_coupled  
     969# if defined key_lim3 
     970      Must be adapted to LIM3 
     971# else 
     972      CALL event__enable_field( "soicetem" ) 
     973      CALL event__enable_field( "soicealb" ) 
     974# endif  
     975#endif  
     976 
     977#if ! defined key_diaeiv 
     978      CALL event__disable_field( "vozoeivu" ) 
     979      CALL event__disable_field( "vomeeivv" ) 
     980      CALL event__disable_field( "voveeivw" ) 
     981#endif 
     982 
     983#if ! defined key_dynspg_rl 
     984      CALL event__disable_field( "sozospgx" ) 
     985      CALL event__disable_field( "somespgy" ) 
     986#endif 
     987 
     988      IF( lk_zdfddm ) CALL event__enable_field( "voddmavs" ) 
     989 
     990#if ! defined key_traldf_c2d 
     991      CALL event__disable_field( "soleahtw" ) 
     992#endif 
     993 
     994#if ! defined key_traldf_eiv  
     995      CALL event__disable_field( "soleaeiw" ) 
     996#endif 
     997 
     998   END SUBROUTINE iom_init_chkcpp 
     999 
     1000#else 
     1001 
     1002   SUBROUTINE iom_setkt( kt ) 
     1003      INTEGER, INTENT(in   )::   kt  
     1004   END SUBROUTINE iom_setkt 
     1005 
     1006#endif 
    8251007 
    8261008 
Note: See TracChangeset for help on using the changeset viewer.